Skip to content

Commit c40e74e

Browse files
authored
Update platform.py
1 parent 7915d3b commit c40e74e

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

platform.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import json
1516
import os
1617
import subprocess
1718
import sys
@@ -24,6 +25,15 @@
2425
from platformio.project.config import ProjectConfig
2526
from platformio.package.manager.tool import ToolPackageManager
2627

28+
def get_tool_version_from_platform_json(tool_name):
29+
platform_json_path = os.path.join(ProjectConfig.get_instance().get("platformio", "platforms_dir"), "espressif32", "platform.json")
30+
with open(platform_json_path, "r", encoding="utf-8") as file:
31+
platform_data = json.load(file)
32+
packages = platform_data.get("packages", {})
33+
tool_info = packages[tool_name]
34+
version = tool_info.get("version", "") # version is an URL!
35+
return version
36+
2737
IS_WINDOWS = sys.platform.startswith("win")
2838
# Set Platformio env var to use windows_amd64 for all windows architectures
2939
# only windows_amd64 native espressif toolchains are available
@@ -34,6 +44,16 @@
3444
python_exe = get_pythonexe_path()
3545
pm = ToolPackageManager()
3646

47+
if not os.path.exists(os.path.join(ProjectConfig.get_instance().get("platformio", "packages_dir"), "tool-scons")):
48+
scons_uri = get_tool_version_from_platform_json("tool-scons")
49+
if scons_uri is not None:
50+
pm.install(scons_uri)
51+
52+
if not os.path.exists(os.path.join(ProjectConfig.get_instance().get("platformio", "packages_dir"), "tool-esp-rom-elfs")):
53+
rom_uri = get_tool_version_from_platform_json("tool-esp-rom-elfs")
54+
if rom_uri is not None:
55+
pm.install(rom_uri)
56+
3757
IDF_TOOLS_PATH_DEFAULT = os.path.join(os.path.expanduser("~"), ".espressif")
3858
IDF_TOOLS = os.path.join(ProjectConfig.get_instance().get("platformio", "packages_dir"), "tl-install", "tools", "idf_tools.py")
3959
IDF_TOOLS_CMD = (
@@ -53,7 +73,6 @@
5373
for p in ("tool-mklittlefs", "tool-mkfatfs", "tool-mkspiffs", "tool-dfuutil", "tool-openocd", "tool-cmake", "tool-ninja", "tool-cppcheck", "tool-clangtidy", "tool-pvs-studio", "tc-xt-esp32", "tc-ulp", "tc-rv32", "tl-xt-gdb", "tl-rv-gdb", "contrib-piohome", "contrib-pioremote"):
5474
tl_path = "file://" + join(IDF_TOOLS_PATH_DEFAULT, "tools", p)
5575
pm.install(tl_path)
56-
pm.install("tool-scons")
5776

5877
class Espressif32Platform(PlatformBase):
5978
def configure_default_packages(self, variables, targets):
@@ -68,6 +87,13 @@ def configure_default_packages(self, variables, targets):
6887
core_variant_build = (''.join(variables.get("build_flags", []))).replace("-D", " ")
6988
frameworks = variables.get("pioframework", [])
7089

90+
if variables.get("custom_sdkconfig") is not None:
91+
frameworks.append("espidf")
92+
93+
if variables.get("custom_sdkconfig") is not None or len(str(board_sdkconfig)) > 3:
94+
frameworks.append("espidf")
95+
self.packages["framework-espidf"]["optional"] = False
96+
7197
# Enable debug tool gdb only when build debug is enabled
7298
if (variables.get("build_type") or "debug" in "".join(targets)) and tl_flag:
7399
self.packages["riscv32-esp-elf-gdb"]["optional"] = False if mcu in ["esp32c2", "esp32c3", "esp32c5", "esp32c6", "esp32h2", "esp32p4"] else True
@@ -98,10 +124,10 @@ def configure_default_packages(self, variables, targets):
98124
self.packages["framework-arduinoespressif32-libs"]["version"] = dyn_lib_url
99125

100126
if variables.get("custom_sdkconfig") is not None or len(str(board_sdkconfig)) > 3:
101-
frameworks.append("espidf")
102-
self.packages["framework-espidf"]["optional"] = False
103127
if mcu == "esp32c2":
104128
self.packages["framework-arduino-c2-skeleton-lib"]["optional"] = False
129+
frameworks.append("espidf")
130+
self.packages["framework-espidf"]["optional"] = False
105131

106132
# packages for IDF and mixed Arduino+IDF projects
107133
if tl_flag and "espidf" in frameworks:
@@ -114,7 +140,7 @@ def configure_default_packages(self, variables, targets):
114140
):
115141
self.packages[p]["optional"] = False
116142

117-
if "".join(targets) in ("upload", "buildfs", "uploadfs"):
143+
if tl_flag and ("".join(targets) in ("upload", "buildfs", "uploadfs") or variables.get("custom_files_upload") is not None):
118144
filesystem = variables.get("board_build.filesystem", "littlefs")
119145
if filesystem == "littlefs":
120146
# Use mklittlefs v3.2.0 to generate FS

0 commit comments

Comments
 (0)