From e0734fe848ed756eb3c705bb268124cc19f21b01 Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Thu, 12 Jun 2025 01:16:57 +0800 Subject: [PATCH] Add frameworks for extension --- config/ext.json | 4 ++++ src/SPC/builder/Extension.php | 5 +++++ src/SPC/builder/macos/MacOSBuilder.php | 4 ++++ src/SPC/util/SPCConfigUtil.php | 19 ++++++++++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/config/ext.json b/config/ext.json index ad42071d..9f9d5c5f 100644 --- a/config/ext.json +++ b/config/ext.json @@ -424,6 +424,10 @@ "openssl", "zstd", "zlib" + ], + "frameworks": [ + "CoreFoundation", + "Security" ] }, "msgpack": { diff --git a/src/SPC/builder/Extension.php b/src/SPC/builder/Extension.php index 6581414b..6ec68b6f 100644 --- a/src/SPC/builder/Extension.php +++ b/src/SPC/builder/Extension.php @@ -53,6 +53,11 @@ class Extension } } + public function getFrameworks(): array + { + return Config::getExt($this->getName(), 'frameworks', []); + } + /** * 获取开启该扩展的 PHP 编译添加的参数 * diff --git a/src/SPC/builder/macos/MacOSBuilder.php b/src/SPC/builder/macos/MacOSBuilder.php index f83b07ad..2205f4a0 100644 --- a/src/SPC/builder/macos/MacOSBuilder.php +++ b/src/SPC/builder/macos/MacOSBuilder.php @@ -67,6 +67,10 @@ class MacOSBuilder extends UnixBuilderBase array_push($frameworks, ...$lib->getFrameworks()); } + foreach ($this->exts as $ext) { + array_push($frameworks, ...$ext->getFrameworks()); + } + if ($asString) { return implode(' ', array_map(fn ($x) => "-framework {$x}", $frameworks)); } diff --git a/src/SPC/util/SPCConfigUtil.php b/src/SPC/util/SPCConfigUtil.php index 375d40cd..8e69e89c 100644 --- a/src/SPC/util/SPCConfigUtil.php +++ b/src/SPC/util/SPCConfigUtil.php @@ -55,10 +55,13 @@ class SPCConfigUtil ob_get_clean(); $ldflags = $this->getLdflagsString(); $libs = $this->getLibsString($libraries, $with_dependencies); + if (PHP_OS_FAMILY === 'Darwin') { + $libs .= " {$this->getFrameworksString($extensions)}"; + } $cflags = $this->getIncludesString(); // embed - $libs = '-lphp -lc ' . $libs; + $libs = trim("-lphp -lc {$libs}"); $extra_env = getenv('SPC_CMD_VAR_PHP_MAKE_EXTRA_LIBS'); if (is_string($extra_env)) { $libs .= ' ' . trim($extra_env, '"'); @@ -157,4 +160,18 @@ class SPCConfigUtil // get short name return '-l' . substr($lib, 3, -2); } + + private function getFrameworksString(array $extensions): string + { + $list = []; + foreach ($extensions as $extension) { + foreach (Config::getExt($extension, 'frameworks', []) as $fw) { + $ks = '-framework ' . $fw; + if (!in_array($ks, $list)) { + $list[] = $ks; + } + } + } + return implode(' ', $list); + } }