xref: /aosp_15_r20/external/flashrom/bindings/rust/libflashrom-sys/build.rs (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)

main()1*0d6140beSAndroid Build Coastguard Worker fn main() {
2*0d6140beSAndroid Build Coastguard Worker     pkg_config::probe_library("flashrom").unwrap();
3*0d6140beSAndroid Build Coastguard Worker     let bindings = bindgen::Builder::default()
4*0d6140beSAndroid Build Coastguard Worker         .header("../../../include/libflashrom.h")
5*0d6140beSAndroid Build Coastguard Worker         // Tell cargo to invalidate the built crate whenever any of the
6*0d6140beSAndroid Build Coastguard Worker         // included header files changed.
7*0d6140beSAndroid Build Coastguard Worker         .parse_callbacks(Box::new(bindgen::CargoCallbacks))
8*0d6140beSAndroid Build Coastguard Worker         // only generate the flashrom functions and used types.
9*0d6140beSAndroid Build Coastguard Worker         .allowlist_function("flashrom_.*")
10*0d6140beSAndroid Build Coastguard Worker         // newtype enums provide type checking without the UB potential of rust enums.
11*0d6140beSAndroid Build Coastguard Worker         .default_enum_style(bindgen::EnumVariation::NewType { is_bitfield: false })
12*0d6140beSAndroid Build Coastguard Worker         // We use constified enum for flashrom_log_level to allow '<' comparison.
13*0d6140beSAndroid Build Coastguard Worker         .constified_enum("flashrom_log_level")
14*0d6140beSAndroid Build Coastguard Worker         .prepend_enum_name(false)
15*0d6140beSAndroid Build Coastguard Worker         .derive_copy(false)
16*0d6140beSAndroid Build Coastguard Worker         .must_use_type("flashrom_wp_result")
17*0d6140beSAndroid Build Coastguard Worker         // Avoid some va_list related functionality that is not easy to use in rust.
18*0d6140beSAndroid Build Coastguard Worker         .blocklist_function("flashrom_set_log_callback")
19*0d6140beSAndroid Build Coastguard Worker         .blocklist_type("flashrom_log_callback")
20*0d6140beSAndroid Build Coastguard Worker         .blocklist_type("va_list")
21*0d6140beSAndroid Build Coastguard Worker         .blocklist_type("__builtin_va_list")
22*0d6140beSAndroid Build Coastguard Worker         .blocklist_type("__va_list_tag")
23*0d6140beSAndroid Build Coastguard Worker         .size_t_is_usize(true)
24*0d6140beSAndroid Build Coastguard Worker         .generate()
25*0d6140beSAndroid Build Coastguard Worker         .expect("Unable to generate bindings");
26*0d6140beSAndroid Build Coastguard Worker 
27*0d6140beSAndroid Build Coastguard Worker     // Write the bindings to the $OUT_DIR/bindings.rs file.
28*0d6140beSAndroid Build Coastguard Worker     let out_path = std::path::PathBuf::from(std::env::var("OUT_DIR").unwrap());
29*0d6140beSAndroid Build Coastguard Worker     bindings
30*0d6140beSAndroid Build Coastguard Worker         .write_to_file(out_path.join("bindings.rs"))
31*0d6140beSAndroid Build Coastguard Worker         .expect("Couldn't write bindings!");
32*0d6140beSAndroid Build Coastguard Worker }
33