Skip to content

Commit f33de21

Browse files
authored
Make idf compile possible for MCUs which have no precompiled Arduino libraries (#353)
1 parent 8f58a6b commit f33de21

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

builder/frameworks/espidf.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676

7777
config = env.GetProjectConfig()
7878
board = env.BoardConfig()
79+
pio_orig_frwrk = env.GetProjectOption("framework")
7980
mcu = board.get("build.mcu", "esp32")
8081
chip_variant = board.get("build.chip_variant", "").lower()
8182
chip_variant = chip_variant if chip_variant else mcu
@@ -181,7 +182,7 @@ def create_silent_action(action_func):
181182
ARDUINO_FRMWRK_LIB_DIR_PATH = arduino_lib_dir.resolve()
182183
ARDUINO_FRMWRK_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH)
183184

184-
if mcu == "esp32c2":
185+
if mcu == "esp32c2" and "espidf" not in pio_orig_frwrk:
185186
ARDUINO_FRMWRK_C2_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH / chip_variant)
186187
if not os.path.exists(ARDUINO_FRMWRK_C2_LIB_DIR):
187188
_arduino_c2_dir = platform.get_package_dir("framework-arduino-c2-skeleton-lib")
@@ -192,7 +193,7 @@ def create_silent_action(action_func):
192193
ARDUINO_C2_DIR = str(arduino_c2_dir / chip_variant)
193194
shutil.copytree(ARDUINO_C2_DIR, ARDUINO_FRMWRK_C2_LIB_DIR, dirs_exist_ok=True)
194195

195-
if mcu == "esp32c61":
196+
if mcu == "esp32c61" and "espidf" not in pio_orig_frwrk:
196197
ARDUINO_FRMWRK_C61_LIB_DIR = str(ARDUINO_FRMWRK_LIB_DIR_PATH / chip_variant)
197198
if not os.path.exists(ARDUINO_FRMWRK_C61_LIB_DIR):
198199
_arduino_c61_dir = platform.get_package_dir("framework-arduino-c61-skeleton-lib")
@@ -233,6 +234,10 @@ def contains_path_traversal(url):
233234
if "espidf.custom_sdkconfig" in board:
234235
flag_custom_sdkonfig = True
235236

237+
# Disable HybridCompile for espidf and arduino, espidf projects
238+
# HybridCompile is always "framework = arduino" !
239+
if "espidf" in pio_orig_frwrk:
240+
flag_custom_sdkonfig = False
236241

237242
# Check for board-specific configurations that require sdkconfig generation
238243
def has_board_specific_config():

platform.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,7 @@ def _handle_existing_tool(self, tool_name: str, paths: Dict[str, str]) -> bool:
557557

558558
return self.install_tool(tool_name)
559559

560-
def _configure_arduino_framework(self, frameworks: List[str]) -> None:
560+
def _configure_arduino_framework(self, frameworks: List[str], mcu: str) -> None:
561561
"""Configure Arduino framework dependencies."""
562562
if "arduino" not in frameworks:
563563
return
@@ -566,7 +566,6 @@ def _configure_arduino_framework(self, frameworks: List[str]) -> None:
566566
safe_remove_directory_pattern(Path(self.packages_dir), f"framework-arduinoespressif32.*")
567567
self.packages["framework-arduinoespressif32"]["optional"] = False
568568
self.packages["framework-arduinoespressif32-libs"]["optional"] = False
569-
570569
if is_internet_available():
571570
try:
572571
response = requests.get(ARDUINO_ESP32_PACKAGE_URL, timeout=30)
@@ -576,6 +575,10 @@ def _configure_arduino_framework(self, frameworks: List[str]) -> None:
576575
self.packages["framework-arduinoespressif32-libs"]["version"] = dyn_lib_url
577576
except (requests.RequestException, KeyError, IndexError) as e:
578577
logger.error(f"Failed to fetch Arduino framework library URL: {e}")
578+
if mcu == "esp32c2":
579+
self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False
580+
if mcu == "esp32c61":
581+
self.packages["framework-arduino-c61-skeleton-lib"]["optional"] = False
579582

580583
def _configure_espidf_framework(
581584
self, frameworks: List[str], variables: Dict, board_config: Dict, mcu: str
@@ -592,10 +595,6 @@ def _configure_espidf_framework(
592595
safe_remove_directory_pattern(Path(self.packages_dir), f"framework-espidf@*")
593596
safe_remove_directory_pattern(Path(self.packages_dir), f"framework-espidf.*")
594597
self.packages["framework-espidf"]["optional"] = False
595-
if mcu == "esp32c2":
596-
self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False
597-
if mcu == "esp32c61":
598-
self.packages["framework-arduino-c61-skeleton-lib"]["optional"] = False
599598

600599
def _get_mcu_config(self, mcu: str) -> Optional[Dict]:
601600
"""Get MCU configuration with optimized caching and search."""
@@ -831,7 +830,7 @@ def configure_default_packages(self, variables: Dict, targets: List[str]) -> Any
831830
self._esptool_path = esptool_path
832831

833832
# Configuration steps (now with penv available)
834-
self._configure_arduino_framework(frameworks)
833+
self._configure_arduino_framework(frameworks, mcu)
835834
self._configure_espidf_framework(frameworks, variables, board_config, mcu)
836835
self._configure_mcu_toolchains(mcu, variables, targets)
837836
self._handle_littlefs_tool(for_download=False) # Ensure mklittlefs is installed

0 commit comments

Comments
 (0)