mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-03-19 05:14:52 +08:00
45 lines
1.7 KiB
PHP
45 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace SPC\toolchain;
|
|
|
|
use SPC\builder\freebsd\SystemUtil as FreeBSDSystemUtil;
|
|
use SPC\builder\linux\SystemUtil as LinuxSystemUtil;
|
|
use SPC\builder\macos\SystemUtil as MacOSSystemUtil;
|
|
use SPC\exception\WrongUsageException;
|
|
use SPC\util\GlobalEnvManager;
|
|
|
|
/**
|
|
* Toolchain implementation for system clang compiler.
|
|
*/
|
|
class ClangNativeToolchain implements ToolchainInterface
|
|
{
|
|
public function initEnv(): void
|
|
{
|
|
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CC=clang');
|
|
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_CXX=clang++');
|
|
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_AR=ar');
|
|
GlobalEnvManager::putenv('SPC_LINUX_DEFAULT_LD=ld');
|
|
}
|
|
|
|
/**
|
|
* @throws WrongUsageException
|
|
*/
|
|
public function afterInit(): void
|
|
{
|
|
foreach (['CC', 'CXX', 'AR', 'LD'] as $env) {
|
|
$command = getenv($env);
|
|
if (!$command || is_file($command)) {
|
|
continue;
|
|
}
|
|
match (PHP_OS_FAMILY) {
|
|
'Linux' => LinuxSystemUtil::findCommand($command) ?? throw new WrongUsageException("{$command} not found, please install it or set {$env} to a valid path."),
|
|
'Darwin' => MacOSSystemUtil::findCommand($command) ?? throw new WrongUsageException("{$command} not found, please install it or set {$env} to a valid path."),
|
|
'BSD' => FreeBSDSystemUtil::findCommand($command) ?? throw new WrongUsageException("{$command} not found, please install it or set {$env} to a valid path."),
|
|
default => throw new \RuntimeException(__CLASS__ . ' is not supported on ' . PHP_OS_FAMILY . '.'),
|
|
};
|
|
}
|
|
}
|
|
}
|