use std::process::{Command, Stdio};
use std::{env, fs, path::PathBuf};
const OLM_LINK_VARIANT_ENV: &str = "OLM_LINK_VARIANT";
const DOCS_RS: &str = "DOCS_RS";
fn main() {
let manifest_dir = match env::var_os("CARGO_MANIFEST_DIR") {
Some(d) => d,
None => panic!("Unable to read manifest dir"),
};
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
let target = env::var("TARGET").unwrap();
let olm_link_variant = env::var(OLM_LINK_VARIANT_ENV).unwrap_or_else(|_| "static".to_string());
let docs_rs = match env::var(DOCS_RS) {
Ok(x) => x == "1",
_ => false,
};
if !docs_rs {
let (make_target, src_file) = match target.as_ref() {
"wasm32-unknown-unknown" => ("wasm", "build/wasm/libolm.a"),
_ => {
if cfg!(not(target_os = "macos")) {
println!("cargo:rustc-link-lib=stdc++");
}
("static", "build/libolm.a")
}
};
if olm_link_variant == "static" {
let src = PathBuf::from(&manifest_dir).join("olm");
let dst = PathBuf::from(&out_path).join("build");
let _ = fs::create_dir(&dst);
let dst_file = dst.join("libolm.a");
if !dst_file.exists() {
run(Command::new("make").arg(make_target).current_dir(&src));
let _ = fs::copy(&src.join(src_file), &dst_file);
}
println!("cargo:rustc-link-search={}", dst.display());
}
println!("cargo:rerun-if-env-changed={}", OLM_LINK_VARIANT_ENV);
println!("cargo:rustc-link-lib={}=olm", olm_link_variant);
}
}
fn run(cmd: &mut Command) {
assert!(cmd
.stdout(Stdio::inherit())
.stderr(Stdio::inherit())
.status()
.unwrap()
.success());
}