extern crate alloc;
include!("src/render/ltc/size.rs");
include!("src/render/ltc/fit.rs");
fn main() {
emit_backend_cfg();
generate_ltc_tables();
}
fn emit_backend_cfg() {
println!("cargo::rustc-check-cfg=cfg(backend_metal)");
println!("cargo::rustc-check-cfg=cfg(backend_dx)");
println!("cargo::rustc-check-cfg=cfg(backend_vk)");
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
let vulkan = std::env::var("CARGO_FEATURE_VULKAN").is_ok();
let backend = match (target_os.as_str(), vulkan) {
("macos", false) => "backend_metal",
("windows", false) => "backend_dx",
_ => "backend_vk",
};
println!("cargo::rustc-cfg={backend}");
}
fn write_f32s(path: std::path::PathBuf, values: impl Iterator<Item = f32>) {
let mut bytes = Vec::new();
for v in values {
bytes.extend_from_slice(&v.to_le_bytes());
}
std::fs::write(path, bytes).expect("failed to write the generated LTC table");
}
fn generate_ltc_tables() {
println!("cargo::rerun-if-changed=src/render/ltc/fit.rs");
println!("cargo::rerun-if-changed=src/render/ltc/size.rs");
let (matrix, magnitude) = fit_table(LTC_LUT_SIZE);
let dir = std::path::PathBuf::from(
std::env::var("OUT_DIR").expect("OUT_DIR is set for build scripts"),
);
write_f32s(dir.join("ltc_matrix.bin"), matrix.into_iter().flatten());
write_f32s(
dir.join("ltc_magnitude.bin"),
magnitude.into_iter().flatten(),
);
}