From a3583a9f5616a4ac1f52a58d3bcc342728c6c3b5 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 20 Aug 2025 16:26:27 +1000 Subject: [PATCH 1/2] esp32: Update esp_tinyusb component to v1.7.6. Reported to fix issues reported with serial corruption when interacting with MicroPython from macOS hosts. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton --- ports/esp32/main/idf_component.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/esp32/main/idf_component.yml b/ports/esp32/main/idf_component.yml index f7773f4f4e472..cb14ffde60de8 100644 --- a/ports/esp32/main/idf_component.yml +++ b/ports/esp32/main/idf_component.yml @@ -4,7 +4,7 @@ dependencies: espressif/esp_tinyusb: rules: - if: "target in [esp32s2, esp32s3]" - version: "~1.0.0" + version: "~1.7.6" espressif/lan867x: version: "~1.0.0" rules: From 6a613568aae6bdb85ba0f86176fd50c4d9457d3e Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Wed, 20 Aug 2025 16:24:57 +1000 Subject: [PATCH 2/2] esp32: Add IDF Component Lockfiles to git repo. This is recommended by Espressif, and it's the only way to ensure everyone builds the same set of component versions. The awkward part is that updating the ESP-IDF version will churn a line in each of these files (and possibly other changes). This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton --- ports/esp32/.gitignore | 1 - ports/esp32/CMakeLists.txt | 3 ++ ports/esp32/README.md | 4 ++ ports/esp32/lockfiles/README.md | 13 +++++ ports/esp32/lockfiles/dependencies.lock.esp32 | 35 +++++++++++++ .../esp32/lockfiles/dependencies.lock.esp32c2 | 21 ++++++++ .../esp32/lockfiles/dependencies.lock.esp32c3 | 21 ++++++++ .../esp32/lockfiles/dependencies.lock.esp32c6 | 21 ++++++++ .../esp32/lockfiles/dependencies.lock.esp32s2 | 50 +++++++++++++++++++ .../esp32/lockfiles/dependencies.lock.esp32s3 | 50 +++++++++++++++++++ tools/ci.sh | 18 +++++++ 11 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 ports/esp32/lockfiles/README.md create mode 100644 ports/esp32/lockfiles/dependencies.lock.esp32 create mode 100644 ports/esp32/lockfiles/dependencies.lock.esp32c2 create mode 100644 ports/esp32/lockfiles/dependencies.lock.esp32c3 create mode 100644 ports/esp32/lockfiles/dependencies.lock.esp32c6 create mode 100644 ports/esp32/lockfiles/dependencies.lock.esp32s2 create mode 100644 ports/esp32/lockfiles/dependencies.lock.esp32s3 diff --git a/ports/esp32/.gitignore b/ports/esp32/.gitignore index a78ecd0191c9f..9c708bb85c630 100644 --- a/ports/esp32/.gitignore +++ b/ports/esp32/.gitignore @@ -1,2 +1 @@ -dependencies.lock managed_components/ diff --git a/ports/esp32/CMakeLists.txt b/ports/esp32/CMakeLists.txt index 1db374b40a431..a980e2e1d493b 100644 --- a/ports/esp32/CMakeLists.txt +++ b/ports/esp32/CMakeLists.txt @@ -61,5 +61,8 @@ set(SDKCONFIG_DEFAULTS ${CMAKE_BINARY_DIR}/sdkconfig.combined) # Include main IDF cmake file. include($ENV{IDF_PATH}/tools/cmake/project.cmake) +# Generate individual dependencies.lock files based on chip target +idf_build_set_property(DEPENDENCIES_LOCK lockfiles/dependencies.lock.${IDF_TARGET}) + # Define the project. project(micropython) diff --git a/ports/esp32/README.md b/ports/esp32/README.md index dd4584772cf84..fb91806167eac 100644 --- a/ports/esp32/README.md +++ b/ports/esp32/README.md @@ -33,6 +33,10 @@ build environment and toolchains needed to build the firmware. The ESP-IDF changes quickly and MicroPython only supports certain versions. Currently MicroPython supports v5.2, v5.2.2, v5.3, v5.4, v5.4.1 and v5.4.2. +The current *recommended version* of ESP-IDF (which is also the version used for +builds distributed on micropython.org) can be found by looking in any of the files +in the `lockfiles` subdirectory. + To install the ESP-IDF the full instructions can be found at the [Espressif Getting Started guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#installation-step-by-step). diff --git a/ports/esp32/lockfiles/README.md b/ports/esp32/lockfiles/README.md new file mode 100644 index 0000000000000..950e2b4a1d9db --- /dev/null +++ b/ports/esp32/lockfiles/README.md @@ -0,0 +1,13 @@ +# ESP-IDF Component Lockfiles + +This directory contains the exact versions of ESP-IDF components that have been +used to build MicroPython. It is updated by the [component version +solver](https://docs.espressif.com/projects/idf-component-manager/en/latest/guides/version_solver.html). + +Unless you change the `main/idf_component.yml` file for MicroPython ESP32, files +in this directory should only change contents if you build using a different +ESP-IDF version to the last time the file was updated. + +*Please do not commit changes to these files and submit PRs, unless you are +recommending that the default MicroPython ESP-IDF version should be changed.* + diff --git a/ports/esp32/lockfiles/dependencies.lock.esp32 b/ports/esp32/lockfiles/dependencies.lock.esp32 new file mode 100644 index 0000000000000..5c2b7827544ef --- /dev/null +++ b/ports/esp32/lockfiles/dependencies.lock.esp32 @@ -0,0 +1,35 @@ +dependencies: + espressif/lan867x: + component_hash: 0ff9dae3affeff53811e7c8283e67c6d36dc0c03e3bc5102c0fba629e08bf6c4 + dependencies: + - name: idf + require: private + version: '>=5.3' + source: + registry_url: https://components.espressif.com/ + type: service + targets: + - esp32 + - esp32p4 + version: 1.0.3 + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.1.0 + idf: + source: + type: idf + version: 5.4.2 +direct_dependencies: +- espressif/lan867x +- espressif/mdns +- idf +manifest_hash: 3b18b5bbac91c9fe5098d3759a37c84ed0828546d8cbc92e26e4c1698e689c8a +target: esp32 +version: 2.0.0 diff --git a/ports/esp32/lockfiles/dependencies.lock.esp32c2 b/ports/esp32/lockfiles/dependencies.lock.esp32c2 new file mode 100644 index 0000000000000..df6ed2c1d89dc --- /dev/null +++ b/ports/esp32/lockfiles/dependencies.lock.esp32c2 @@ -0,0 +1,21 @@ +dependencies: + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.1.0 + idf: + source: + type: idf + version: 5.4.2 +direct_dependencies: +- espressif/mdns +- idf +manifest_hash: 3b18b5bbac91c9fe5098d3759a37c84ed0828546d8cbc92e26e4c1698e689c8a +target: esp32c2 +version: 2.0.0 diff --git a/ports/esp32/lockfiles/dependencies.lock.esp32c3 b/ports/esp32/lockfiles/dependencies.lock.esp32c3 new file mode 100644 index 0000000000000..a4c955d4763e9 --- /dev/null +++ b/ports/esp32/lockfiles/dependencies.lock.esp32c3 @@ -0,0 +1,21 @@ +dependencies: + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.1.0 + idf: + source: + type: idf + version: 5.4.2 +direct_dependencies: +- espressif/mdns +- idf +manifest_hash: 3b18b5bbac91c9fe5098d3759a37c84ed0828546d8cbc92e26e4c1698e689c8a +target: esp32c3 +version: 2.0.0 diff --git a/ports/esp32/lockfiles/dependencies.lock.esp32c6 b/ports/esp32/lockfiles/dependencies.lock.esp32c6 new file mode 100644 index 0000000000000..fa81d8ad78dca --- /dev/null +++ b/ports/esp32/lockfiles/dependencies.lock.esp32c6 @@ -0,0 +1,21 @@ +dependencies: + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.1.0 + idf: + source: + type: idf + version: 5.4.2 +direct_dependencies: +- espressif/mdns +- idf +manifest_hash: 3b18b5bbac91c9fe5098d3759a37c84ed0828546d8cbc92e26e4c1698e689c8a +target: esp32c6 +version: 2.0.0 diff --git a/ports/esp32/lockfiles/dependencies.lock.esp32s2 b/ports/esp32/lockfiles/dependencies.lock.esp32s2 new file mode 100644 index 0000000000000..12430428e0979 --- /dev/null +++ b/ports/esp32/lockfiles/dependencies.lock.esp32s2 @@ -0,0 +1,50 @@ +dependencies: + espressif/esp_tinyusb: + component_hash: 96d232ced7afe1976119b62f7fbf1944a2a78b36228ff6f7b9318394ac1153cc + dependencies: + - name: idf + require: private + version: '>=5.0' + - name: espressif/tinyusb + registry_url: https://components.espressif.com + require: public + version: '>=0.14.2' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.7.6~1 + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.1.0 + espressif/tinyusb: + component_hash: aa65639878f27a44d349044afd9c3fc134a92bd560874fdac1d836019b5c07ca + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + targets: + - esp32s2 + - esp32s3 + - esp32p4 + version: 0.18.0~4 + idf: + source: + type: idf + version: 5.4.2 +direct_dependencies: +- espressif/esp_tinyusb +- espressif/mdns +- idf +manifest_hash: 3b18b5bbac91c9fe5098d3759a37c84ed0828546d8cbc92e26e4c1698e689c8a +target: esp32s2 +version: 2.0.0 diff --git a/ports/esp32/lockfiles/dependencies.lock.esp32s3 b/ports/esp32/lockfiles/dependencies.lock.esp32s3 new file mode 100644 index 0000000000000..215346dbd441c --- /dev/null +++ b/ports/esp32/lockfiles/dependencies.lock.esp32s3 @@ -0,0 +1,50 @@ +dependencies: + espressif/esp_tinyusb: + component_hash: 96d232ced7afe1976119b62f7fbf1944a2a78b36228ff6f7b9318394ac1153cc + dependencies: + - name: idf + require: private + version: '>=5.0' + - name: espressif/tinyusb + registry_url: https://components.espressif.com + require: public + version: '>=0.14.2' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.7.6~1 + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com/ + type: service + version: 1.1.0 + espressif/tinyusb: + component_hash: aa65639878f27a44d349044afd9c3fc134a92bd560874fdac1d836019b5c07ca + dependencies: + - name: idf + require: private + version: '>=5.0' + source: + registry_url: https://components.espressif.com + type: service + targets: + - esp32s2 + - esp32s3 + - esp32p4 + version: 0.18.0~4 + idf: + source: + type: idf + version: 5.4.2 +direct_dependencies: +- espressif/esp_tinyusb +- espressif/mdns +- idf +manifest_hash: 3b18b5bbac91c9fe5098d3759a37c84ed0828546d8cbc92e26e4c1698e689c8a +target: esp32s3 +version: 2.0.0 diff --git a/tools/ci.sh b/tools/ci.sh index e165cb2cf3f48..e0c5f7fbddd02 100755 --- a/tools/ci.sh +++ b/tools/ci.sh @@ -205,6 +205,8 @@ function ci_esp32_build_cmod_spiram_s2 { make ${MAKEOPTS} -C ports/esp32 BOARD=ESP32_GENERIC BOARD_VARIANT=SPIRAM make ${MAKEOPTS} -C ports/esp32 BOARD=ESP32_GENERIC_S2 + + ci_esp32_check_lockfiles } function ci_esp32_build_s3_c3 { @@ -212,6 +214,8 @@ function ci_esp32_build_s3_c3 { make ${MAKEOPTS} -C ports/esp32 BOARD=ESP32_GENERIC_S3 make ${MAKEOPTS} -C ports/esp32 BOARD=ESP32_GENERIC_C3 + + ci_esp32_check_lockfiles } function ci_esp32_build_c2_c6 { @@ -219,6 +223,20 @@ function ci_esp32_build_c2_c6 { make ${MAKEOPTS} -C ports/esp32 BOARD=ESP32_GENERIC_C2 make ${MAKEOPTS} -C ports/esp32 BOARD=ESP32_GENERIC_C6 + + ci_esp32_check_lockfiles +} + +function ci_esp32_check_lockfiles { + if ! git diff --exit-code ports/esp32/lockfiles; then + echo + echo "The ESP-IDF Component Lockfiles were updated by the build." + echo + echo "Most likely changes have been made in idf_component.yml," + echo "or the ESP-IDF version used in CI doesn't match the lockfile" + echo "version." + exit 1 + fi } ########################################################################################