diff --git a/Cargo.toml b/Cargo.toml index 9468707..7a9237d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,8 +8,12 @@ edition = "2018" license = "MIT" build = "build.rs" +[features] +default = ["autotools"] + [dependencies] libc = "0.2" [build-dependencies] -autotools = "0.2" +autotools = {version = "0.2", optional = true} +cmake = {version = "0.1", optional = true} diff --git a/README.md b/README.md index 967e656..5e1ee26 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,13 @@ This crate is for use cases in which developers need to integrate [`bdwgc`][bdwg See [`examples`](examples) directory. +By default [`bdwgc`][bdwgc] is built with autotools. To build with cmake enable the `cmake` feature in `Cargo.toml`: + + [dependencies.bdwgc-alloc] + version = "0.4" + default-features = false + features = ["cmake"] + ## License [MIT](LICENSE) diff --git a/build.rs b/build.rs index a475b65..2cbf54e 100644 --- a/build.rs +++ b/build.rs @@ -1,6 +1,7 @@ const LIB_ATOMIC_OPS_DIR: &str = "vendor/libatomic_ops"; const LIB_GC_DIR: &str = "vendor/bdwgc"; +#[cfg(feature = "autotools")] fn main() { for dir in &[LIB_ATOMIC_OPS_DIR, LIB_GC_DIR] { std::process::Command::new("sh") @@ -41,3 +42,29 @@ fn main() { .unwrap(); } } + +#[cfg(feature = "cmake")] +fn main() { + use cmake::Config; + use std::path::Path; + + let libatomic_include_path = Path::new(LIB_ATOMIC_OPS_DIR) + .join("src") + .canonicalize() + .unwrap() + .display() + .to_string() + .replace(r"\\?\", ""); + + let dst = Config::new(LIB_GC_DIR) + .profile("Release") + .define("BUILD_SHARED_LIBS", "FALSE") + .cflag(format!("-I{}", libatomic_include_path)) + .build(); + + println!( + "cargo:rustc-link-search=native={}", + dst.join("lib").display() + ); + println!("cargo:rustc-link-lib=static=gc"); +} diff --git a/vendor/bdwgc b/vendor/bdwgc index 2b70037..a20818b 160000 --- a/vendor/bdwgc +++ b/vendor/bdwgc @@ -1 +1 @@ -Subproject commit 2b7003769e1ecc941ef80b603cba16a121f37997 +Subproject commit a20818be9ec660588af325d82e515ebb75bd9905 diff --git a/vendor/libatomic_ops b/vendor/libatomic_ops index 6287479..ae996e9 160000 --- a/vendor/libatomic_ops +++ b/vendor/libatomic_ops @@ -1 +1 @@ -Subproject commit 6287479564021893f2bf81149d0738bcb492b81c +Subproject commit ae996e93f0ddfb8e2a93d49c6d7edc1478ad60c1