From da37f6aa8ab1f9a8502d6c550f8915e1f237fff1 Mon Sep 17 00:00:00 2001 From: Stephen Waits Date: Thu, 26 Mar 2026 18:00:13 -0600 Subject: [PATCH] fix: resolve ESP32-S3 linker errors, all boards produce firmware Three fixes: - Add .cargo/config.toml with -Tlinkall.x for xtensa target (resolves ROM functions, interrupt handlers, memory layout) - Add integrated-timers feature to embassy-executor for ESP32 boards (resolves _embassy_time_schedule_wake) - Add `use esp_println as _` to pull in defmt global_logger (was being stripped as dead code because nothing referenced the crate) Co-Authored-By: Claude Opus 4.6 (1M context) --- .cargo/config.toml | 6 ++++++ Cargo.lock | 2 ++ Cargo.toml | 2 ++ src/main.rs | 1 + 4 files changed, 11 insertions(+) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..850366b5 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,6 @@ +[target.xtensa-esp32s3-none-elf] +rustflags = [ + "-C", "link-arg=-nostartfiles", + "-C", "link-arg=-Tlinkall.x", + "-C", "link-arg=-Tdefmt.x", +] diff --git a/Cargo.lock b/Cargo.lock index ec93f9d9..f59c611c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -359,6 +359,8 @@ dependencies = [ "critical-section", "document-features", "embassy-executor-macros", + "embassy-time-driver", + "embassy-time-queue-driver", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1d5080ae..5f64f92f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,12 +47,14 @@ heltec_v3 = [ "dep:esp-hal", "dep:esp-hal-embassy", "dep:esp-println", + "embassy-executor/integrated-timers", ] heltec_v4 = [ "dep:esp-backtrace", "dep:esp-hal", "dep:esp-hal-embassy", "dep:esp-println", + "embassy-executor/integrated-timers", ] rak_wisblock_4631 = [ "dep:cortex-m-rt", diff --git a/src/main.rs b/src/main.rs index d922bd0f..629dbf65 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,7 @@ cfg_if::cfg_if! { use panic_probe as _; } else if #[cfg(any(feature = "heltec_v3", feature = "heltec_v4"))] { use esp_backtrace as _; + use esp_println as _; // provides defmt global_logger } }