From f57986ccbf0200e42420483ecaff4d4534cfafb2 Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 16 Apr 2026 18:06:27 +0700 Subject: [PATCH 1/7] minify embed script --- src/globals/common-tests/embed.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/globals/common-tests/embed.c b/src/globals/common-tests/embed.c index 38d8f39fc..c6ba0b260 100644 --- a/src/globals/common-tests/embed.c +++ b/src/globals/common-tests/embed.c @@ -1,17 +1,12 @@ #include -int main(int argc,char **argv){ - - PHP_EMBED_START_BLOCK(argc,argv) - +int main(int argc, char **argv) { + PHP_EMBED_START_BLOCK(argc, argv) zend_file_handle file_handle; - - zend_stream_init_filename(&file_handle,"embed.php"); - - if(!php_execute_script(&file_handle)){ + zend_stream_init_filename(&file_handle, "embed.php"); + if(!php_execute_script(&file_handle)) { php_printf("Failed to execute PHP script.\n"); } - PHP_EMBED_END_BLOCK() return 0; } From ab17fbe2883d9868c0f6320026f3eecae5fb040d Mon Sep 17 00:00:00 2001 From: henderkes Date: Thu, 16 Apr 2026 20:02:54 +0700 Subject: [PATCH 2/7] zig version 0.15.2 for now --- src/SPC/store/pkg/Zig.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SPC/store/pkg/Zig.php b/src/SPC/store/pkg/Zig.php index c2a81c0da..259368bfc 100644 --- a/src/SPC/store/pkg/Zig.php +++ b/src/SPC/store/pkg/Zig.php @@ -82,6 +82,7 @@ public function fetch(string $name, bool $force = false, ?array $config = null): if (!$latest_version) { throw new DownloaderException('Could not determine latest Zig version'); } + $latest_version = '0.15.2'; logger()->info("Installing Zig version {$latest_version}"); From 1a395a2b0fc04f161e04f00dca45f4d8c8691a51 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 17 Apr 2026 01:51:01 +0700 Subject: [PATCH 3/7] fix zig 0.16.0 --- src/SPC/builder/Extension.php | 5 ++++- src/SPC/store/pkg/Zig.php | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 9077269e5..8517f1e5b 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -11,6 +11,8 @@ 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; @@ -231,7 +233,8 @@ public function patchBeforeSharedMake(): bool if (preg_match('/^(.*_SHARED_LIBADD\s*=\s*)(.*)$/m', $makefileContent, $matches)) { $prefix = $matches[1]; $currentLibs = trim($matches[2]); - $newLibs = trim("{$currentLibs} {$staticLibs} {$lstdcpp}"); + $lzig = ToolchainManager::getToolchainClass() === ZigToolchain::class ? '-lcompiler_rt -lunwind' : ''; + $newLibs = clean_spaces("{$currentLibs} {$staticLibs} {$lstdcpp} {$lzig}"); $deduplicatedLibs = deduplicate_flags($newLibs); FileSystem::replaceFileRegex( diff --git a/src/SPC/store/pkg/Zig.php b/src/SPC/store/pkg/Zig.php index 259368bfc..c2a81c0da 100644 --- a/src/SPC/store/pkg/Zig.php +++ b/src/SPC/store/pkg/Zig.php @@ -82,7 +82,6 @@ public function fetch(string $name, bool $force = false, ?array $config = null): if (!$latest_version) { throw new DownloaderException('Could not determine latest Zig version'); } - $latest_version = '0.15.2'; logger()->info("Installing Zig version {$latest_version}"); From cc7a22922c84875015412f496a9f2a059cfca4e6 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 17 Apr 2026 14:17:39 +0700 Subject: [PATCH 4/7] add -lcompiler_rt to SPC_COMPILER_EXTRA instead --- src/SPC/builder/Extension.php | 3 +-- src/SPC/builder/linux/LinuxBuilder.php | 3 ++- src/SPC/toolchain/ZigToolchain.php | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 8517f1e5b..331d29865 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -233,8 +233,7 @@ public function patchBeforeSharedMake(): bool 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 d959aade6..ffc034a7e 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -65,7 +65,8 @@ public function buildPHP(int $build_target = BUILD_TARGET_NONE): void // 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 1b7cc70dc..6ff677698 100644 --- a/src/SPC/toolchain/ZigToolchain.php +++ b/src/SPC/toolchain/ZigToolchain.php @@ -64,6 +64,12 @@ public function afterInit(): void $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) { From f39d77dde088983553ad141b2fcc7474e9596b37 Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 17 Apr 2026 14:19:29 +0700 Subject: [PATCH 5/7] lint --- src/SPC/builder/Extension.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 331d29865..60cc37083 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -11,8 +11,6 @@ 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; From b1a77b01e290da6bb115ad8235bd0d339144918e Mon Sep 17 00:00:00 2001 From: Alex Rock Ancelet Date: Thu, 16 Apr 2026 14:12:07 +0200 Subject: [PATCH 6/7] Add linux mint to ubuntu/debian variants --- src/SPC/doctor/item/LinuxToolCheckList.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPC/doctor/item/LinuxToolCheckList.php b/src/SPC/doctor/item/LinuxToolCheckList.php index 53b356ff3..88c281c3e 100644 --- a/src/SPC/doctor/item/LinuxToolCheckList.php +++ b/src/SPC/doctor/item/LinuxToolCheckList.php @@ -109,7 +109,7 @@ public function checkSystemOSPackages(): ?CheckResult public function fixBuildTools(array $distro, array $missing): bool { $install_cmd = match ($distro['dist']) { - 'ubuntu', 'debian', 'Deepin' => 'apt-get install -y', + 'ubuntu', 'debian', 'linuxmint', 'Deepin' => 'apt-get install -y', 'alpine' => 'apk add', 'redhat' => 'dnf install -y', 'centos' => 'yum install -y', From 0a3c56ba492429f9286c655ed8f4e8e5d2dea89e Mon Sep 17 00:00:00 2001 From: henderkes Date: Fri, 17 Apr 2026 16:03:19 +0700 Subject: [PATCH 7/7] set lcompiler_rt only when building shared extensions --- src/SPC/builder/Extension.php | 8 ++++++++ src/SPC/builder/linux/LinuxBuilder.php | 7 +++++++ src/SPC/toolchain/ZigToolchain.php | 6 ------ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 60cc37083..63dc31d04 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -11,6 +11,9 @@ use SPC\exception\WrongUsageException; use SPC\store\Config; use SPC\store\FileSystem; +use SPC\toolchain\ToolchainManager; +use SPC\toolchain\ZigToolchain; +use SPC\util\GlobalEnvManager; use SPC\util\SPCConfigUtil; use SPC\util\SPCTarget; @@ -543,6 +546,11 @@ public function getLibraryDependencies(bool $recursive = false): array */ protected function getSharedExtensionEnv(): array { + $compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: ''; + if (!str_contains($compiler_extra, '-lcompiler_rt') && ToolchainManager::getToolchainClass() === ZigToolchain::class) { + $compiler_extra = trim($compiler_extra . ' -lcompiler_rt'); + GlobalEnvManager::putenv("SPC_COMPILER_EXTRA={$compiler_extra}"); + } $config = (new SPCConfigUtil($this->builder, ['no_php' => true]))->getExtensionConfig($this); [$staticLibs, $sharedLibs] = $this->splitLibsIntoStaticAndShared($config['libs']); $preStatic = PHP_OS_FAMILY === 'Darwin' ? '' : '-Wl,--start-group '; diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index ffc034a7e..ed26d64f3 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -11,6 +11,8 @@ use SPC\store\DirDiff; 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; @@ -267,6 +269,11 @@ protected function buildFpm(): void */ protected function buildEmbed(): void { + $compiler_extra = getenv('SPC_COMPILER_EXTRA') ?: ''; + if (!str_contains($compiler_extra, '-lcompiler_rt') && ToolchainManager::getToolchainClass() === ZigToolchain::class) { + $compiler_extra = trim($compiler_extra . ' -lcompiler_rt'); + GlobalEnvManager::putenv("SPC_COMPILER_EXTRA={$compiler_extra}"); + } $sharedExts = array_filter($this->exts, static fn ($ext) => $ext->isBuildShared()); $sharedExts = array_filter($sharedExts, static function ($ext) { return Config::getExt($ext->getName(), 'build-with-php') === true; diff --git a/src/SPC/toolchain/ZigToolchain.php b/src/SPC/toolchain/ZigToolchain.php index 6ff677698..1b7cc70dc 100644 --- a/src/SPC/toolchain/ZigToolchain.php +++ b/src/SPC/toolchain/ZigToolchain.php @@ -64,12 +64,6 @@ public function afterInit(): void $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) {