summaryrefslogtreecommitdiffstats
path: root/third_party/rust/lmdb-rkv-sys/build.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/lmdb-rkv-sys/build.rs')
-rw-r--r--third_party/rust/lmdb-rkv-sys/build.rs86
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")
+ }
+}