use cmake::Config;
use std::env;
use std::fs::create_dir_all;
use std::path::Path;
use std::process;
fn main() {
let out_dir = env::var("OUT_DIR").unwrap();
let ion_c_release_dir = format!("{}/ion-c/build/release", &out_dir);
let ion_c_release_dir = ion_c_release_dir.as_str();
let ion_c_release_path = Path::new(ion_c_release_dir);
println!("ion-c build directory: {}", ion_c_release_dir);
if !ion_c_release_path.is_dir() {
println!("Creating build directory {}", ion_c_release_dir);
if let Err(error) = create_dir_all(ion_c_release_path) {
eprintln!("Could not create build directory: {:?}", error);
process::exit(1);
}
}
Config::new("ion-c")
.define("CMAKE_BUILD_TYPE", "Release")
.out_dir(&ion_c_release_path)
.build();
println!("cargo:rustc-link-search=native={}/build/tools/events", ion_c_release_dir);
println!("cargo:rustc-link-lib=static=ion_events_static");
println!("cargo:rustc-link-search=native={}/build/ionc", ion_c_release_dir);
println!("cargo:rustc-link-lib=static=ionc_static");
println!("cargo:rustc-link-search=native={}/build/decNumber", ion_c_release_dir);
println!("cargo:rustc-link-lib=static=decNumber_static");
let target = env::var("TARGET").unwrap();
if target.contains("apple") {
println!("cargo:rustc-link-lib=dylib=c++");
} else if target.contains("linux") {
println!("cargo:rustc-link-lib=dylib=stdc++");
} else {
unimplemented!(
"Linking C++ is not yet supported on this platform {}",
target
);
}
println!("cargo:rustc-link-search=native={}/build/tools/cli/", ion_c_release_dir);
println!("cargo:rustc-link-lib=static=ion_cli_main");
println!("cargo:rerun-if-changed=./ion-c");
println!("cargo:rerun-if-changed=build.rs");
}