use std::env;
use std::fs;
use std::path::{Path, PathBuf};
use proxima_build::sizing::{SizingSource, require_nonzero};
#[allow(clippy::expect_used)]
fn emit_sizing_consts(out_dir: &Path) {
let manifest_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR set by cargo");
let source = SizingSource::load(&manifest_dir, "proxima-primitives.toml", "PROXIMA_PIPE")
.unwrap_or_else(|err| panic!("{err}"));
let retry_status_cap = require_nonzero(
"retry.status_cap",
source
.resolve_int("retry", "status_cap")
.unwrap_or_else(|err| panic!("{err}")),
);
let fan_in_source_cap = require_nonzero(
"fan_in.source_cap",
source
.resolve_int("fan_in", "source_cap")
.unwrap_or_else(|err| panic!("{err}")),
);
let retry_out = format!(
"// AUTO-GENERATED by build.rs from proxima-primitives.toml. DO NOT EDIT.\n\
pub const RETRY_STATUS_CAP: usize = {retry_status_cap};\n",
);
let retry_out_path = out_dir.join("proxima_primitives_pipe_sized.rs");
fs::write(&retry_out_path, retry_out)
.unwrap_or_else(|err| panic!("write {}: {err}", retry_out_path.display()));
let fan_in_out = format!(
"// AUTO-GENERATED by build.rs from proxima-primitives.toml. DO NOT EDIT.\n\
pub const FAN_IN_SOURCE_CAP: usize = {fan_in_source_cap};\n",
);
let fan_in_out_path = out_dir.join("proxima_primitives_pipe_fan_in_sized.rs");
fs::write(&fan_in_out_path, fan_in_out)
.unwrap_or_else(|err| panic!("write {}: {err}", fan_in_out_path.display()));
}
#[allow(clippy::expect_used)]
fn main() {
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR set by cargo"));
emit_sizing_consts(&out_dir);
proxima_build::emit_cfg_check_directives();
println!("cargo::rustc-check-cfg=cfg(loom)");
if env::var("PROXIMA_PROFILE").is_ok() {
let resolved = proxima_build::resolve_profile().expect("resolve proxima profile");
proxima_build::emit_cfg_directives(&resolved);
proxima_build::emit_generated_module(&resolved).expect("emit proxima_profile.rs");
proxima_build::emit_rerun_directives(&resolved);
} else if env::var("CARGO_FEATURE_ALLOC").is_ok() {
println!("cargo:rustc-cfg=proxima_alloc");
}
println!("cargo:rerun-if-env-changed=PROXIMA_PROFILE");
}