From 2d1a61d18439d73a3d8961a3b98d2a8660caed29 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 30 Sep 2025 14:00:13 +0200 Subject: [PATCH] explicitly disable avx512 if zig and march not high enough --- src/SPC/builder/Extension.php | 9 ++++++++- src/SPC/builder/extension/simdjson.php | 16 ---------------- src/SPC/builder/linux/LinuxBuilder.php | 8 ++++++++ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 1ee0e4b9..cb590167 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -10,6 +10,8 @@ use SPC\exception\ValidationException; use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -427,13 +429,18 @@ class Extension logger()->info("Extension [{$this->getName()}] patched before shared configure"); } + $has_avx512 = str_contains($this->builder->arch_c_flags ?? '', '-mavx512') || + str_contains($this->builder->arch_c_flags ?? '', '-march=x86-64-v3') || + str_contains($this->arch_c_flags ?? '', '-march=x86-64-v4') || + ToolchainManager::getToolchainClass() !== ZigToolchain::class; + shell()->cd($this->source_dir) ->setEnv($env) ->appendEnv($this->getExtraEnv()) ->exec( './configure ' . $this->getUnixConfigureArg(true) . ' --with-php-config=' . BUILD_BIN_PATH . '/php-config ' . - '--enable-shared --disable-static' + '--enable-shared --disable-static' . (!$has_avx512 ? ' php_cv_have_avx512=no ' : '') ); if ($this->patchBeforeSharedMake()) { diff --git a/src/SPC/builder/extension/simdjson.php b/src/SPC/builder/extension/simdjson.php index 914fd674..1be99eb9 100644 --- a/src/SPC/builder/extension/simdjson.php +++ b/src/SPC/builder/extension/simdjson.php @@ -6,8 +6,6 @@ namespace SPC\builder\extension; use SPC\builder\Extension; use SPC\store\FileSystem; -use SPC\toolchain\ToolchainManager; -use SPC\toolchain\ZigToolchain; use SPC\util\CustomExt; #[CustomExt('simdjson')] @@ -33,18 +31,4 @@ class simdjson extends Extension ); return true; } - - public function getSharedExtensionEnv(): array - { - $env = parent::getSharedExtensionEnv(); - if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { - $extra = getenv('SPC_COMPILER_EXTRA'); - if (!str_contains((string) $extra, '-lstdc++')) { - f_putenv('SPC_COMPILER_EXTRA=' . clean_spaces($extra . ' -lstdc++')); - } - $env['CFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; - $env['CXXFLAGS'] .= ' -Xclang -target-feature -Xclang +evex512'; - } - return $env; - } } diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index b1b1ffc5..0eaf86a9 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -9,6 +9,8 @@ use SPC\exception\PatchException; use SPC\exception\WrongUsageException; use SPC\store\FileSystem; use SPC\store\SourcePatcher; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; use SPC\util\GlobalEnvManager; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -103,6 +105,11 @@ class LinuxBuilder extends UnixBuilderBase ); } + $has_avx512 = str_contains($this->arch_c_flags, '-mavx512') || + str_contains($this->arch_c_flags, '-march=x86-64-v3') || + str_contains($this->arch_c_flags, '-march=x86-64-v4') || + ToolchainManager::getToolchainClass() !== ZigToolchain::class; + $this->seekPhpSrcLogFileOnException(fn () => shell()->cd(SOURCE_PATH . '/php-src')->exec( $php_configure_env . ' ' . getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' . @@ -116,6 +123,7 @@ class LinuxBuilder extends UnixBuilderBase $json_74 . $zts . $maxExecutionTimers . + (!$has_avx512 ? 'php_cv_have_avx512=no ' : '') . $this->makeStaticExtensionArgs() . ' ' ));