45 lines
1.6 KiB
PowerShell
45 lines
1.6 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
param(
|
|
[Parameter(Mandatory=$false)][switch]$EnsureLLVM,
|
|
[Parameter(Mandatory=$false)][switch]$SetPermanentEnv,
|
|
[Parameter(Mandatory=$false)][string]$Profile = "release",
|
|
[Parameter(Mandatory=$false)][string]$Target,
|
|
[Parameter(Mandatory=$false)][string]$App,
|
|
[Parameter(Mandatory=$false)][string]$Out = "app.exe"
|
|
)
|
|
|
|
$ErrorActionPreference = 'Stop'
|
|
function Info($m){ Write-Host "[build-nyash-llvm] $m" -ForegroundColor Cyan }
|
|
function Warn($m){ Write-Host "[build-nyash-llvm] WARN: $m" -ForegroundColor Yellow }
|
|
function Err($m){ Write-Host "[build-nyash-llvm] ERROR: $m" -ForegroundColor Red; exit 1 }
|
|
|
|
# Move to repo root for stable paths
|
|
Set-Location (Split-Path -Parent $PSCommandPath) | Out-Null
|
|
Set-Location (Resolve-Path ..\..) | Out-Null
|
|
|
|
if ($EnsureLLVM) {
|
|
$args = @()
|
|
if ($SetPermanentEnv) { $args += "-SetPermanent" }
|
|
& tools\windows\ensure-llvm18.ps1 @args
|
|
}
|
|
|
|
Info "Building nyash (features=llvm, profile=$Profile)"
|
|
$cargoArgs = @('build')
|
|
if ($Profile -eq 'release') { $cargoArgs += '--release' }
|
|
elseif ($Profile -ne 'debug') { Warn "Unknown profile '$Profile', using release"; $cargoArgs += '--release' }
|
|
$cargoArgs += @('--features','llvm')
|
|
if ($Target) { $cargoArgs += @('--target', $Target) }
|
|
& cargo @cargoArgs
|
|
if ($LASTEXITCODE -ne 0) { Err "cargo build failed (llvm). Ensure LLVM_SYS_180/181_PREFIX are set and LLVM 18 is installed." }
|
|
|
|
if ($App) {
|
|
if (-not (Test-Path $App)) { Err "App file not found: $App" }
|
|
Info "Linking EXE via LLVM AOT: $App → $Out"
|
|
& tools\build_llvm.ps1 $App -Out $Out
|
|
if ($LASTEXITCODE -ne 0) { Err "link failed: $Out not produced" }
|
|
Info "OK: built $Out"
|
|
}
|
|
|
|
Info "Done"
|
|
|