main()1*0d6140beSAndroid Build Coastguard Workerfn 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