summaryrefslogtreecommitdiffhomepage
path: root/src/wasm-wasi-component/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-wasi-component/build.rs')
-rw-r--r--src/wasm-wasi-component/build.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/wasm-wasi-component/build.rs b/src/wasm-wasi-component/build.rs
new file mode 100644
index 00000000..5ea74f17
--- /dev/null
+++ b/src/wasm-wasi-component/build.rs
@@ -0,0 +1,33 @@
+use std::env;
+use std::path::PathBuf;
+
+fn main() {
+ // Tell cargo to invalidate the built crate whenever the wrapper changes
+ println!("cargo:rerun-if-changed=wrapper.h");
+
+ let bindings = bindgen::Builder::default()
+ .clang_args(["-I", "../"])
+ .clang_args(["-I", "../../build/include"])
+ .header("./wrapper.h")
+ // only generate bindings for `nxt_*` header files
+ .allowlist_file(".*nxt_.*.h")
+ // generates an "improper_ctypes" warning and we don't need it anyway
+ .blocklist_function("nxt_vsprintf")
+ // Tell cargo to invalidate the built crate whenever any of the
+ // included header files changed.
+ .parse_callbacks(Box::new(bindgen::CargoCallbacks))
+ // disable some features which aren't necessary
+ .layout_tests(false)
+ .derive_debug(false)
+ .generate()
+ .expect("Unable to generate bindings");
+
+ cc::Build::new()
+ .object("../../build/src/nxt_unit.o")
+ .compile("nxt-unit");
+
+ let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
+ bindings
+ .write_to_file(out_path.join("bindings.rs"))
+ .expect("Couldn't write bindings!");
+}