diff --git a/Cargo.toml b/Cargo.toml index 52ea398..ff2e8be 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,3 +11,6 @@ documentation = "https://docs.rs/ash-molten" [dependencies] ash = "0.29" + +[features] +external = [] diff --git a/build.rs b/build.rs index 1acc132..f10935c 100644 --- a/build.rs +++ b/build.rs @@ -1,7 +1,27 @@ use std::path::PathBuf; +// 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() +} fn main() { - let project_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()).join("external"); - println!("cargo:rustc-link-search=native={}", project_dir.display()); + // The 'external' feature was not enabled. Molten will be built automaticaly. + if !is_external_enabled() { + 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"); + println!("cargo:rustc-link-search=native={}", project_dir.display()); + } println!("cargo:rustc-link-lib=framework=Metal"); println!("cargo:rustc-link-lib=framework=AppKit"); println!("cargo:rustc-link-lib=framework=QuartzCore"); diff --git a/build_molten.sh b/build_molten.sh index 37ae37d..7537973 100644 --- a/build_molten.sh +++ b/build_molten.sh @@ -2,4 +2,4 @@ git submodule update --init cd MoltenVK sh fetchDependencies make macos -cp Package/Release/MoltenVK/macOS/static/libMoltenVK.a ../external +cp Package/Release/MoltenVK/macOS/static/libMoltenVK.a ../native diff --git a/external/libMoltenVK.a b/external/libMoltenVK.a deleted file mode 100644 index efb23d2..0000000 Binary files a/external/libMoltenVK.a and /dev/null differ