Dániel Buga 692a768b3a
Introduce esp-metadata-generated (#3754)
* Move macros to new crate

* Generate a single file

* Pre-generate esp-metadata-generated

* Move saving code to xtask

* Format with both rustfmt and prettyplease

* Fix doc build

* Unhide macros

* Fix doc string

* Update semver-check baseline
2025-07-07 15:37:05 +00:00

44 lines
1.5 KiB
Rust

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<dyn Error>> {
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::<i64>()?).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(())
}