diff options
Diffstat (limited to 'third_party/rust/lmdb-rkv-sys/build.rs')
-rw-r--r-- | third_party/rust/lmdb-rkv-sys/build.rs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/third_party/rust/lmdb-rkv-sys/build.rs b/third_party/rust/lmdb-rkv-sys/build.rs new file mode 100644 index 0000000000..213e3cc90a --- /dev/null +++ b/third_party/rust/lmdb-rkv-sys/build.rs @@ -0,0 +1,86 @@ +extern crate cc; +extern crate pkg_config; + +#[cfg(feature = "bindgen")] +extern crate bindgen; + +#[cfg(feature = "bindgen")] +#[path = "bindgen.rs"] +mod generate; + +use std::env; +use std::path::PathBuf; + +#[cfg(feature = "mdb_idl_logn_8")] +const MDB_IDL_LOGN: u8 = 8; +#[cfg(feature = "mdb_idl_logn_9")] +const MDB_IDL_LOGN: u8 = 9; +#[cfg(feature = "mdb_idl_logn_10")] +const MDB_IDL_LOGN: u8 = 10; +#[cfg(feature = "mdb_idl_logn_11")] +const MDB_IDL_LOGN: u8 = 11; +#[cfg(feature = "mdb_idl_logn_12")] +const MDB_IDL_LOGN: u8 = 12; +#[cfg(feature = "mdb_idl_logn_13")] +const MDB_IDL_LOGN: u8 = 13; +#[cfg(feature = "mdb_idl_logn_14")] +const MDB_IDL_LOGN: u8 = 14; +#[cfg(feature = "mdb_idl_logn_15")] +const MDB_IDL_LOGN: u8 = 15; +#[cfg(not(any( + feature = "mdb_idl_logn_8", + feature = "mdb_idl_logn_9", + feature = "mdb_idl_logn_10", + feature = "mdb_idl_logn_11", + feature = "mdb_idl_logn_12", + feature = "mdb_idl_logn_13", + feature = "mdb_idl_logn_14", + feature = "mdb_idl_logn_15", +)))] +const MDB_IDL_LOGN: u8 = 16; + +macro_rules! warn { + ($message:expr) => { + println!("cargo:warning={}", $message); + }; +} + +fn main() { + #[cfg(feature = "bindgen")] + generate::generate(); + + let mut lmdb = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap()); + lmdb.push("lmdb"); + lmdb.push("libraries"); + lmdb.push("liblmdb"); + + if cfg!(feature = "with-fuzzer") && cfg!(feature = "with-fuzzer-no-link") { + warn!("Features `with-fuzzer` and `with-fuzzer-no-link` are mutually exclusive."); + warn!("Building with `-fsanitize=fuzzer`."); + } + + if !pkg_config::find_library("liblmdb").is_ok() { + let mut builder = cc::Build::new(); + + builder + .define("MDB_IDL_LOGN", Some(MDB_IDL_LOGN.to_string().as_str())) + .file(lmdb.join("mdb.c")) + .file(lmdb.join("midl.c")) + // https://github.com/mozilla/lmdb/blob/b7df2cac50fb41e8bd16aab4cc5fd167be9e032a/libraries/liblmdb/Makefile#L23 + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wbad-function-cast") + .flag_if_supported("-Wuninitialized"); + + if env::var("CARGO_FEATURE_WITH_ASAN").is_ok() { + builder.flag("-fsanitize=address"); + } + + if env::var("CARGO_FEATURE_WITH_FUZZER").is_ok() { + builder.flag("-fsanitize=fuzzer"); + } else if env::var("CARGO_FEATURE_WITH_FUZZER_NO_LINK").is_ok() { + builder.flag("-fsanitize=fuzzer-no-link"); + } + + builder.compile("liblmdb.a") + } +} |