Files
hakorune/src/runner/modes/aot.rs

37 lines
1.5 KiB
Rust
Raw Normal View History

use super::super::NyashRunner;
#[cfg(feature = "cranelift-jit")]
use std::{process::Command, process};
impl NyashRunner {
/// Execute AOT compilation mode (split)
#[cfg(feature = "cranelift-jit")]
pub(crate) fn execute_aot_mode(&self, filename: &str) {
let output = self.config.output_file.as_deref().unwrap_or("app");
// Prefer using provided helper scripts to ensure link flags and runtime integration
let status = if cfg!(target_os = "windows") {
// Use PowerShell helper; falls back to bash if available inside the script
Command::new("powershell")
.args(["-ExecutionPolicy","Bypass","-File","tools/build_aot.ps1","-Input", filename, "-Out", &format!("{}.exe", output)])
.status()
} else {
Command::new("bash")
.args(["tools/build_aot.sh", filename, "-o", output])
.status()
};
match status {
Ok(s) if s.success() => {
println!("✅ AOT compilation successful!\nExecutable written to: {}", output);
}
Ok(s) => {
eprintln!("❌ AOT compilation failed (exit={} ). See logs above.", s.code().unwrap_or(-1));
process::exit(1);
}
Err(e) => {
eprintln!("❌ Failed to invoke build_aot.sh: {}", e);
eprintln!("Hint: ensure bash is available, or run: bash tools/build_aot.sh {} -o {}", filename, output);
process::exit(1);
}
}
}
}