ash-molten/build.rs

40 lines
1.5 KiB
Rust
Raw Normal View History

2019-06-05 18:22:29 +10:00
use std::path::PathBuf;
2019-06-17 19:22:17 +10:00
// Features are not used inside build scripts, so we have to explicitly query them from the
// enviroment
fn is_external_enabled() -> bool {
std::env::vars()
.filter_map(|(flag, _)| {
const NAME: &'static str = "CARGO_FEATURE_";
if flag.starts_with(NAME) {
let feature = flag.split(NAME).nth(1).expect("").to_string();
println!("{:?}", feature);
return Some(feature);
}
None
})
.find(|f| f == "EXTERNAL")
.is_some()
}
2019-06-05 18:22:29 +10:00
fn main() {
2019-06-21 18:24:23 +10:00
if !(cfg!(target_os = "macos") || cfg!(target_os = "ios")) {
2019-06-21 18:13:17 +10:00
panic!("ash-molten can only be built on macOS or of iOS");
}
2019-06-17 19:22:17 +10:00
// The 'external' feature was not enabled. Molten will be built automaticaly.
if !is_external_enabled() {
2019-06-21 18:13:17 +10:00
std::process::Command::new("bash")
.arg("build_molten.sh")
.status()
.expect("Unable to build molten");
let project_dir =
PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()).join("native");
2019-06-17 19:22:17 +10:00
println!("cargo:rustc-link-search=native={}", project_dir.display());
}
2019-06-05 18:22:29 +10:00
println!("cargo:rustc-link-lib=framework=Metal");
println!("cargo:rustc-link-lib=framework=AppKit");
println!("cargo:rustc-link-lib=framework=QuartzCore");
println!("cargo:rustc-link-lib=framework=IOKit");
println!("cargo:rustc-link-lib=framework=IOSurface");
println!("cargo:rustc-link-lib=dylib=c++");
println!("cargo:rustc-link-lib=static=MoltenVK");
}