From bda99b20809545574fb88da56d93aff8df16106a Mon Sep 17 00:00:00 2001 From: zackees Date: Fri, 24 Jul 2026 18:41:56 -0700 Subject: [PATCH] fix: require requested ESP32 SDK before skeleton reuse --- .../src/esp32/orchestrator/packages.rs | 2 +- .../src/library/esp32_framework/libs.rs | 29 +++++-------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/crates/fbuild-build-esp/src/esp32/orchestrator/packages.rs b/crates/fbuild-build-esp/src/esp32/orchestrator/packages.rs index 73b68252a..6a6e2c030 100644 --- a/crates/fbuild-build-esp/src/esp32/orchestrator/packages.rs +++ b/crates/fbuild-build-esp/src/esp32/orchestrator/packages.rs @@ -101,7 +101,7 @@ pub(super) async fn resolve_pioarduino_packages( fbuild_packages::Package::ensure_installed(&framework).await?; // Ensure SDK libs (split package in pioarduino 3.3.7+). if let Some(url) = &libs_url { - framework.ensure_libs(url).await?; + framework.ensure_libs(url, mcu).await?; } // Ensure MCU-specific skeleton libs (e.g. ESP32-C2, ESP32-C61). if let Some(url) = &skeleton_url { diff --git a/crates/fbuild-library/src/library/esp32_framework/libs.rs b/crates/fbuild-library/src/library/esp32_framework/libs.rs index ff06e2659..4a4706baa 100644 --- a/crates/fbuild-library/src/library/esp32_framework/libs.rs +++ b/crates/fbuild-library/src/library/esp32_framework/libs.rs @@ -60,16 +60,6 @@ fn mcu_sdk_complete(mcu_dir: &Path) -> bool { && mcu_dir.join("lib").join("libfreertos.a").exists() } -fn sdk_layout_has_complete_mcu_sdk(sdk_dir: &Path) -> bool { - let Ok(entries) = std::fs::read_dir(sdk_dir) else { - return false; - }; - entries.flatten().any(|entry| { - let path = entry.path(); - looks_like_mcu_sdk_dir(&path) && mcu_sdk_complete(&path) - }) -} - fn patch_mcu_compatibility(mcu_dir: &Path, mcu: &str) -> fbuild_core::Result<()> { if mcu != "esp32c2" { return Ok(()); @@ -98,15 +88,14 @@ fn patch_mcu_compatibility(mcu_dir: &Path, mcu: &str) -> fbuild_core::Result<()> impl Esp32Framework { /// Ensure the SDK libs are downloaded and extracted into the framework's `tools/` dir. - pub async fn ensure_libs(&self, libs_url: &str) -> fbuild_core::Result<()> { + pub async fn ensure_libs(&self, libs_url: &str, mcu: &str) -> fbuild_core::Result<()> { let root = self.resolved_dir(); let tools_dir = root.join("tools"); // Already have SDK libs? Check both old (sdk/) and new // (esp32-arduino-libs/) layouts. - for dir_name in &[NEW_SDK_LAYOUT, OLD_SDK_LAYOUT] { - let sdk_dir = tools_dir.join(dir_name); - if sdk_dir.exists() && sdk_layout_has_complete_mcu_sdk(&sdk_dir) { + for mcu_dir in mcu_sdk_dir_candidates(&tools_dir, mcu) { + if mcu_sdk_complete(&mcu_dir) { return Ok(()); } } @@ -246,17 +235,13 @@ mod tests { } #[test] - fn sdk_layout_completion_ignores_metadata_only_layout() { + fn mcu_sdk_completion_requires_the_requested_mcu() { let tmp = tempfile::TempDir::new().unwrap(); let sdk_dir = tmp.path().join(NEW_SDK_LAYOUT); - write(&sdk_dir.join("package.json"), "{}"); - assert!(!sdk_layout_has_complete_mcu_sdk(&sdk_dir)); - - std::fs::create_dir_all(sdk_dir.join("esp32c2")).unwrap(); - assert!(!sdk_layout_has_complete_mcu_sdk(&sdk_dir)); + seed_complete_mcu_sdk(&sdk_dir.join("esp32c3")); - seed_complete_mcu_sdk(&sdk_dir.join("esp32c2")); - assert!(sdk_layout_has_complete_mcu_sdk(&sdk_dir)); + assert!(mcu_sdk_complete(&sdk_dir.join("esp32c3"))); + assert!(!mcu_sdk_complete(&sdk_dir.join("esp32c2"))); } #[test]