From 3d4b87b107e5dd41af80a45096c47fd7ceed52a2 Mon Sep 17 00:00:00 2001 From: henderkes Date: Sat, 21 Feb 2026 10:20:00 +0700 Subject: [PATCH] zig hasn't released 0.16 yet --- src/SPC/builder/LibraryBase.php | 10 ++++++---- src/SPC/builder/traits/UnixSystemUtilTrait.php | 5 +++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/SPC/builder/LibraryBase.php b/src/SPC/builder/LibraryBase.php index de34d375..baf14c0d 100644 --- a/src/SPC/builder/LibraryBase.php +++ b/src/SPC/builder/LibraryBase.php @@ -384,11 +384,13 @@ abstract class LibraryBase } return true; // allow using system dependencies if pkg_config_path is explicitly defined } - if (getenv('SPC_LINK_STATIC')) { - foreach (Config::getLib(static::NAME, 'static-libs', []) as $name) { - if (!file_exists(BUILD_LIB_PATH . "/{$name}")) { - return false; + foreach (Config::getLib(static::NAME, 'static-libs', []) as $name) { + if (!file_exists(BUILD_LIB_PATH . "/{$name}")) { + $sharedLib = str_replace('.a', '.so', $name); + if (!getenv('SPC_LINK_STATIC') && file_exists(BUILD_LIB_PATH . "/{$sharedLib}")) { + continue; } + return false; } } foreach (Config::getLib(static::NAME, 'headers', []) as $name) { diff --git a/src/SPC/builder/traits/UnixSystemUtilTrait.php b/src/SPC/builder/traits/UnixSystemUtilTrait.php index ff75bf7c..3450926c 100644 --- a/src/SPC/builder/traits/UnixSystemUtilTrait.php +++ b/src/SPC/builder/traits/UnixSystemUtilTrait.php @@ -7,6 +7,7 @@ namespace SPC\builder\traits; use SPC\exception\ExecutionException; use SPC\exception\SPCInternalException; use SPC\exception\WrongUsageException; +use SPC\store\pkg\Zig; use SPC\toolchain\ToolchainManager; use SPC\toolchain\ZigToolchain; use SPC\util\SPCTarget; @@ -73,6 +74,10 @@ trait UnixSystemUtilTrait throw new SPCInternalException("The symbol file {$symbol_file} does not exist, please check if nm command is available."); } // macOS/zig + // https://github.com/ziglang/zig/issues/24662 + if (ToolchainManager::getToolchainClass() === ZigToolchain::class) { + return '-Wl,--export-dynamic'; // needs release 0.16, can be removed then + } if (SPCTarget::getTargetOS() !== 'Linux' || ToolchainManager::getToolchainClass() === ZigToolchain::class) { return "-Wl,-exported_symbols_list,{$symbol_file}"; }