runtime object patch for shared extensions

This commit is contained in:
DubbleClick 2025-06-25 14:32:00 +07:00
parent 55f01149e4
commit 9a3a536479
4 changed files with 17 additions and 1 deletions

View File

@ -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

View File

@ -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;
}
/**

View File

@ -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;
}

View File

@ -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)) {