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  }