blob: 02a2f1a14e34112f01d2dc83c6443b5edaf63ff9 [file]
fn main() {
let mut config = cmake::Config::new("../../");
config
.define("BENCHMARK_ENABLE_TESTING", "OFF")
.define("BENCHMARK_ENABLE_LTO", "OFF")
.define("BENCHMARK_ENABLE_WERROR", "OFF")
.build_target("benchmark");
// Rust defaults to the Release CRT (/MD) on Windows even in Debug mode.
// Force CMake to use the Release profile so `google/benchmark` uses `/MD`,
// avoiding a mismatch with `cxx_build` (which uses `/MD`).
if cfg!(target_os = "windows") {
config.profile("Release");
}
let dst = config.build();
println!("cargo:rustc-link-search=native={}/build/src", dst.display());
println!("cargo:rustc-link-search=native={}/build/src/Debug", dst.display());
println!("cargo:rustc-link-search=native={}/build/src/Release", dst.display());
println!("cargo:rustc-link-lib=static=benchmark");
cxx_build::bridge("src/ffi.rs")
.file("src/rust_api.cc")
.include("../../include")
.include("src")
.std("c++17")
.define("BENCHMARK_STATIC_DEFINE", None)
.compile("benchmark_rust_ffi");
if cfg!(target_os = "windows") {
println!("cargo:rustc-link-lib=shlwapi");
}
println!("cargo:rerun-if-changed=src/ffi.rs");
println!("cargo:rerun-if-changed=src/rust_api.cc");
println!("cargo:rerun-if-changed=src/rust_api.h");
println!("cargo:rerun-if-changed=../../src/");
println!("cargo:rerun-if-changed=../../include/");
}