diff options
Diffstat (limited to 'bindings/rust/libflashrom-sys/build.rs')
-rw-r--r-- | bindings/rust/libflashrom-sys/build.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/bindings/rust/libflashrom-sys/build.rs b/bindings/rust/libflashrom-sys/build.rs new file mode 100644 index 000000000..43e7cf6c8 --- /dev/null +++ b/bindings/rust/libflashrom-sys/build.rs @@ -0,0 +1,32 @@ +fn main() { + pkg_config::probe_library("flashrom").unwrap(); + let bindings = bindgen::Builder::default() + .header("../../../include/libflashrom.h") + // Tell cargo to invalidate the built crate whenever any of the + // included header files changed. + .parse_callbacks(Box::new(bindgen::CargoCallbacks)) + // only generate the flashrom functions and used types. + .allowlist_function("flashrom_.*") + // newtype enums provide type checking without the UB potential of rust enums. + .default_enum_style(bindgen::EnumVariation::NewType { is_bitfield: false }) + // We use constified enum for flashrom_log_level to allow '<' comparison. + .constified_enum("flashrom_log_level") + .prepend_enum_name(false) + .derive_copy(false) + .must_use_type("flashrom_wp_result") + // Avoid some va_list related functionality that is not easy to use in rust. + .blocklist_function("flashrom_set_log_callback") + .blocklist_type("flashrom_log_callback") + .blocklist_type("va_list") + .blocklist_type("__builtin_va_list") + .blocklist_type("__va_list_tag") + .size_t_is_usize(true) + .generate() + .expect("Unable to generate bindings"); + + // Write the bindings to the $OUT_DIR/bindings.rs file. + let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap()); + bindings + .write_to_file(out_path.join("bindings.rs")) + .expect("Couldn't write bindings!"); +} |