use std::{error::Error, str::FromStr}; use esp_build::assert_unique_used_features; use esp_metadata::{Chip, Config}; fn main() -> Result<(), Box> { // NOTE: update when adding new device support! // Ensure that exactly one chip has been specified: assert_unique_used_features!( "esp32", "esp32c2", "esp32c3", "esp32c6", "esp32h2", "esp32s2", "esp32s3" ); // If the `embassy` feature is enabled, ensure that a time driver implementation // is available: cfg_if::cfg_if! { if #[cfg(feature = "esp32")] { assert_unique_used_features!("time-timg0"); } else if #[cfg(feature = "esp32s2")] { assert_unique_used_features!("time-systimer-80mhz", "time-timg0"); } else { assert_unique_used_features!("time-systimer-16mhz", "time-timg0"); } } // NOTE: update when adding new device support! // Determine the name of the configured device: let device_name = if cfg!(feature = "esp32") { "esp32" } else if cfg!(feature = "esp32c2") { "esp32c2" } else if cfg!(feature = "esp32c3") { "esp32c3" } else if cfg!(feature = "esp32c6") { "esp32c6" } else if cfg!(feature = "esp32h2") { "esp32h2" } else if cfg!(feature = "esp32s2") { "esp32s2" } else if cfg!(feature = "esp32s3") { "esp32s3" } else { unreachable!() // We've confirmed exactly one known device was selected }; // Load the configuration file for the configured device: let chip = Chip::from_str(device_name)?; let config = Config::for_chip(&chip); // Define all necessary configuration symbols for the configured device: config.define_symbols(); Ok(()) }