use std::env;
fn main() {
let target = env::var("TARGET").expect("TARGET was not set");
let secure = env::var_os("CARGO_FEATURE_SECURE").is_some();
let check_full = env::var_os("CARGO_FEATURE_CHECK_FULL").is_some();
let stats = env::var_os("CARGO_FEATURE_STATS").is_some();
let override_ = env::var_os("CARGO_FEATURE_OVERRIDE").is_some();
let verbose = env::var_os("CARGO_FEATURE_VERBOSE").is_some();
let warnings = env::var_os("MIMALLOC_SYS_ENABLE_WARNINGS").is_some();
let profile = env::var("PROFILE").unwrap_or(String::new());
let mut build = cc::Build::new();
let compiler = build.get_compiler();
let clang = compiler.is_like_clang();
let gnu = compiler.is_like_gnu();
build
.file("mimalloc/src/static.c")
.include("mimalloc/include")
.include("mimalloc/src")
.define("MI_STATIC_LIB", None)
.warnings(warnings);
build.flag(if gnu || clang {
"-std=gnu11"
} else {
"/std:c++11"
});
if clang || gnu {
[
"-Wall",
"-Wextra",
"-Wno-unknown-pragmas",
"-ftls-model=initial-exec",
]
.iter()
.for_each(|f| {
build.flag(f);
});
if gnu {
["-Wno-invalid-memory-model" ]
.iter()
.for_each(|f| {
build.flag(f);
});
}
}
if override_ {
build.define("MI_MALLOC_OVERRIDE", None);
if target.contains("apple") {
build.define("MI_INTERPOSE", None);
}
}
if check_full || profile == "debug" {
build.define("MI_DEBUG", "3");
}
if secure || profile == "debug" {
build.define("MI_SECURE", "2");
}
if !verbose {
build.define("MI_VERBOSE", "0");
}
if profile == "release" {
build.define("NDEBUG", None);
build.flag_if_supported("-O3");
build.flag_if_supported("-fstrict-aliasing");
build.flag_if_supported("-g0");
}
if profile == "debug" {
build.flag_if_supported("-fstack-protector-all");
build.flag_if_supported("-fno-strict-aliasing");
}
if stats {
build.define("MI_STAT", "2");
} else {
build.define("MI_STAT", "0");
}
build.compile("mimalloc");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=mimalloc");
println!("cargo:rerun-if-changed=src");
println!("cargo:rerun-if-env-changed=CC");
println!("cargo:root={}", env::var("OUT_DIR").unwrap());
}