From 9a3a5364795e8d665117a37e0053bab48eddc40c Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Wed, 25 Jun 2025 14:32:00 +0700 Subject: [PATCH] runtime object patch for shared extensions --- config/env.ini | 3 +++ src/SPC/builder/Extension.php | 11 ++++++++++- src/SPC/builder/extension/uv.php | 1 + src/SPC/builder/linux/LinuxBuilder.php | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/config/env.ini b/config/env.ini index c00aafc3..48de32a0 100644 --- a/config/env.ini +++ b/config/env.ini @@ -108,6 +108,9 @@ SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS="" ; EXTRA_LDFLAGS_PROGRAM for `make` php SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS_PROGRAM="-all-static -pie" +# Zig +ZIG_SHARED_EXTENSION_EXTRA_OBJECTS="/usr/lib/gcc/x86_64-redhat-linux/14/crtbeginS.o /usr/lib/gcc/x86_64-redhat-linux/14/crtendS.o" + [macos] ; compiler environments CC=clang diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 6bb87782..b4b4827d 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -215,7 +215,16 @@ class Extension */ public function patchBeforeSharedMake(): bool { - return false; + if (!str_contains(getenv('CC'), 'zig')) { + return false; + } + $extra = getenv('ZIG_SHARED_EXTENSION_EXTRA_OBJECTS'); + FileSystem::replaceFileRegex( + $this->source_dir . '/Makefile', + "/^(shared_objects_{$this->getName()}\s*=.*)$/m", + "$1 {$extra}", + ); + return true; } /** diff --git a/src/SPC/builder/extension/uv.php b/src/SPC/builder/extension/uv.php index 8c54e007..d803a750 100644 --- a/src/SPC/builder/extension/uv.php +++ b/src/SPC/builder/extension/uv.php @@ -20,6 +20,7 @@ class uv extends Extension public function patchBeforeSharedMake(): bool { + parent::patchBeforeSharedMake(); if (PHP_OS_FAMILY !== 'Linux' || arch2gnu(php_uname('m')) !== 'aarch64') { return false; } diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index d0704a5e..f9e9b6a1 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -308,6 +308,9 @@ class LinuxBuilder extends UnixBuilderBase } if (file_exists($libphpRelease)) { chdir(BUILD_LIB_PATH); + if (file_exists($libphpPath)) { + unlink($libphpPath); + } symlink($realLibName, 'libphp.so'); } if (is_dir(BUILD_MODULES_PATH)) {