From ddefbbf3adb6bc852b2736afd9529fac26e7ef7c Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 23 Nov 2025 14:41:23 +0100 Subject: [PATCH 01/10] Refactor bootloader compilation condition Build bootloader even when custom_sdkconfig is set. Use set frameworks as condition to check --- builder/frameworks/espidf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index 5b85f51b8..be711ac6a 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -2356,7 +2356,8 @@ def get_python_exe(): # Compile bootloader # -if flag_custom_sdkonfig == False: +# if flag_custom_sdkonfig == False: +if not ("arduino" in env.subst("$PIOFRAMEWORK")) and ("espidf" not in env.subst("$PIOFRAMEWORK")): env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", build_bootloader(sdk_config)) # From b519217cccf05599ace54eda494efa2ede405954 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 23 Nov 2025 15:34:32 +0100 Subject: [PATCH 02/10] Refactor custom sdkconfig flag handling check platform entry in platformio.ini If there is espidf it is not HybridCompile --- builder/frameworks/espidf.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index be711ac6a..279fa3a61 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -233,6 +233,11 @@ def contains_path_traversal(url): if "espidf.custom_sdkconfig" in board: flag_custom_sdkonfig = True +pio_orig_frwrk = config.get("framework") +print("***** Framework read from Project Config:", pio_orig_frwrk) +if "espidf" in pio_orig_frwrk: + flag_custom_sdkonfig = False + print("**** HybridCompile switched off ****") # Check for board-specific configurations that require sdkconfig generation def has_board_specific_config(): @@ -2356,8 +2361,7 @@ def get_python_exe(): # Compile bootloader # -# if flag_custom_sdkonfig == False: -if not ("arduino" in env.subst("$PIOFRAMEWORK")) and ("espidf" not in env.subst("$PIOFRAMEWORK")): +if flag_custom_sdkonfig == False: env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", build_bootloader(sdk_config)) # From fe6719b701d73b8123b4c30d8b130c70d28be5dd Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 23 Nov 2025 15:45:59 +0100 Subject: [PATCH 03/10] Change framework retrieval method in espidf.py --- builder/frameworks/espidf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index 279fa3a61..2def283eb 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -233,8 +233,9 @@ def contains_path_traversal(url): if "espidf.custom_sdkconfig" in board: flag_custom_sdkonfig = True -pio_orig_frwrk = config.get("framework") +pio_orig_frwrk = env.GetProjectOption("framework") print("***** Framework read from Project Config:", pio_orig_frwrk) + if "espidf" in pio_orig_frwrk: flag_custom_sdkonfig = False print("**** HybridCompile switched off ****") From 8c5e8ee8fb73d6446e9282f058c75c3ac2161979 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Sun, 23 Nov 2025 16:22:20 +0100 Subject: [PATCH 04/10] Remove debug print statements in espidf.py Remove print statements related to framework configuration. --- builder/frameworks/espidf.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index 2def283eb..da9ae72d4 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -234,11 +234,10 @@ def contains_path_traversal(url): flag_custom_sdkonfig = True pio_orig_frwrk = env.GetProjectOption("framework") -print("***** Framework read from Project Config:", pio_orig_frwrk) - +# Disable HybridCompile for espidf and arduino, espidf projects +# HybridCompile is always "framework = arduino" ! if "espidf" in pio_orig_frwrk: flag_custom_sdkonfig = False - print("**** HybridCompile switched off ****") # Check for board-specific configurations that require sdkconfig generation def has_board_specific_config(): From 0a6cf98d878778c46ad4ddfd6ad83beec6a75908 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 24 Nov 2025 10:10:00 +0100 Subject: [PATCH 05/10] check if compile skeleton install is needed --- builder/frameworks/espidf.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index da9ae72d4..ac55f5e85 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -76,6 +76,7 @@ config = env.GetProjectConfig() board = env.BoardConfig() +pio_orig_frwrk = env.GetProjectOption("framework") mcu = board.get("build.mcu", "esp32") chip_variant = board.get("build.chip_variant", "").lower() chip_variant = chip_variant if chip_variant else mcu @@ -181,7 +182,7 @@ def create_silent_action(action_func): ARDUINO_FRMWRK_LIB_DIR_PATH = arduino_lib_dir.resolve() ARDUINO_FRMWRK_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH) - if mcu == "esp32c2": + if mcu == "esp32c2" and not ("espidf" in pio_orig_frwrk): ARDUINO_FRMWRK_C2_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH / chip_variant) if not os.path.exists(ARDUINO_FRMWRK_C2_LIB_DIR): _arduino_c2_dir = platform.get_package_dir("framework-arduino-c2-skeleton-lib") @@ -192,7 +193,7 @@ def create_silent_action(action_func): ARDUINO_C2_DIR = str(arduino_c2_dir / chip_variant) shutil.copytree(ARDUINO_C2_DIR, ARDUINO_FRMWRK_C2_LIB_DIR, dirs_exist_ok=True) - if mcu == "esp32c61": + if mcu == "esp32c61" and not ("espidf" in pio_orig_frwrk): ARDUINO_FRMWRK_C61_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH / chip_variant) if not os.path.exists(ARDUINO_FRMWRK_C61_LIB_DIR): _arduino_c61_dir = platform.get_package_dir("framework-arduino-c61-skeleton-lib") @@ -233,7 +234,6 @@ def contains_path_traversal(url): if "espidf.custom_sdkconfig" in board: flag_custom_sdkonfig = True -pio_orig_frwrk = env.GetProjectOption("framework") # Disable HybridCompile for espidf and arduino, espidf projects # HybridCompile is always "framework = arduino" ! if "espidf" in pio_orig_frwrk: From b42fb252eda7efb91b6ef76d06bca4313a0af224 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 24 Nov 2025 10:53:22 +0100 Subject: [PATCH 06/10] Fix condition check for esp32c2 and esp32c61 --- builder/frameworks/espidf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builder/frameworks/espidf.py b/builder/frameworks/espidf.py index ac55f5e85..9d9c0686d 100644 --- a/builder/frameworks/espidf.py +++ b/builder/frameworks/espidf.py @@ -182,7 +182,7 @@ def create_silent_action(action_func): ARDUINO_FRMWRK_LIB_DIR_PATH = arduino_lib_dir.resolve() ARDUINO_FRMWRK_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH) - if mcu == "esp32c2" and not ("espidf" in pio_orig_frwrk): + if mcu == "esp32c2" and "espidf" not in pio_orig_frwrk: ARDUINO_FRMWRK_C2_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH / chip_variant) if not os.path.exists(ARDUINO_FRMWRK_C2_LIB_DIR): _arduino_c2_dir = platform.get_package_dir("framework-arduino-c2-skeleton-lib") @@ -193,7 +193,7 @@ def create_silent_action(action_func): ARDUINO_C2_DIR = str(arduino_c2_dir / chip_variant) shutil.copytree(ARDUINO_C2_DIR, ARDUINO_FRMWRK_C2_LIB_DIR, dirs_exist_ok=True) - if mcu == "esp32c61" and not ("espidf" in pio_orig_frwrk): + if mcu == "esp32c61" and "espidf" not in pio_orig_frwrk: ARDUINO_FRMWRK_C61_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH / chip_variant) if not os.path.exists(ARDUINO_FRMWRK_C61_LIB_DIR): _arduino_c61_dir = platform.get_package_dir("framework-arduino-c61-skeleton-lib") From 5d10fbbaf4ecb5d268d19477b58087b400a9dd7d Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 24 Nov 2025 11:11:58 +0100 Subject: [PATCH 07/10] Move skeleton install for esp32c2 and esp32c61 --- platform.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platform.py b/platform.py index 2fae9d533..35eee75ec 100644 --- a/platform.py +++ b/platform.py @@ -566,6 +566,10 @@ def _configure_arduino_framework(self, frameworks: List[str]) -> None: safe_remove_directory_pattern(Path(self.packages_dir), f"framework-arduinoespressif32.*") self.packages["framework-arduinoespressif32"]["optional"] = False self.packages["framework-arduinoespressif32-libs"]["optional"] = False + if mcu == "esp32c2": + self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False + if mcu == "esp32c61": + self.packages["framework-arduino-c61-skeleton-lib"]["optional"] = False if is_internet_available(): try: @@ -592,10 +596,6 @@ def _configure_espidf_framework( safe_remove_directory_pattern(Path(self.packages_dir), f"framework-espidf@*") safe_remove_directory_pattern(Path(self.packages_dir), f"framework-espidf.*") self.packages["framework-espidf"]["optional"] = False - if mcu == "esp32c2": - self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False - if mcu == "esp32c61": - self.packages["framework-arduino-c61-skeleton-lib"]["optional"] = False def _get_mcu_config(self, mcu: str) -> Optional[Dict]: """Get MCU configuration with optimized caching and search.""" From 8d4005f60cf6ae5c394db80bf176369b5bac020c Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 24 Nov 2025 11:28:52 +0100 Subject: [PATCH 08/10] Move skeleton install to avoid raise condition --- platform.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/platform.py b/platform.py index 35eee75ec..9be5e2848 100644 --- a/platform.py +++ b/platform.py @@ -566,11 +566,6 @@ def _configure_arduino_framework(self, frameworks: List[str]) -> None: safe_remove_directory_pattern(Path(self.packages_dir), f"framework-arduinoespressif32.*") self.packages["framework-arduinoespressif32"]["optional"] = False self.packages["framework-arduinoespressif32-libs"]["optional"] = False - if mcu == "esp32c2": - self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False - if mcu == "esp32c61": - self.packages["framework-arduino-c61-skeleton-lib"]["optional"] = False - if is_internet_available(): try: response = requests.get(ARDUINO_ESP32_PACKAGE_URL, timeout=30) @@ -580,6 +575,10 @@ def _configure_arduino_framework(self, frameworks: List[str]) -> None: self.packages["framework-arduinoespressif32-libs"]["version"] = dyn_lib_url except (requests.RequestException, KeyError, IndexError) as e: logger.error(f"Failed to fetch Arduino framework library URL: {e}") + if mcu == "esp32c2": + self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False + if mcu == "esp32c61": + self.packages["framework-arduino-c61-skeleton-lib"]["optional"] = False def _configure_espidf_framework( self, frameworks: List[str], variables: Dict, board_config: Dict, mcu: str From 62f282afff9e977ce996b34f8f897d3a83855028 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 24 Nov 2025 11:36:02 +0100 Subject: [PATCH 09/10] Modify _configure_arduino_framework to accept mcu Added 'mcu' parameter to the '_configure_arduino_framework' method. --- platform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.py b/platform.py index 9be5e2848..47560201a 100644 --- a/platform.py +++ b/platform.py @@ -557,7 +557,7 @@ def _handle_existing_tool(self, tool_name: str, paths: Dict[str, str]) -> bool: return self.install_tool(tool_name) - def _configure_arduino_framework(self, frameworks: List[str]) -> None: + def _configure_arduino_framework(self, frameworks: List[str], mcu: str) -> None: """Configure Arduino framework dependencies.""" if "arduino" not in frameworks: return From 5cb5422b849066e89845739c3c1a469ddf4ae532 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 24 Nov 2025 11:39:37 +0100 Subject: [PATCH 10/10] Add MCU parameter to configure Arduino framework --- platform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.py b/platform.py index 47560201a..c4677d7ee 100644 --- a/platform.py +++ b/platform.py @@ -830,7 +830,7 @@ def configure_default_packages(self, variables: Dict, targets: List[str]) -> Any self._esptool_path = esptool_path # Configuration steps (now with penv available) - self._configure_arduino_framework(frameworks) + self._configure_arduino_framework(frameworks, mcu) self._configure_espidf_framework(frameworks, variables, board_config, mcu) self._configure_mcu_toolchains(mcu, variables, targets) self._handle_littlefs_tool(for_download=False) # Ensure mklittlefs is installed