use std::{env, error::Error}; use esp_config::generate_config_from_yaml_definition; use jiff::Timestamp; #[macro_export] macro_rules! assert_unique_features { ($($feature:literal),+ $(,)?) => { assert!( (0 $(+ cfg!(feature = $feature) as usize)+ ) <= 1, "Exactly zero or one of the following features must be enabled: {}", [$($feature),+].join(", ") ); }; } fn main() -> Result<(), Box> { println!("cargo::rustc-check-cfg=cfg(embedded_test)"); // Log and defmt are mutually exclusive features. The main technical reason is // that allowing both would make the exact panicking behaviour a fragile // implementation detail. assert_unique_features!("log-04", "defmt"); let build_time = match env::var("SOURCE_DATE_EPOCH") { Ok(val) => Timestamp::from_microsecond(val.parse::()?).unwrap(), Err(_) => Timestamp::now(), }; let build_time_formatted = build_time.strftime("%H:%M:%S"); let build_date_formatted = build_time.strftime("%Y-%m-%d"); println!("cargo::rustc-env=ESP_BOOTLOADER_BUILD_TIME={build_time_formatted}"); println!("cargo::rustc-env=ESP_BOOTLOADER_BUILD_DATE={build_date_formatted}"); // emit config println!("cargo:rerun-if-changed=./esp_config.yml"); let cfg_yaml = std::fs::read_to_string("./esp_config.yml") .expect("Failed to read esp_config.yml for esp-bootloader-esp-idf"); generate_config_from_yaml_definition(&cfg_yaml, true, true, None).unwrap(); Ok(()) }