63 lines
1.8 KiB
Rust
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}");
|
|
}
|
|
}
|