use std::env::{self, VarError};
use std::path::PathBuf;
fn main() -> Result<(), VarError> {
if !cfg!(feature = "no_link") {
link(is_env_present("TEEC_STATIC")?);
}
Ok(())
}
fn is_env_present(var: &str) -> Result<bool, VarError> {
println!("cargo:rerun-if-env-changed={var}");
match env::var(var) {
Err(VarError::NotPresent) => Ok(false),
Ok(_) => Ok(true),
Err(err) => Err(err),
}
}
fn link(static_linkage: bool) {
const ENV_OPTEE_CLIENT_EXPORT: &str = "OPTEE_CLIENT_EXPORT";
println!("cargo:rerun-if-env-changed={}", ENV_OPTEE_CLIENT_EXPORT);
let optee_client_dir =
env::var(ENV_OPTEE_CLIENT_EXPORT).expect("OPTEE_CLIENT_EXPORT is not set");
let library_path = PathBuf::from(optee_client_dir).join("usr/lib");
if !library_path.exists() {
panic!(
"OPTEE_CLIENT_EXPORT usr/lib path {} does not exist",
library_path.display()
);
}
println!("cargo:rustc-link-search={}", library_path.display());
println!(
"cargo:rustc-link-lib={}=teec",
if static_linkage { "static" } else { "dylib" }
);
}