build.rs (4109B)
1 extern crate bindgen; 2 3 use std::env; 4 use std::path::Path; 5 use std::path::PathBuf; 6 7 fn main() { 8 let dir = env::var("CARGO_MANIFEST_DIR").unwrap(); 9 println!( 10 "cargo:rustc-link-search={}", 11 Path::new(&dir).join("SDK/Libraries/Win").display() 12 ); 13 println!("cargo:rustc-link-lib=XPLM_64"); 14 println!("cargo:rustc-link-lib=XPWidgets_64"); 15 16 // Tell cargo to invalidate the built crate whenever the wrapper changes 17 println!("cargo:rerun-if-changed=wrapper.h"); 18 19 // The bindgen::Builder is the main entry point 20 // to bindgen, and lets you build up options for 21 // the resulting bindings. 22 let bindings = bindgen::Builder::default() 23 // The input header we would like to generate 24 // bindings for. 25 .header("wrapper.h") 26 //.clang_arg("-v") 27 .clang_arg(format!( 28 "-I{}", 29 Path::new(&dir).join("SDK/CHeaders/XPLM").display() 30 )) 31 .clang_arg(format!( 32 "-I{}", 33 Path::new(&dir).join("SDK/CHeaders/Widgets").display() 34 )) 35 .blacklist_type("LPMONITORINFOEXA?W?") 36 .blacklist_type("LPTOP_LEVEL_EXCEPTION_FILTER") 37 .blacklist_type("MONITORINFOEXA?W?") 38 .blacklist_type("PEXCEPTION_FILTER") 39 .blacklist_type("PEXCEPTION_ROUTINE") 40 .blacklist_type("PSLIST_HEADER") 41 .blacklist_type("PTOP_LEVEL_EXCEPTION_FILTER") 42 .blacklist_type("PVECTORED_EXCEPTION_HANDLER") 43 .blacklist_type("_?L?P?CONTEXT") 44 .blacklist_type("_?L?P?EXCEPTION_POINTERS") 45 .blacklist_type("_?P?DISPATCHER_CONTEXT") 46 .blacklist_type("_?P?EXCEPTION_REGISTRATION_RECORD") 47 .blacklist_type("_?P?IMAGE_TLS_DIRECTORY.*") 48 .blacklist_type("_?P?NT_TIB") 49 .blacklist_type("tagMONITORINFOEXA") 50 .blacklist_type("tagMONITORINFOEXW") 51 .blacklist_function("AddVectoredContinueHandler") 52 .blacklist_function("AddVectoredExceptionHandler") 53 .blacklist_function("CopyContext") 54 .blacklist_function("GetThreadContext") 55 .blacklist_function("GetXStateFeaturesMask") 56 .blacklist_function("InitializeContext") 57 .blacklist_function("InitializeContext2") 58 .blacklist_function("InitializeSListHead") 59 .blacklist_function("InterlockedFlushSList") 60 .blacklist_function("InterlockedPopEntrySList") 61 .blacklist_function("InterlockedPushEntrySList") 62 .blacklist_function("InterlockedPushListSListEx") 63 .blacklist_function("LocateXStateFeature") 64 .blacklist_function("QueryDepthSList") 65 .blacklist_function("RaiseFailFastException") 66 .blacklist_function("RtlCaptureContext") 67 .blacklist_function("RtlCaptureContext2") 68 .blacklist_function("RtlFirstEntrySList") 69 .blacklist_function("RtlInitializeSListHead") 70 .blacklist_function("RtlInterlockedFlushSList") 71 .blacklist_function("RtlInterlockedPopEntrySList") 72 .blacklist_function("RtlInterlockedPushEntrySList") 73 .blacklist_function("RtlInterlockedPushListSListEx") 74 .blacklist_function("RtlQueryDepthSList") 75 .blacklist_function("RtlRestoreContext") 76 .blacklist_function("RtlUnwindEx") 77 .blacklist_function("RtlVirtualUnwind") 78 .blacklist_function("SetThreadContext") 79 .blacklist_function("SetUnhandledExceptionFilter") 80 .blacklist_function("SetXStateFeaturesMask") 81 .blacklist_function("UnhandledExceptionFilter") 82 .blacklist_function("__C_specific_handler") 83 // Tell cargo to invalidate the built crate whenever any of the 84 // included header files changed. 85 .parse_callbacks(Box::new(bindgen::CargoCallbacks)) 86 // Finish the builder and generate the bindings. 87 .generate() 88 // Unwrap the Result and panic on failure. 89 .expect("Unable to generate bindings"); 90 91 // Write the bindings to the $OUT_DIR/bindings.rs file. 92 let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); 93 bindings 94 .write_to_file(out_path.join("bindings.rs")) 95 .expect("Couldn't write bindings!"); 96 }