1212# See the License for the specific language governing permissions and
1313# limitations under the License.
1414
15+ import json
1516import os
1617import subprocess
1718import sys
2425from platformio .project .config import ProjectConfig
2526from 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+
2737IS_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
3444python_exe = get_pythonexe_path ()
3545pm = 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+
3757IDF_TOOLS_PATH_DEFAULT = os .path .join (os .path .expanduser ("~" ), ".espressif" )
3858IDF_TOOLS = os .path .join (ProjectConfig .get_instance ().get ("platformio" , "packages_dir" ), "tl-install" , "tools" , "idf_tools.py" )
3959IDF_TOOLS_CMD = (
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
5877class 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
0 commit comments