From a6364389baf275228498fc3cd75dd0a3bf15983d Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Sat, 28 Jun 2025 23:11:26 +0800 Subject: [PATCH] Add suffix support for SPC_TARGET --- src/SPC/util/SPCTarget.php | 14 +++++++++++++- src/SPC/util/toolchain/ClangNativeToolchain.php | 5 +++++ src/SPC/util/toolchain/GccNativeToolchain.php | 5 +++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/SPC/util/SPCTarget.php b/src/SPC/util/SPCTarget.php index 2d81fc4e..ec7308bf 100644 --- a/src/SPC/util/SPCTarget.php +++ b/src/SPC/util/SPCTarget.php @@ -43,6 +43,8 @@ class SPCTarget return false; } $env = strtolower($env); + // ver + $env = explode('@', $env)[0]; return $env === $target; } @@ -53,7 +55,9 @@ class SPCTarget return false; } $env = strtolower($env); - return str_ends_with($env, '-static') || $env === self::MUSL_STATIC; + // ver + $env = explode('@', $env)[0]; + return str_ends_with($env, '-static'); } public static function initTargetForToolchain(string $toolchain): void @@ -80,4 +84,12 @@ class SPCTarget $toolchainClass = self::TOOLCHAIN_LIST[$toolchain]; (new $toolchainClass())->afterInit(getenv('SPC_TARGET')); } + + public static function getTargetSuffix(): ?string + { + $target = getenv('SPC_TARGET'); + $target = strtolower($target); + // ver + return explode('@', $target)[1] ?? null; + } } diff --git a/src/SPC/util/toolchain/ClangNativeToolchain.php b/src/SPC/util/toolchain/ClangNativeToolchain.php index 863636ec..ac93513a 100644 --- a/src/SPC/util/toolchain/ClangNativeToolchain.php +++ b/src/SPC/util/toolchain/ClangNativeToolchain.php @@ -9,11 +9,16 @@ use SPC\builder\linux\SystemUtil as LinuxSystemUtil; use SPC\builder\macos\SystemUtil as MacOSSystemUtil; use SPC\exception\WrongUsageException; use SPC\util\GlobalEnvManager; +use SPC\util\SPCTarget; class ClangNativeToolchain implements ToolchainInterface { public function initEnv(string $target): void { + // native toolchain does not support versioning + if (SPCTarget::getTargetSuffix() !== null) { + throw new WrongUsageException('Clang native toolchain does not support versioning.'); + } GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CC=clang'); GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CXX=clang++'); GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_AR=ar'); diff --git a/src/SPC/util/toolchain/GccNativeToolchain.php b/src/SPC/util/toolchain/GccNativeToolchain.php index b9882a9a..2547334a 100644 --- a/src/SPC/util/toolchain/GccNativeToolchain.php +++ b/src/SPC/util/toolchain/GccNativeToolchain.php @@ -9,11 +9,16 @@ use SPC\builder\linux\SystemUtil as LinuxSystemUtil; use SPC\builder\macos\SystemUtil as MacOSSystemUtil; use SPC\exception\WrongUsageException; use SPC\util\GlobalEnvManager; +use SPC\util\SPCTarget; class GccNativeToolchain implements ToolchainInterface { public function initEnv(string $target): void { + // native toolchain does not support versioning + if (SPCTarget::getTargetSuffix() !== null) { + throw new WrongUsageException('gcc native toolchain does not support versioning.'); + } GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CC=gcc'); GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CXX=g++'); GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_AR=ar');