'Linux', str_contains($target, '-macos') => 'Darwin', str_contains($target, '-windows') => 'Windows', str_contains($target, '-native') => PHP_OS_FAMILY, default => PHP_OS_FAMILY, }; } /** * Returns the target architecture, e.g. x86_64, aarch64. * Currently, we only support 'x86_64' and 'aarch64' and both can only be built natively. */ public static function getTargetArch(): string { $target = (string) getenv('SPC_TARGET'); return match (true) { str_contains($target, 'x86_64') || str_contains($target, 'amd64') => 'x86_64', str_contains($target, 'aarch64') || str_contains($target, 'arm64') => 'aarch64', // str_contains($target, 'armv7') || str_contains($target, 'armhf') => 'armv7', // str_contains($target, 'armv6') || str_contains($target, 'armel') => 'armv6', // str_contains($target, 'i386') || str_contains($target, 'i686') => 'i386', default => GNU_ARCH, }; } /** * Get the current platform string in the format of {os}-{arch}, e.g. linux-x86_64. */ public static function getCurrentPlatformString(): string { $os = match (self::getTargetOS()) { 'Darwin' => 'macos', 'Linux' => 'linux', 'Windows' => 'windows', default => 'unknown', }; $arch = self::getTargetArch(); if (getenv('EMULATE_PLATFORM') !== false) { return getenv('EMULATE_PLATFORM'); } return "{$os}-{$arch}"; } /** * Check if the target OS is a Unix-like system. */ public static function isUnix(): bool { return in_array(self::getTargetOS(), ['Linux', 'Darwin', 'BSD']); } }