Skip to content

Commit 5172580

Browse files
committed
toolchain: add SPC_DEFAULT_RANLIB and pin cmake AR/RANLIB
ClangBrew, ClangNative and GccNative now export SPC_DEFAULT_RANLIB alongside SPC_DEFAULT_AR. UnixCMakeExecutor honours both when generating the Linux toolchain file, so cmake uses the toolchain's ar/ranlib (e.g. zig-ar/zig-ranlib for archives that the system ranlib does not understand) instead of /usr/bin/ranlib.
1 parent 7ae5d74 commit 5172580

4 files changed

Lines changed: 8 additions & 2 deletions

File tree

src/StaticPHP/Runtime/Executor/UnixCMakeExecutor.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,12 @@ private function makeCmakeToolchainFile(): string
302302
set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES "{$include}")
303303
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES "{$include}")
304304
CMAKE;
305-
// Whoops, linux may need CMAKE_AR sometimes
305+
// pin AR/RANLIB so cmake uses zig-ar/zig-ranlib instead of system /usr/bin/ranlib (zig archives need it)
306306
if (PHP_OS_FAMILY === 'Linux') {
307-
$toolchain .= "\nSET(CMAKE_AR \"ar\")";
307+
$ar = getenv('SPC_DEFAULT_AR') ?: getenv('AR') ?: 'ar';
308+
$ranlib = getenv('SPC_DEFAULT_RANLIB') ?: (getenv('RANLIB') ?: 'ranlib');
309+
$toolchain .= "\nSET(CMAKE_AR \"{$ar}\")";
310+
$toolchain .= "\nSET(CMAKE_RANLIB \"{$ranlib}\")";
308311
}
309312
FileSystem::writeFile(SOURCE_PATH . '/toolchain.cmake', $toolchain);
310313
return $created = realpath(SOURCE_PATH . '/toolchain.cmake');

src/StaticPHP/Toolchain/ClangBrewToolchain.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public function initEnv(): void
1515
GlobalEnvManager::putenv("SPC_DEFAULT_CC={$homebrew_prefix}/opt/llvm/bin/clang");
1616
GlobalEnvManager::putenv("SPC_DEFAULT_CXX={$homebrew_prefix}/opt/llvm/bin/clang++");
1717
GlobalEnvManager::putenv("SPC_DEFAULT_AR={$homebrew_prefix}/opt/llvm/bin/llvm-ar");
18+
GlobalEnvManager::putenv("SPC_DEFAULT_RANLIB={$homebrew_prefix}/opt/llvm/bin/llvm-ranlib");
1819
GlobalEnvManager::putenv('SPC_DEFAULT_LD=ld');
1920
GlobalEnvManager::addPathIfNotExists("{$homebrew_prefix}/opt/llvm/bin");
2021
}

src/StaticPHP/Toolchain/ClangNativeToolchain.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public function initEnv(): void
2121
GlobalEnvManager::putenv('SPC_DEFAULT_CC=clang');
2222
GlobalEnvManager::putenv('SPC_DEFAULT_CXX=clang++');
2323
GlobalEnvManager::putenv('SPC_DEFAULT_AR=ar');
24+
GlobalEnvManager::putenv('SPC_DEFAULT_RANLIB=ranlib');
2425
GlobalEnvManager::putenv('SPC_DEFAULT_LD=ld');
2526
}
2627

src/StaticPHP/Toolchain/GccNativeToolchain.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public function initEnv(): void
1818
GlobalEnvManager::putenv('SPC_DEFAULT_CC=gcc');
1919
GlobalEnvManager::putenv('SPC_DEFAULT_CXX=g++');
2020
GlobalEnvManager::putenv('SPC_DEFAULT_AR=ar');
21+
GlobalEnvManager::putenv('SPC_DEFAULT_RANLIB=ranlib');
2122
GlobalEnvManager::putenv('SPC_DEFAULT_LD=ld');
2223
}
2324

0 commit comments

Comments
 (0)