diff --git a/.gitmodules b/.gitmodules index cf61ca1..01d2c74 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ -[submodule "libmimalloc-sys/c_src/mimalloc"] - path = libmimalloc-sys/c_src/mimalloc +[submodule "libmimalloc-sys/c_src/mimalloc/v2"] + path = libmimalloc-sys/c_src/mimalloc/v2 + url = https://github.com/microsoft/mimalloc +[submodule "libmimalloc-sys/c_src/mimalloc/v3"] + path = libmimalloc-sys/c_src/mimalloc/v3 url = https://github.com/microsoft/mimalloc diff --git a/Cargo.toml b/Cargo.toml index 3e6fd1b..410a949 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,3 +32,4 @@ debug_in_debug = ["libmimalloc-sys/debug_in_debug"] local_dynamic_tls = ["libmimalloc-sys/local_dynamic_tls"] no_thp = ["libmimalloc-sys/no_thp"] extended = ["libmimalloc-sys/extended"] +v3 = ["libmimalloc-sys/v3"] diff --git a/libmimalloc-sys/Cargo.toml b/libmimalloc-sys/Cargo.toml index c42b21c..cb3ff72 100644 --- a/libmimalloc-sys/Cargo.toml +++ b/libmimalloc-sys/Cargo.toml @@ -10,12 +10,18 @@ description = "Sys crate wrapping the mimalloc allocator" license = "MIT" links = "mimalloc" exclude = [ - "/c_src/mimalloc/bin", - "/c_src/mimalloc/cmake", - "/c_src/mimalloc/doc", - "/c_src/mimalloc/docs", - "/c_src/mimalloc/ide", - "/c_src/mimalloc/test", + "/c_src/mimalloc/v2/bin", + "/c_src/mimalloc/v2/cmake", + "/c_src/mimalloc/v2/doc", + "/c_src/mimalloc/v2/docs", + "/c_src/mimalloc/v2/ide", + "/c_src/mimalloc/v2/test", + "/c_src/mimalloc/v3/bin", + "/c_src/mimalloc/v3/cmake", + "/c_src/mimalloc/v3/doc", + "/c_src/mimalloc/v3/docs", + "/c_src/mimalloc/v3/ide", + "/c_src/mimalloc/v3/test", ] [dependencies] @@ -34,6 +40,7 @@ extended = ["cty"] arena = [] local_dynamic_tls = [] no_thp = [] +v3 = [] # Show `extended` on docs.rs since it's the full API surface. [package.metadata.docs.rs] diff --git a/libmimalloc-sys/build.rs b/libmimalloc-sys/build.rs index cd1b76e..e059bfd 100644 --- a/libmimalloc-sys/build.rs +++ b/libmimalloc-sys/build.rs @@ -3,9 +3,15 @@ use std::env; fn main() { let mut build = cc::Build::new(); - build.include("c_src/mimalloc/include"); - build.include("c_src/mimalloc/src"); - build.file("c_src/mimalloc/src/static.c"); + let version = if env::var("CARGO_FEATURE_V3").is_ok() { + "v3" + } else { + "v2" + }; + + build.include(format!("c_src/mimalloc/{version}/include")); + build.include(format!("c_src/mimalloc/{version}/src")); + build.file(format!("c_src/mimalloc/{version}/src/static.c")); let target_os = env::var("CARGO_CFG_TARGET_OS").expect("target_os not defined!"); let target_family = env::var("CARGO_CFG_TARGET_FAMILY").expect("target_family not defined!"); diff --git a/libmimalloc-sys/c_src/mimalloc b/libmimalloc-sys/c_src/mimalloc deleted file mode 160000 index 09a2709..0000000 --- a/libmimalloc-sys/c_src/mimalloc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 09a27098aa6e9286518bd9c74e6ffa7199c3f04e diff --git a/libmimalloc-sys/c_src/mimalloc/v2 b/libmimalloc-sys/c_src/mimalloc/v2 new file mode 160000 index 0000000..fbd8b99 --- /dev/null +++ b/libmimalloc-sys/c_src/mimalloc/v2 @@ -0,0 +1 @@ +Subproject commit fbd8b99c2b828428947d70fdc046bb55609be93e diff --git a/libmimalloc-sys/c_src/mimalloc/v3 b/libmimalloc-sys/c_src/mimalloc/v3 new file mode 160000 index 0000000..dfa50c3 --- /dev/null +++ b/libmimalloc-sys/c_src/mimalloc/v3 @@ -0,0 +1 @@ +Subproject commit dfa50c37d951128b1e77167dd9291081aa88eea4 diff --git a/libmimalloc-sys/sys-test/build.rs b/libmimalloc-sys/sys-test/build.rs index 5aabf83..c3a6a2d 100644 --- a/libmimalloc-sys/sys-test/build.rs +++ b/libmimalloc-sys/sys-test/build.rs @@ -1,9 +1,17 @@ +use std::env; + fn main() { + let cargo_manifest_dir = env!("CARGO_MANIFEST_DIR"); + let version = if env::var("CARGO_FEATURE_V3").is_ok() { + "v3" + } else { + "v2" + }; + let mut cfg = ctest2::TestGenerator::new(); cfg.header("mimalloc.h") - .include(concat!( - env!("CARGO_MANIFEST_DIR"), - "/../c_src/mimalloc/include" + .include(format!( + "{cargo_manifest_dir}/../c_src/mimalloc/{version}/include" )) .cfg("feature", Some("extended")) .fn_cname(|rust, link_name| link_name.unwrap_or(rust).to_string())