From dff6d1ceea551479e37c94a536723d5f61e8a324 Mon Sep 17 00:00:00 2001 From: Zach Vorhies Date: Sun, 4 Oct 2026 08:39:45 -0700 Subject: [PATCH] fix: link ESP-IDF 4.4 radio archives from SDK ld Local-Gate: v1 tree=53c36b735851f2b72a84eacfcd91ae5b4e3bb563 secs=764 lanes=linux-minimal:run,dylint:run Ci-Attestation: {"at":1791129158,"gate":"general/all/ubuntu-ci-guards","host":"linux-x86_64","key":"2ea1a9d6b92ced3df74ca7d7e209de580f0dbb6c5519809bcb63fc1f23cbaaba","lane":"linux-minimal","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":400,"stamp":"457b60e3db34caa853d6b863db6ae25d","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} Ci-Attestation: {"at":1791129158,"gate":"rust/x86_64-unknown-linux-gnu/workspace-clippy","host":"linux-x86_64","key":"2ea1a9d6b92ced3df74ca7d7e209de580f0dbb6c5519809bcb63fc1f23cbaaba","lane":"linux-minimal","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":400,"stamp":"19f505a76cf6cc68295111d6c56e368f","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} Ci-Attestation: {"at":1791129158,"gate":"rust/x86_64-unknown-linux-gnu/workspace-test","host":"linux-x86_64","key":"2ea1a9d6b92ced3df74ca7d7e209de580f0dbb6c5519809bcb63fc1f23cbaaba","lane":"linux-minimal","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":400,"stamp":"c5f34ff4f07e6c8e5fd1ba74bb43141b","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} Ci-Attestation: {"at":1791129158,"gate":"rust/x86_64-unknown-linux-gnu/python-facade-test","host":"linux-x86_64","key":"2ea1a9d6b92ced3df74ca7d7e209de580f0dbb6c5519809bcb63fc1f23cbaaba","lane":"linux-minimal","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":400,"stamp":"50752d4521027425954e1e1f239d96ab","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} Ci-Attestation: {"at":1791129158,"gate":"general/all/dylint-policy","host":"linux-x86_64","key":"2cc46a15c0aafa04ceb41b640ddd53391c795edc07ef7f606686a7656c4c8d58","lane":"dylint","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":364,"stamp":"c8a99b9577a65597f77df897eef083e1","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} Ci-Attestation: {"at":1791129158,"gate":"rust/x86_64-unknown-linux-gnu/dylint-library-check","host":"linux-x86_64","key":"2cc46a15c0aafa04ceb41b640ddd53391c795edc07ef7f606686a7656c4c8d58","lane":"dylint","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":364,"stamp":"e357d67a244e3496cb3abe50e3ec5a94","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} Ci-Attestation: {"at":1791129158,"gate":"rust/x86_64-unknown-linux-gnu/workspace-dylint","host":"linux-x86_64","key":"2cc46a15c0aafa04ceb41b640ddd53391c795edc07ef7f606686a7656c4c8d58","lane":"dylint","parents":["c38329f2e90f5878f939159d818ffcb3f5e5358f"],"secs":364,"stamp":"e4ef5e6509837af42d9f376f5446e8e4","tree":"53c36b735851f2b72a84eacfcd91ae5b4e3bb563","v":1,"via":"run"} --- Cargo.lock | 42 +++++++++---------- Cargo.toml | 2 +- .../src/library/esp32_framework/sdk_paths.rs | 8 ++++ .../src/library/esp32_framework/tests.rs | 29 +++++++++++++ pyproject.toml | 2 +- 5 files changed, 60 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4f480210..8ad2e8d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -988,7 +988,7 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fbuild-bench-fastled-examples" -version = "2.5.35" +version = "2.5.36" dependencies = [ "fbuild-core", "fbuild-library-select", @@ -1002,7 +1002,7 @@ dependencies = [ [[package]] name = "fbuild-build" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "blake3", @@ -1039,7 +1039,7 @@ dependencies = [ [[package]] name = "fbuild-build-arm" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "blake3", @@ -1073,7 +1073,7 @@ dependencies = [ [[package]] name = "fbuild-build-engine" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "blake3", @@ -1107,7 +1107,7 @@ dependencies = [ [[package]] name = "fbuild-build-esp" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "blake3", @@ -1142,7 +1142,7 @@ dependencies = [ [[package]] name = "fbuild-build-mcu" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "blake3", @@ -1176,7 +1176,7 @@ dependencies = [ [[package]] name = "fbuild-cli" -version = "2.5.35" +version = "2.5.36" dependencies = [ "blake3", "clap", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "fbuild-config" -version = "2.5.35" +version = "2.5.36" dependencies = [ "fbuild-core", "fbuild-paths", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "fbuild-core" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "fs2", @@ -1252,7 +1252,7 @@ dependencies = [ [[package]] name = "fbuild-daemon" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "axum 0.7.9", @@ -1291,7 +1291,7 @@ dependencies = [ [[package]] name = "fbuild-deploy" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "espflash", @@ -1319,7 +1319,7 @@ dependencies = [ [[package]] name = "fbuild-header-scan" -version = "2.5.35" +version = "2.5.36" dependencies = [ "criterion", "fbuild-paths", @@ -1330,7 +1330,7 @@ dependencies = [ [[package]] name = "fbuild-library" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "axum 0.7.9", @@ -1362,7 +1362,7 @@ dependencies = [ [[package]] name = "fbuild-library-select" -version = "2.5.35" +version = "2.5.36" dependencies = [ "bincode", "blake3", @@ -1383,7 +1383,7 @@ dependencies = [ [[package]] name = "fbuild-packages" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "axum 0.7.9", @@ -1415,7 +1415,7 @@ dependencies = [ [[package]] name = "fbuild-packages-fetch" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "axum 0.7.9", @@ -1444,7 +1444,7 @@ dependencies = [ [[package]] name = "fbuild-paths" -version = "2.5.35" +version = "2.5.36" dependencies = [ "blake3", "fbuild-core", @@ -1456,7 +1456,7 @@ dependencies = [ [[package]] name = "fbuild-python" -version = "2.5.35" +version = "2.5.36" dependencies = [ "base64", "fbuild-core", @@ -1480,7 +1480,7 @@ dependencies = [ [[package]] name = "fbuild-serial" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "base64", @@ -1503,7 +1503,7 @@ dependencies = [ [[package]] name = "fbuild-test-support" -version = "2.5.35" +version = "2.5.36" dependencies = [ "fbuild-config", "fbuild-core", @@ -1523,7 +1523,7 @@ dependencies = [ [[package]] name = "fbuild-toolchain" -version = "2.5.35" +version = "2.5.36" dependencies = [ "async-trait", "axum 0.7.9", diff --git a/Cargo.toml b/Cargo.toml index 936bdc9a..59d4c574 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,7 +93,7 @@ targets = [ ] [workspace.package] -version = "2.5.35" +version = "2.5.36" edition = "2021" rust-version = "1.95.0" license = "AGPL-3.0-only" diff --git a/crates/fbuild-library/src/library/esp32_framework/sdk_paths.rs b/crates/fbuild-library/src/library/esp32_framework/sdk_paths.rs index f2f8b4f0..1724312a 100644 --- a/crates/fbuild-library/src/library/esp32_framework/sdk_paths.rs +++ b/crates/fbuild-library/src/library/esp32_framework/sdk_paths.rs @@ -321,11 +321,19 @@ impl Esp32Framework { if lib_dir.exists() { flags.push(format!("-L{}", lib_dir.display())); } + // Arduino-ESP32 2.x keeps radio archives such as libphy.a and + // librtc.a beside its linker scripts. WiFi users need these archives + // even though the ordinary SDK libraries live under lib/. + let ld_dir = sdk_dir.join("ld"); + if ld_dir.exists() { + flags.push(format!("-L{}", ld_dir.display())); + } let mut libraries = variant_dir .as_ref() .map(|dir| collect_archive_files(dir)) .unwrap_or_default(); libraries.extend(collect_archive_files(&lib_dir)); + libraries.extend(collect_archive_files(&ld_dir)); let mut names = std::collections::BTreeSet::new(); for lib in libraries { if let Some(stem) = lib.file_stem() { diff --git a/crates/fbuild-library/src/library/esp32_framework/tests.rs b/crates/fbuild-library/src/library/esp32_framework/tests.rs index 8eaf6eef..f7bdb8b7 100644 --- a/crates/fbuild-library/src/library/esp32_framework/tests.rs +++ b/crates/fbuild-library/src/library/esp32_framework/tests.rs @@ -417,6 +417,35 @@ fn old_sdk_libraries_use_selected_variant_before_common_archives() { assert!(flags.contains(&"-lesp_system".to_string())); } +#[test] +fn old_sdk_radio_archives_are_linked_from_ld_directory() { + let tmp = tempfile::TempDir::new().unwrap(); + let sdk = tmp.path().join("tools").join("sdk").join("esp32"); + let common = sdk.join("lib"); + let ld = sdk.join("ld"); + std::fs::create_dir_all(&common).unwrap(); + std::fs::create_dir_all(&ld).unwrap(); + std::fs::write(common.join("libesp_phy.a"), "").unwrap(); + std::fs::write(ld.join("libphy.a"), "").unwrap(); + std::fs::write(ld.join("librtc.a"), "").unwrap(); + let fw = Esp32Framework { + base: PackageBase::new( + "test", + "1.0", + "http://example.com", + "http://example.com", + None, + CacheSubdir::Platforms, + tmp.path(), + ), + install_dir: Some(tmp.path().to_path_buf()), + }; + let flags = fw.get_sdk_lib_flags("esp32", None); + assert!(flags.contains(&format!("-L{}", ld.display()))); + assert!(flags.contains(&"-lphy".to_string())); + assert!(flags.contains(&"-lrtc".to_string())); +} + #[test] fn test_split_defines_preserves_escaped_quotes() { let content = diff --git a/pyproject.toml b/pyproject.toml index a2040594..9483d6e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "fbuild" -version = "2.5.35" +version = "2.5.36" description = "PlatformIO-compatible embedded build tool (Rust implementation)" readme = "README.md" license = "AGPL-3.0-only"