init
This commit is contained in:
62
build.rs
Normal file
62
build.rs
Normal file
@@ -0,0 +1,62 @@
|
||||
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}");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user