#[cfg(feature = "build")]
pub fn apply_coverage(build: &mut cc::Build) {
if std::env::var_os("CARGO_FEATURE_COVERAGE").is_none() {
return;
}
build
.compiler("clang")
.opt_level(0)
.flag("-fprofile-instr-generate")
.flag("-fcoverage-mapping");
}
#[cfg(feature = "build")]
pub fn configure_arch(build: &mut cc::Build) {
println!("cargo:rerun-if-env-changed=ZEPHYR_BASE");
println!("cargo:rerun-if-env-changed=TARGET_CC");
println!("cargo:rerun-if-env-changed=CC");
println!("cargo:rerun-if-env-changed=BUILD_DIR");
let in_zephyr = std::env::var_os("ZEPHYR_BASE").is_some();
let cc_override = std::env::var_os("TARGET_CC").is_some()
|| std::env::var_os("CC").is_some();
if in_zephyr && !cc_override {
let build_dir = std::env::var("BUILD_DIR").unwrap_or_default();
let cmake_cache = format!("{build_dir}/CMakeCache.txt");
println!("cargo:rerun-if-changed={cmake_cache}");
if let Some(compiler) = std::fs::read_to_string(&cmake_cache).ok().and_then(|s| {
s.lines().find_map(|line| {
let rest = line.strip_prefix("CMAKE_C_COMPILER:")?;
rest.split_once('=').map(|(_, path)| path.to_owned())
})
}) {
build.compiler(compiler);
}
}
if std::env::var("CARGO_CFG_TARGET_ARCH").as_deref() == Ok("riscv64") {
build.flag("-mcmodel=medany");
}
}