Merge _configs/ into config/ for single configuration directory. Update all path references. Changes: - Move _configs/* to config/ - Update .gitignore for new patterns - No code references to _configs/ found Impact: -1 root directory (layout_conventions.md compliance)
166 lines
5.3 KiB
Plaintext
166 lines
5.3 KiB
Plaintext
# Platform detection utilities
|
|
#
|
|
# Provides functions to detect current OS, architecture, and map to cargo target triples
|
|
|
|
# Detect current operating system
|
|
export def detect-os [] {
|
|
let sys = (sys host)
|
|
match $sys.name {
|
|
"Linux" => { "linux" }
|
|
"Darwin" => { "macos" }
|
|
"Windows" => { "windows" }
|
|
_ => {
|
|
let msg = "Unsupported OS: " + ($sys.name | into string)
|
|
error make {msg: $msg}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Detect current architecture
|
|
export def detect-arch [] {
|
|
let arch_output = (^uname -m | str trim)
|
|
match $arch_output {
|
|
"x86_64" => { "x86_64" }
|
|
"aarch64" => { "aarch64" }
|
|
"arm64" => { "aarch64" }
|
|
"i686" => { "i686" }
|
|
"i386" => { "i386" }
|
|
_ => {
|
|
let msg = "Unsupported architecture: " + ($arch_output | into string)
|
|
error make {msg: $msg}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Get the appropriate libc variant for Linux
|
|
export def detect-libc [] {
|
|
try {
|
|
let ldd_output = (^ldd --version | head -1)
|
|
if ($ldd_output | str contains "musl") {
|
|
"musl"
|
|
} else {
|
|
"glibc"
|
|
}
|
|
} catch {
|
|
"glibc"
|
|
}
|
|
}
|
|
|
|
# Map OS, arch, libc to cargo target triple
|
|
export def map-to-target [--os: string = "", --arch: string = "", --libc: string = ""] {
|
|
let os = if ($os == "") { detect-os } else { $os }
|
|
let arch = if ($arch == "") { detect-arch } else { $arch }
|
|
let libc = if (($libc == "") and ($os == "linux")) { detect-libc } else { $libc }
|
|
|
|
match [$os, $arch, $libc] {
|
|
["linux", "x86_64", "glibc"] => { "x86_64-unknown-linux-gnu" }
|
|
["linux", "x86_64", "musl"] => { "x86_64-unknown-linux-musl" }
|
|
["linux", "aarch64", "glibc"] => { "aarch64-unknown-linux-gnu" }
|
|
["linux", "aarch64", "musl"] => { "aarch64-unknown-linux-musl" }
|
|
["macos", "x86_64", _] => { "x86_64-apple-darwin" }
|
|
["macos", "aarch64", _] => { "aarch64-apple-darwin" }
|
|
["windows", "x86_64", _] => { "x86_64-pc-windows-msvc" }
|
|
_ => {
|
|
let msg = "Unsupported combination: os=" + $os + ", arch=" + $arch + ", libc=" + $libc
|
|
error make {msg: $msg}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Get current platform as target triple
|
|
export def current-target [] {
|
|
map-to-target
|
|
}
|
|
|
|
# Get all enabled targets from provisioning config
|
|
export def available-targets [config_file: path] {
|
|
let config = (open --raw $config_file | from toml)
|
|
# Return all target keys from config
|
|
["x86_64-unknown-linux-gnu" "aarch64-unknown-linux-gnu" "x86_64-apple-darwin" "aarch64-apple-darwin" "x86_64-pc-windows-msvc"]
|
|
}
|
|
|
|
# Get default installation prefix for a platform
|
|
export def default-prefix [target: string] {
|
|
match $target {
|
|
"x86_64-unknown-linux-gnu" => { "/usr/local" }
|
|
"x86_64-unknown-linux-musl" => { "/usr/local" }
|
|
"aarch64-unknown-linux-gnu" => { "/usr/local" }
|
|
"aarch64-unknown-linux-musl" => { "/usr/local" }
|
|
"x86_64-apple-darwin" => { "/usr/local" }
|
|
"aarch64-apple-darwin" => { "/usr/local" }
|
|
"x86_64-pc-windows-msvc" => { "C:\\Program Files\\syntaxis" }
|
|
_ => { "/usr/local" }
|
|
}
|
|
}
|
|
|
|
# Check if target is available in config
|
|
export def is-target-enabled [target: string, config_file: path] {
|
|
let config = (open --raw $config_file | from toml)
|
|
let target_config = ($config.targets | get -o $target)
|
|
if (($target_config == null)) {
|
|
false
|
|
} else {
|
|
$target_config.enabled
|
|
}
|
|
}
|
|
|
|
# Get supported formats for a target
|
|
export def target-formats [target: string, config_file: path] {
|
|
let config = (open --raw $config_file | from toml)
|
|
let target_config = ($config.targets | get -o $target)
|
|
if (($target_config == null)) {
|
|
["tar.gz"]
|
|
} else {
|
|
$target_config.formats
|
|
}
|
|
}
|
|
|
|
# Get friendly target description
|
|
export def target-description [target: string, config_file: path] {
|
|
let config = (open --raw $config_file | from toml)
|
|
let target_config = ($config.targets | get -o $target)
|
|
if (($target_config == null)) {
|
|
$target
|
|
} else {
|
|
$target_config.description
|
|
}
|
|
}
|
|
|
|
# List all supported targets with descriptions
|
|
export def list-targets [config_file: path] {
|
|
let config = (open --raw $config_file | from toml)
|
|
# Return hardcoded target list with descriptions
|
|
[
|
|
{
|
|
target: "x86_64-unknown-linux-gnu"
|
|
enabled: ($config.targets.x86_64-unknown-linux-gnu.enabled // true)
|
|
description: "Linux x86_64 (glibc)"
|
|
formats: "tar.gz"
|
|
}
|
|
{
|
|
target: "aarch64-unknown-linux-gnu"
|
|
enabled: ($config.targets.aarch64-unknown-linux-gnu.enabled // true)
|
|
description: "Linux ARM64 (glibc)"
|
|
formats: "tar.gz"
|
|
}
|
|
{
|
|
target: "x86_64-apple-darwin"
|
|
enabled: ($config.targets.x86_64-apple-darwin.enabled // true)
|
|
description: "macOS x86_64"
|
|
formats: "tar.gz,zip"
|
|
}
|
|
{
|
|
target: "aarch64-apple-darwin"
|
|
enabled: ($config.targets.aarch64-apple-darwin.enabled // true)
|
|
description: "macOS ARM64"
|
|
formats: "tar.gz,zip"
|
|
}
|
|
{
|
|
target: "x86_64-pc-windows-msvc"
|
|
enabled: ($config.targets.x86_64-pc-windows-msvc.enabled // true)
|
|
description: "Windows x86_64"
|
|
formats: "zip"
|
|
}
|
|
]
|
|
}
|