diff --git a/builder/main.py b/builder/main.py index 4d68bde..d1929fc 100644 --- a/builder/main.py +++ b/builder/main.py @@ -130,20 +130,21 @@ def __fetch_spiffs_size(target, source, env): env = DefaultEnvironment() platform = env.PioPlatform() board = env.BoardConfig() +mcu = board.get("build.mcu", "esp32") env.Replace( __get_board_f_flash=_get_board_f_flash, __get_board_flash_mode=_get_board_flash_mode, - AR="xtensa-esp32-elf-ar", - AS="xtensa-esp32-elf-as", - CC="xtensa-esp32-elf-gcc", - CXX="xtensa-esp32-elf-g++", - GDB="xtensa-esp32-elf-gdb", + AR="xtensa-%s-elf-ar" % mcu, + AS="xtensa-%s-elf-as" % mcu, + CC="xtensa-%s-elf-gcc" % mcu, + CXX="xtensa-%s-elf-g++" % mcu, + GDB="xtensa-%s-elf-gdb" % mcu, OBJCOPY=join( platform.get_package_dir("tool-esptoolpy") or "", "esptool.py"), - RANLIB="xtensa-esp32-elf-ranlib", - SIZETOOL="xtensa-esp32-elf-size", + RANLIB="xtensa-%s-elf-ranlib" % mcu, + SIZETOOL="xtensa-%s-elf-size" % mcu, ARFLAGS=["rc"], @@ -153,7 +154,7 @@ env.Replace( SIZEPRINTCMD="$SIZETOOL -B -d $SOURCES", ERASEFLAGS=[ - "--chip", "esp32", + "--chip", mcu, "--port", '"$UPLOAD_PORT"' ], ERASECMD='"$PYTHONEXE" "$OBJCOPY" $ERASEFLAGS erase_flash', @@ -177,7 +178,7 @@ env.Append( ElfToBin=Builder( action=env.VerboseAction(" ".join([ '"$PYTHONEXE" "$OBJCOPY"', - "--chip", "esp32", + "--chip", mcu, "elf2image", "--flash_mode", "$BOARD_FLASH_MODE", "--flash_freq", "${__get_board_f_flash(__env__)}", @@ -293,7 +294,7 @@ elif upload_protocol == "esptool": UPLOADER=join( platform.get_package_dir("tool-esptoolpy") or "", "esptool.py"), UPLOADERFLAGS=[ - "--chip", "esp32", + "--chip", mcu, "--port", '"$UPLOAD_PORT"', "--baud", "$UPLOAD_SPEED", "--before", "default_reset", @@ -311,7 +312,7 @@ elif upload_protocol == "esptool": if "uploadfs" in COMMAND_LINE_TARGETS: env.Replace( UPLOADERFLAGS=[ - "--chip", "esp32", + "--chip", mcu, "--port", '"$UPLOAD_PORT"', "--baud", "$UPLOAD_SPEED", "--before", "default_reset", diff --git a/platform.json b/platform.json index 8463969..97de2c4 100644 --- a/platform.json +++ b/platform.json @@ -42,6 +42,11 @@ "type": "toolchain", "version": "~2.50200.0" }, + "toolchain-xtensa32s2": { + "type": "toolchain", + "optional": true, + "version": "~1.80200.0" + }, "toolchain-esp32ulp": { "type": "toolchain", "optional": true, diff --git a/platform.py b/platform.py index 9e161a3..4ee80e4 100644 --- a/platform.py +++ b/platform.py @@ -21,6 +21,13 @@ from platformio.util import get_systype class Espressif32Platform(PlatformBase): def configure_default_packages(self, variables, targets): + if not variables.get("board"): + return PlatformBase.configure_default_packages( + self, variables, targets) + + board_config = self.board_config(variables.get("board")) + mcu = variables.get("board_build.mcu", board_config.get( + "build.mcu", "esp32")) if "buildfs" in targets: self.packages['tool-mkspiffs']['optional'] = False if variables.get("upload_protocol"): @@ -29,15 +36,19 @@ class Espressif32Platform(PlatformBase): self.packages['toolchain-esp32ulp']['optional'] = False if "espidf" in variables.get("pioframework", []): for p in self.packages: - if p in ("tool-cmake", "tool-ninja", "toolchain-esp32ulp"): - self.packages[p]['optional'] = False + 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.80200.0" + # ESP32-S2 toolchain is identical for both Arduino and ESP-IDF + if mcu == "esp32s2": + self.packages.pop("toolchain-xtensa32", None) + self.packages['toolchain-xtensa32s2']['optional'] = False + self.packages['tool-esptoolpy']['version'] = "~1.30000.0" build_core = variables.get( - "board_build.core", self.board_config(variables.get("board")).get( - "build.core", "arduino")).lower() + "board_build.core", board_config.get("build.core", "arduino")).lower() if build_core == "mbcwb": self.packages['framework-arduinoespressif32']['optional'] = True self.packages['framework-arduino-mbcwb']['optional'] = False