From 93b71b66e72028a9d296da30e2fa9c907747a4a7 Mon Sep 17 00:00:00 2001 From: valeros Date: Fri, 5 Nov 2021 13:49:21 +0200 Subject: [PATCH] Update ESP-IDF to v4.3.1 Resolve #655, resolve #635 --- builder/frameworks/espidf.py | 7 +++-- platform.json | 20 +++++++++++++- platform.py | 53 +++++++++++++++++++++++++++++------- 3 files changed, 66 insertions(+), 14 deletions(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index 8824048..02e0945 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -53,9 +53,9 @@ FRAMEWORK_DIR = platform.get_package_dir("framework-espidf") TOOLCHAIN_DIR = platform.get_package_dir( "toolchain-%s" % ( - "riscv-esp" + "riscv32-esp" if mcu == "esp32c3" - else ("xtensa32s2" if mcu == "esp32s2" else "xtensa32") + else ("xtensa-esp32s2" if mcu == "esp32s2" else "xtensa-esp32") ) ) @@ -997,7 +997,8 @@ def install_python_deps(): return result deps = { - "cryptography": ">=2.1.4", + # https://github.com/platformio/platform-espressif32/issues/635 + "cryptography": ">=2.1.4,<35.0.0", "future": ">=0.15.2", "pyparsing": ">=2.0.3,<2.4.0", "kconfiglib": "==13.7.1", diff --git a/platform.json b/platform.json index 82658a9..e308b17 100644 --- a/platform.json +++ b/platform.json @@ -77,6 +77,24 @@ "owner": "platformio", "version": "~1.80400.0" }, + "toolchain-xtensa-esp32": { + "type": "toolchain", + "optional": true, + "owner": "espressif", + "version": "8.4.0+2021r1" + }, + "toolchain-xtensa-esp32s2": { + "type": "toolchain", + "optional": true, + "owner": "espressif", + "version": "8.4.0+2021r1" + }, + "toolchain-riscv32-esp": { + "type": "toolchain", + "optional": true, + "owner": "espressif", + "version": "8.4.0+2021r1" + }, "framework-arduinoespressif32": { "type": "framework", "optional": true, @@ -93,7 +111,7 @@ "type": "framework", "optional": true, "owner": "platformio", - "version": "~3.40300.0", + "version": "~3.40301.0", "optionalVersions": ["~3.40001.0"] }, "framework-simba": { diff --git a/platform.py b/platform.py index 5f093a0..d17e2e9 100644 --- a/platform.py +++ b/platform.py @@ -28,6 +28,15 @@ class Espressif32Platform(PlatformBase): board_config = self.board_config(variables.get("board")) mcu = variables.get("board_build.mcu", board_config.get("build.mcu", "esp32")) frameworks = variables.get("pioframework", []) + + # Legacy toolchain names are default value. This logic is temporary as the + # platform is gradually being switched to the toolchain packages from the + # Espressif organization. + + xtensa32_toolchain = "toolchain-xtensa32" + xtensa32s2_toolchain = "toolchain-xtensa32s2" + riscv_toolchain = "toolchain-riscv-esp" + if "buildfs" in targets: self.packages["tool-mkspiffs"]["optional"] = False if variables.get("upload_protocol"): @@ -35,23 +44,44 @@ class Espressif32Platform(PlatformBase): if os.path.isdir("ulp"): self.packages["toolchain-esp32ulp"]["optional"] = False if "espidf" in frameworks: - for p in self.packages: + # Legacy setting for mixed IDF+Arduino projects + if "arduino" in frameworks: + self.packages[xtensa32_toolchain]["version"] = "~2.80400.0" + # Arduino component is not compatible with ESP-IDF >=4.1 + self.packages["framework-espidf"]["version"] = "~3.40001.0" + else: + xtensa32_toolchain = "toolchain-xtensa-esp32" + xtensa32s2_toolchain = "toolchain-xtensa-esp32s2" + riscv_toolchain = "toolchain-riscv32-esp" + + for p in self.packages.copy(): + # Disable old toolchains used by default + if ( + p.startswith("toolchain") + and "ulp" not in p + and self.packages[p]["owner"] != "espressif" + ): + del self.packages[p] if p in ("tool-cmake", "tool-ninja", "toolchain-%sulp" % mcu): self.packages[p]["optional"] = False elif p in ("tool-mconf", "tool-idf") and "windows" in get_systype(): self.packages[p]["optional"] = False - self.packages["toolchain-xtensa32"]["version"] = "~2.80400.0" - if "arduino" in frameworks: - # Arduino component is not compatible with ESP-IDF >=4.1 - self.packages["framework-espidf"]["version"] = "~3.40001.0" + else: + # Remove the latest toolchains from PATH for frameworks except IDF + for toolchain in ( + "toolchain-xtensa-esp32", + "toolchain-xtensa-esp32s2", + "toolchain-riscv32-esp", + ): + self.packages.pop(toolchain, None) + if mcu in ("esp32s2", "esp32c3"): - self.packages.pop("toolchain-xtensa32", None) + self.packages.pop(xtensa32_toolchain, None) self.packages.pop("toolchain-esp32ulp", None) # RISC-V based toolchain for ESP32C3 and ESP32S2 ULP - self.packages["toolchain-riscv-esp"]["optional"] = False + self.packages[riscv_toolchain]["optional"] = False if mcu == "esp32s2": - self.packages["toolchain-xtensa32s2"]["optional"] = False - self.packages["toolchain-esp32s2ulp"]["optional"] = False + self.packages[xtensa32s2_toolchain]["optional"] = False build_core = variables.get( "board_build.core", board_config.get("build.core", "arduino") @@ -207,7 +237,10 @@ class Espressif32Platform(PlatformBase): if "openocd" in debug_options["server"].get("executable", ""): debug_options["server"]["arguments"].extend( - ["-c", "adapter_khz %s" % (initial_debug_options.get("speed") or "5000")] + [ + "-c", + "adapter_khz %s" % (initial_debug_options.get("speed") or "5000"), + ] ) ignore_conds = [