From 43dc04b4d062f63ee3bd53a3b6ffccea163d4c3a Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Fri, 27 Jun 2025 22:01:37 +0700 Subject: [PATCH] building shared libphp.so on musl is really pointless and should be an error, since static compilations cannot load it --- src/SPC/builder/linux/LinuxBuilder.php | 6 ++++++ src/SPC/builder/unix/UnixBuilderBase.php | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/SPC/builder/linux/LinuxBuilder.php b/src/SPC/builder/linux/LinuxBuilder.php index a4b35403..39059201 100644 --- a/src/SPC/builder/linux/LinuxBuilder.php +++ b/src/SPC/builder/linux/LinuxBuilder.php @@ -139,6 +139,9 @@ class LinuxBuilder extends UnixBuilderBase } $embed_type = getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') ?: 'static'; + if ($embed_type !== 'static' && getenv('SPC_LIBC') === 'musl') { + throw new RuntimeException('Musl libc does not support dynamic linking of PHP embed!'); + } shell()->cd(SOURCE_PATH . '/php-src') ->exec( getenv('SPC_CMD_PREFIX_PHP_CONFIGURE') . ' ' . @@ -335,6 +338,9 @@ class LinuxBuilder extends UnixBuilderBase } chdir($cwd); } + if (!$this->getOption('no-strip', false)) { + shell()->cd(SOURCE_PATH . '/php-src/sapi/cli')->exec('strip --strip-all php'); + } $this->patchPhpScripts(); } diff --git a/src/SPC/builder/unix/UnixBuilderBase.php b/src/SPC/builder/unix/UnixBuilderBase.php index 367df036..cc4536dd 100644 --- a/src/SPC/builder/unix/UnixBuilderBase.php +++ b/src/SPC/builder/unix/UnixBuilderBase.php @@ -327,9 +327,11 @@ abstract class UnixBuilderBase extends BuilderBase $debugFlags = $this->getOption('no-strip') ? "'-w -s' " : ''; $extLdFlags = "-extldflags '-pie'"; $muslTags = ''; + $staticFlags = ''; if (PHP_OS_FAMILY === 'Linux' && getenv('SPC_LIBC') === 'musl') { $extLdFlags = "-extldflags '-static-pie -Wl,-z,stack-size=0x80000'"; $muslTags = 'static_build,'; + $staticFlags = '-static -static-pie'; } $config = (new SPCConfigUtil($this))->config($this->ext_list, $this->lib_list, with_dependencies: true); @@ -337,7 +339,7 @@ abstract class UnixBuilderBase extends BuilderBase $env = [ 'CGO_ENABLED' => '1', 'CGO_CFLAGS' => $config['cflags'], - 'CGO_LDFLAGS' => "{$config['ldflags']} {$config['libs']} {$lrt}", + 'CGO_LDFLAGS' => "$staticFlags {$config['ldflags']} {$config['libs']} {$lrt}", 'XCADDY_GO_BUILD_FLAGS' => '-buildmode=pie ' . '-ldflags \"-linkmode=external ' . $extLdFlags . ' ' . $debugFlags . '-X \'github.com/caddyserver/caddy/v2.CustomVersion=FrankenPHP ' .