Skip to content

Commit 991da26

Browse files
committed
Enhance CMake configuration with dynamic linker flags for target packages
1 parent d316ea8 commit 991da26

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/StaticPHP/Runtime/Executor/UnixCMakeExecutor.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@
1010
use StaticPHP\Package\LibraryPackage;
1111
use StaticPHP\Package\PackageBuilder;
1212
use StaticPHP\Package\PackageInstaller;
13+
use StaticPHP\Package\TargetPackage;
1314
use StaticPHP\Runtime\Shell\UnixShell;
15+
use StaticPHP\Runtime\SystemTarget;
1416
use StaticPHP\Util\FileSystem;
1517
use StaticPHP\Util\InteractiveTerm;
1618
use StaticPHP\Util\PkgConfigUtil;
19+
use StaticPHP\Util\SPCConfigUtil;
1720
use ZM\Logger\ConsoleColor;
1821

1922
/**
@@ -214,7 +217,7 @@ public function getConfigureArgsString(): string
214217
*/
215218
private function getDefaultCMakeArgs(): array
216219
{
217-
return $this->custom_default_args ?? [
220+
$args = $this->custom_default_args ?? [
218221
'-DCMAKE_BUILD_TYPE=Release',
219222
"-DCMAKE_INSTALL_PREFIX={$this->package->getBuildRootPath()}",
220223
'-DCMAKE_INSTALL_BINDIR=bin',
@@ -224,6 +227,20 @@ private function getDefaultCMakeArgs(): array
224227
'-DBUILD_SHARED_LIBS=OFF',
225228
"-DCMAKE_TOOLCHAIN_FILE={$this->makeCmakeToolchainFile()}",
226229
];
230+
231+
// EXE linker flags: base system libs + framework flags for target packages
232+
$exeLinkerFlags = SystemTarget::getRuntimeLibs();
233+
if ($this->package instanceof TargetPackage) {
234+
$resolvedNames = array_keys($this->installer->getResolvedPackages());
235+
$resolvedNames[] = $this->package->getName();
236+
$fwFlags = SPCConfigUtil::getFrameworksString($resolvedNames);
237+
if ($fwFlags !== '') {
238+
$exeLinkerFlags .= " {$fwFlags}";
239+
}
240+
}
241+
$args[] = "-DCMAKE_EXE_LINKER_FLAGS=\"{$exeLinkerFlags}\"";
242+
243+
return $args;
227244
}
228245

229246
/**
@@ -274,13 +291,13 @@ private function makeCmakeToolchainFile(): string
274291
SET(CMAKE_INSTALL_PREFIX "{$root}")
275292
SET(CMAKE_INSTALL_LIBDIR "lib")
276293
277-
set(PKG_CONFIG_EXECUTABLE "{$pkgConfigExecutable}")
294+
set(PKG_CONFIG_EXECUTABLE "{$pkgConfigExecutable}" CACHE FILEPATH "pkg-config executable" FORCE)
278295
set(PKG_CONFIG_ARGN "--static" CACHE STRING "Extra arguments for pkg-config" FORCE)
296+
set(ENV{PKG_CONFIG_PATH} "{$root}/lib/pkgconfig")
279297
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
280298
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
281299
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
282300
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
283-
set(CMAKE_EXE_LINKER_FLAGS "-ldl -lpthread -lm -lutil")
284301
CMAKE;
285302
// Whoops, linux may need CMAKE_AR sometimes
286303
if (PHP_OS_FAMILY === 'Linux') {

0 commit comments

Comments
 (0)