Skip to content
9 changes: 7 additions & 2 deletions builder/frameworks/espidf.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 "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")
Expand All @@ -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 "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")
Expand Down Expand Up @@ -233,6 +234,10 @@ def contains_path_traversal(url):
if "espidf.custom_sdkconfig" in board:
flag_custom_sdkonfig = True

# Disable HybridCompile for espidf and arduino, espidf projects
# HybridCompile is always "framework = arduino" !
if "espidf" in pio_orig_frwrk:
flag_custom_sdkonfig = False

# Check for board-specific configurations that require sdkconfig generation
def has_board_specific_config():
Expand Down
13 changes: 6 additions & 7 deletions platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -566,7 +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 is_internet_available():
try:
response = requests.get(ARDUINO_ESP32_PACKAGE_URL, timeout=30)
Expand All @@ -576,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
Expand All @@ -592,10 +595,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."""
Expand Down Expand Up @@ -831,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
Expand Down