| 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/"); | |
| } |