diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 8517f1e5..331d2986 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -233,8 +233,7 @@ class Extension if (preg_match('/^(.*_SHARED_LIBADD\s*=\s*)(.*)$/m', $makefileContent, $matches)) { $prefix = $matches[1]; $currentLibs = trim($matches[2]); - $lzig = ToolchainManager::getToolchainClass() === ZigToolchain::class ? '-lcompiler_rt -lunwind' : ''; - $newLibs = clean_spaces("{$currentLibs} {$staticLibs} {$lstdcpp} {$lzig}"); + $newLibs = clean_spaces("{$currentLibs} {$staticLibs} {$lstdcpp}"); $deduplicatedLibs = deduplicate_flags($newLibs); FileSystem::replaceFileRegex( diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index d959aade..ffc034a7 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -65,7 +65,8 @@ class LinuxBuilder extends UnixBuilderBase // php 8.5 contains opcache extension by default, // if opcache_jit is enabled for 8.5 or opcache enabled, // we need to disable undefined behavior sanitizer. - f_putenv('SPC_COMPILER_EXTRA=-fno-sanitize=undefined'); + $compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: ''; + f_putenv('SPC_COMPILER_EXTRA=' . trim($compiler_extra . ' -fno-sanitize=undefined')); } if ($this->getOption('enable-zts', false)) { diff --git a/src/SPC/toolchain/ZigToolchain.php b/src/SPC/toolchain/ZigToolchain.php index 1b7cc70d..6ff67769 100644 --- a/src/SPC/toolchain/ZigToolchain.php +++ b/src/SPC/toolchain/ZigToolchain.php @@ -64,6 +64,12 @@ class ZigToolchain implements ToolchainInterface $extra_libs = trim($extra_libs . ' -lunwind'); GlobalEnvManager::putenv("SPC_EXTRA_LIBS={$extra_libs}"); } + $compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: ''; + if (!str_contains($compiler_extra, '-lcompiler_rt')) { + // Add unwind library if not already present + $compiler_extra = trim($compiler_extra . ' -lcompiler_rt'); + GlobalEnvManager::putenv("SPC_COMPILER_EXTRA={$compiler_extra}"); + } $cflags = getenv('SPC_DEFAULT_C_FLAGS') ?: getenv('CFLAGS') ?: ''; $has_avx512 = str_contains($cflags, '-mavx512') || str_contains($cflags, '-march=x86-64-v4'); if (!$has_avx512) {