use std::{env, path::PathBuf, process::Command};
fn main() {
let target = env::var("TARGET").unwrap_or_else(|_| "wasm32-wasip1".to_string());
if !target.starts_with("wasm32") {
println!("cargo:rerun-if-changed=stubs/heap_base.rs");
return;
}
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
println!("cargo:rerun-if-env-changed=TARGET");
println!("cargo:rerun-if-env-changed=RUSTUP_TOOLCHAIN");
println!("cargo:rerun-if-env-changed=RUSTFLAGS");
println!("cargo:rerun-if-changed={}", manifest_dir.join("stubs/heap_base.rs").display());
let out_rlib = out_dir.join("libmiden_alloc_intrinsics.a");
let status = Command::new("rustc")
.arg("--crate-name")
.arg("miden_alloc_heap_base_stub")
.arg("--edition=2021")
.arg("--crate-type=rlib")
.arg("--target")
.arg(&target)
.arg("-C")
.arg("opt-level=1")
.arg("-C")
.arg("panic=abort")
.arg("-C")
.arg("codegen-units=1")
.arg("-C")
.arg("debuginfo=0")
.arg("-Z")
.arg("merge-functions=disabled")
.arg("-C")
.arg("target-feature=+bulk-memory,+wide-arithmetic")
.arg("-o")
.arg(&out_rlib)
.arg(manifest_dir.join("stubs/heap_base.rs"))
.status()
.expect("failed to spawn rustc for heap_base stub object");
if !status.success() {
panic!("failed to compile heap_base stub object: {status}");
}
println!("cargo:rustc-link-search=native={}", out_dir.display());
println!("cargo:rustc-link-lib=static=miden_alloc_intrinsics");
}