Files
anisette-js/build.rs
2026-02-26 17:04:29 +08:00

63 lines
1.8 KiB
Rust

use std::env;
use std::path::PathBuf;
fn main() {
println!("cargo:rerun-if-env-changed=UNICORN_DIR");
println!("cargo:rerun-if-env-changed=UNICORN_BUILD_DIR");
println!("cargo:rerun-if-env-changed=UNICORN_INCLUDE_DIR");
let target = env::var("TARGET").unwrap_or_default();
if target != "wasm32-unknown-emscripten" {
return;
}
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap_or_default());
let unicorn_dir = env::var("UNICORN_DIR")
.map(PathBuf::from)
.unwrap_or_else(|_| manifest_dir.join("../unicorn"));
let unicorn_build_dir = env::var("UNICORN_BUILD_DIR")
.map(PathBuf::from)
.unwrap_or_else(|_| unicorn_dir.join("build"));
let unicorn_include_dir = env::var("UNICORN_INCLUDE_DIR")
.map(PathBuf::from)
.unwrap_or_else(|_| unicorn_dir.join("include"));
let required_libs = [
"libunicorn.a",
"libunicorn-common.a",
"libaarch64-softmmu.a",
"libarm-softmmu.a",
];
for lib in required_libs {
let path = unicorn_build_dir.join(lib);
if !path.exists() {
panic!(
"missing unicorn static library: {}. run `bash test/rebuild-unicorn.sh` first",
path.display()
);
}
}
println!("cargo:rustc-link-arg=--no-entry");
println!("cargo:rustc-link-arg=-sSTANDALONE_WASM=1");
println!(
"cargo:rustc-link-search=native={}",
unicorn_build_dir.display()
);
if !unicorn_include_dir.exists() {
println!(
"cargo:warning=unicorn include dir not found at {}",
unicorn_include_dir.display()
);
}
for lib in [
"unicorn",
"unicorn-common",
"aarch64-softmmu",
"arm-softmmu",
] {
println!("cargo:rustc-link-lib=static={lib}");
}
}