build.rs
1 use std::env; 2 use std::path::PathBuf; 3 use std::process::{Command, Stdio}; 4 5 fn main() { 6 let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); 7 let cargo_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); 8 let root_dir = cargo_dir 9 .parent() 10 .expect("constantine-sys is nested") 11 .parent() 12 .expect("constantine-rust is nested"); 13 14 // Avoid full recompilation 15 println!("cargo:rerun-if-changed=build.rs"); 16 println!("cargo:rerun-if-changed=Cargo.toml"); 17 println!("cargo:rerun-if-changed={}", cargo_dir.join(".cargo").join("config.toml").display()); 18 println!("cargo:rerun-if-changed={}", root_dir.join("Cargo.toml").display()); 19 println!("cargo:rerun-if-changed={}", root_dir.join("constantine").display()); 20 println!("cargo:rerun-if-changed={}", root_dir.join("bindings").display()); 21 println!("cargo:rerun-if-changed={}", root_dir.join("constantine.nimble").display()); 22 23 println!("Building Constantine library ..."); 24 25 Command::new("nimble") 26 .arg("make_lib_rust") 27 .current_dir(root_dir) 28 .stdout(Stdio::inherit()) 29 .stderr(Stdio::inherit()) 30 .status() 31 .expect("failed to execute process"); 32 33 println!("cargo:rustc-link-search=native={}", out_dir.display()); 34 println!("cargo:rustc-link-lib=static=constantine"); 35 36 }