diff --git a/bundles/com.espressif.idf.branding/META-INF/MANIFEST.MF b/bundles/com.espressif.idf.branding/META-INF/MANIFEST.MF index 54b22ae1e..56f6d8d5a 100644 --- a/bundles/com.espressif.idf.branding/META-INF/MANIFEST.MF +++ b/bundles/com.espressif.idf.branding/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: com.espressif.idf.branding;singleton:=true -Bundle-Version: 3.5.0.qualifier +Bundle-Version: 3.6.0.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-17 diff --git a/bundles/com.espressif.idf.core/META-INF/MANIFEST.MF b/bundles/com.espressif.idf.core/META-INF/MANIFEST.MF index a8ca2a54c..b714fd244 100644 --- a/bundles/com.espressif.idf.core/META-INF/MANIFEST.MF +++ b/bundles/com.espressif.idf.core/META-INF/MANIFEST.MF @@ -39,6 +39,8 @@ Bundle-ActivationPolicy: lazy Export-Package: com.espressif.idf.core, com.espressif.idf.core.actions, com.espressif.idf.core.build, + com.espressif.idf.core.configparser, + com.espressif.idf.core.configparser.vo, com.espressif.idf.core.logging, com.espressif.idf.core.resources, com.espressif.idf.core.toolchain, diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/DefaultBoardProvider.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/DefaultBoardProvider.java index 407bde16c..81f940759 100644 --- a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/DefaultBoardProvider.java +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/DefaultBoardProvider.java @@ -4,11 +4,13 @@ *******************************************************************************/ package com.espressif.idf.core; +import java.util.List; import java.util.OptionalInt; import java.util.stream.IntStream; import java.util.stream.Stream; -import com.espressif.idf.core.util.EspConfigParser; +import com.espressif.idf.core.configparser.EspConfigParser; +import com.espressif.idf.core.configparser.vo.Board; import com.espressif.idf.core.util.StringUtil; public class DefaultBoardProvider @@ -54,8 +56,8 @@ public int getIndexOfDefaultBoard(String targetName, String[] boardsForTarget) public String getDefaultBoard(String targetName) { - var boardConfigMap = this.espConfigParser.getBoardsConfigs(targetName); - var boards = boardConfigMap.keySet().toArray(new String[0]); + List boardsList = this.espConfigParser.getBoardsForTarget(targetName); + String[] boards = boardsList.stream().map(Board::name).toArray(String[]::new); return boards[getIndexOfDefaultBoard(targetName, boards)]; } diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFBuildConfiguration.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFBuildConfiguration.java index e3e8fd541..45220ff0c 100644 --- a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFBuildConfiguration.java +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFBuildConfiguration.java @@ -432,7 +432,6 @@ private void runCmakeCommand(IConsole console, IProgressMonitor monitor, IProjec infoStream.write(String.format(Messages.CMakeBuildConfiguration_Configuring, buildDir)); List command = new ArrayList<>(); - command.add("cmake"); //$NON-NLS-1$ command.add("-G"); //$NON-NLS-1$ command.add(generator); @@ -442,6 +441,9 @@ private void runCmakeCommand(IConsole console, IProgressMonitor monitor, IProjec command.add("-DCMAKE_TOOLCHAIN_FILE=" + toolChainFile.getPath().toString()); //$NON-NLS-1$ } + command.add("-DPYTHON_DEPS_CHECKED=1"); //$NON-NLS-1$ + command.add("-DPYTHON=" + IDFUtil.getIDFPythonEnvPath()); //$NON-NLS-1$ + command.add("-DESP_PLATFORM=1"); //$NON-NLS-1$ command.add("-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"); //$NON-NLS-1$ IDFEnvironmentVariables envVariables = new IDFEnvironmentVariables(); diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFLaunchConstants.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFLaunchConstants.java index 0d0b407e9..1ba1da6b1 100644 --- a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFLaunchConstants.java +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/build/IDFLaunchConstants.java @@ -18,4 +18,5 @@ public final class IDFLaunchConstants public static final String OPEN_SERIAL_MONITOR = "OPEN_SERIAL_MONITOR"; //$NON-NLS-1$ public static final String SERIAL_MONITOR_ENCODING = "SERIAL_MONITOR_ENCODING"; //$NON-NLS-1$ public static final String BUILD_FOLDER_PATH = "com.espressif.idf.launch.serial.core.idfBuildFolderPath"; //$NON-NLS-1$ + public static final String OPENOCD_USB_LOCATION = "OPENOCD_USB_ADAPTER_LOCATION"; //$NON-NLS-1$ } diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/EspConfigParser.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/EspConfigParser.java new file mode 100644 index 000000000..7dda2cf05 --- /dev/null +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/EspConfigParser.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright 2025 Espressif Systems (Shanghai) PTE LTD. All rights reserved. + * Use is subject to license terms. + *******************************************************************************/ +package com.espressif.idf.core.configparser; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import com.espressif.idf.core.IDFEnvironmentVariables; +import com.espressif.idf.core.configparser.vo.Board; +import com.espressif.idf.core.configparser.vo.EspConfig; +import com.espressif.idf.core.configparser.vo.Option; +import com.espressif.idf.core.configparser.vo.Target; +import com.espressif.idf.core.logging.Logger; +import com.google.gson.Gson; + +public class EspConfigParser +{ + + private final String espConfigPath; + private final Gson gson = new Gson(); + private final EspConfig config; + + public EspConfigParser() + { + this.espConfigPath = new IDFEnvironmentVariables().getEnvValue(IDFEnvironmentVariables.OPENOCD_SCRIPTS) + + "/esp-config.json"; //$NON-NLS-1$ + this.config = loadConfig(); + } + + public EspConfigParser(String espConfigPath) + { + this.espConfigPath = espConfigPath; + this.config = loadConfig(); + } + + private EspConfig loadConfig() + { + File file = new File(espConfigPath); + if (!file.exists()) + { + Logger.log("esp-config.json not found at: " + espConfigPath); //$NON-NLS-1$ + return null; + } + + try (FileReader reader = new FileReader(file)) + { + return gson.fromJson(reader, EspConfig.class); + } + catch (IOException e) + { + Logger.log(e); + return null; + } + } + + public Set getTargets() + { + Set targets = new LinkedHashSet<>(); + if (config == null || config.targets() == null) + return targets; + + for (Target target : config.targets()) + { + if (target.id() != null) + { + targets.add(target.id()); + } + } + return targets; + } + + public List getEspFlashVoltages() + { + List voltages = new ArrayList<>(); + if (config == null || config.options() == null) + return voltages; + + for (Option option : config.options()) + { + if ("ESP_FLASH_VOLTAGE".equals(option.name()) && option.values() != null) //$NON-NLS-1$ + { + voltages.addAll(option.values()); + break; + } + } + return voltages; + } + + public List getBoardsForTarget(String target) + { + List boardsForTarget = new ArrayList<>(); + if (config == null || config.boards() == null) + return boardsForTarget; + + for (Board board : config.boards()) + { + if (target.equals(board.target()) && board.name() != null && board.config_files() != null) + { + boardsForTarget.add(board); + } + } + return boardsForTarget; + } + + public boolean hasBoardConfigJson() + { + return new File(espConfigPath).exists(); + } +} diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/vo/Board.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/vo/Board.java new file mode 100644 index 000000000..d5b7a6abd --- /dev/null +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/vo/Board.java @@ -0,0 +1,7 @@ +package com.espressif.idf.core.configparser.vo; + +import java.util.List; + +public record Board(String name, String target, List config_files) +{ +} diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/vo/EspConfig.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/vo/EspConfig.java new file mode 100644 index 000000000..c097c7dd7 --- /dev/null +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/configparser/vo/EspConfig.java @@ -0,0 +1,7 @@ +package com.espressif.idf.core.configparser.vo; + +import java.util.List; + +public record EspConfig(List targets, List