57 lines
2.0 KiB
Rust
57 lines
2.0 KiB
Rust
extern crate cc;
|
|
use glob::glob;
|
|
|
|
fn main() {
|
|
let out_dir = std::env::var("OUT_DIR").unwrap();
|
|
|
|
println!("cargo:rerun-if-changed=build.rs");
|
|
println!("cargo:rustc-link-search={}", out_dir);
|
|
cc::Build::new()
|
|
.files(
|
|
glob("./vendor/mruby-compiler2/src/**/*.c")
|
|
.expect("cannot find c source")
|
|
.map(|x| x.unwrap()),
|
|
)
|
|
.files(
|
|
glob("./vendor/mruby-compiler2/lib/prism/src/**/*.c")
|
|
.expect("cannot find c source")
|
|
.map(|x| x.unwrap()),
|
|
)
|
|
.warnings(false)
|
|
.define("MRB_NO_PRESYM", "")
|
|
.define("MRB_INT64", "1")
|
|
.define("PRISM_XALLOCATOR", "")
|
|
.define("PRISM_BUILD_MINIMAL", "")
|
|
.define("PICORB_VM_MRUBYC", "")
|
|
.define("MRBC_ALLOC_LIBC", "")
|
|
.include("./vendor/include")
|
|
.include("./vendor/mruby-compiler2/include")
|
|
.include("./vendor/mruby-compiler2/lib/prism/include")
|
|
// .flag("-fPIC")
|
|
.flag("-c")
|
|
.compile("mrubycompiler2");
|
|
|
|
println!("cargo:rustc-link-lib=mrubycompiler2");
|
|
let target_arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
|
|
let mut builder = bindgen::Builder::default()
|
|
.header("./vendor/mruby-compiler2/include/mruby_compiler.h")
|
|
.header("./vendor/mruby-compiler2/include/mrc_codedump.h")
|
|
.clang_arg("-I./vendor/mruby-compiler2/include")
|
|
.clang_arg("-I./vendor/mruby-compiler2/lib/prism/include")
|
|
.blocklist_item("FP_NAN")
|
|
.blocklist_item("FP_INFINITE")
|
|
.blocklist_item("FP_ZERO")
|
|
.blocklist_item("FP_SUBNORMAL")
|
|
.blocklist_item("FP_NORMAL")
|
|
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()));
|
|
if target_arch == "wasm32" {
|
|
builder = builder.blocklist_type("max_align_t");
|
|
}
|
|
let bindings = builder.generate().expect("Unable to generate bindings");
|
|
|
|
let out = std::path::PathBuf::from(out_dir).join("bindings.rs");
|
|
bindings
|
|
.write_to_file(out)
|
|
.expect("Couldn't write bindings!");
|
|
}
|