1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 14:12:10 +02:00

Adjust Arduino to new GCCToolChain API and add type and id/name.

Change-Id: Ia089985425c7f1a6fe347c41a6a01e5ab16d8208
This commit is contained in:
Doug Schaefer 2017-11-07 13:38:11 -05:00
parent b495a5faae
commit ffdb004e67
9 changed files with 49 additions and 33 deletions

View file

@ -109,7 +109,9 @@ public class GCCToolChain extends PlatformObject implements IToolChain {
idBuilder.append(arch); idBuilder.append(arch);
} }
idBuilder.append('-'); idBuilder.append('-');
if (pathToToolChain != null) {
idBuilder.append(pathToToolChain.toString().replaceAll("\\\\", "/")); //$NON-NLS-1$ //$NON-NLS-2$ idBuilder.append(pathToToolChain.toString().replaceAll("\\\\", "/")); //$NON-NLS-1$ //$NON-NLS-2$
}
this.id = idBuilder.toString(); this.id = idBuilder.toString();
properties.put(ATTR_ARCH, arch); properties.put(ATTR_ARCH, arch);
@ -123,15 +125,9 @@ public class GCCToolChain extends PlatformObject implements IToolChain {
} }
} }
if (pathVar == null) { if (pathVar == null && this.path != null) {
// Make one with the directory containing out tool // Make one with the directory containing out tool
String name; pathVar = new EnvironmentVariable("PATH", this.path.getParent().toString(), //$NON-NLS-1$
// if (System.getenv("Path") != null) { //$NON-NLS-1$
// name = "Path"; //$NON-NLS-1$
// } else {
name = "PATH"; //$NON-NLS-1$
// }
pathVar = new EnvironmentVariable(name, this.path.getParent().toString(),
IEnvironmentVariable.ENVVAR_PREPEND, File.pathSeparator); IEnvironmentVariable.ENVVAR_PREPEND, File.pathSeparator);
if (envVars == null) { if (envVars == null) {
envVars = new IEnvironmentVariable[] { pathVar }; envVars = new IEnvironmentVariable[] { pathVar };

View file

@ -99,5 +99,9 @@
class="org.eclipse.cdt.arduino.core.internal.build.ArduinoToolChainProvider" class="org.eclipse.cdt.arduino.core.internal.build.ArduinoToolChainProvider"
id="org.eclipse.cdt.arduino.core.toolChainProvider"> id="org.eclipse.cdt.arduino.core.toolChainProvider">
</provider> </provider>
<type
id="org.eclipse.cdt.arduino"
name="Arduino">
</type>
</extension> </extension>
</plugin> </plugin>

View file

@ -16,6 +16,7 @@ public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.cdt.arduino.core.internal.messages"; //$NON-NLS-1$ private static final String BUNDLE_NAME = "org.eclipse.cdt.arduino.core.internal.messages"; //$NON-NLS-1$
public static String ArduinoBoardManager_0; public static String ArduinoBoardManager_0;
public static String ArduinoBoardManager_1; public static String ArduinoBoardManager_1;
public static String ArduinoBuildConfigurationProvider_UnknownConnection;
public static String ArduinoLaunchConfigurationDelegate_0; public static String ArduinoLaunchConfigurationDelegate_0;
public static String ArduinoLaunchConfigurationDelegate_1; public static String ArduinoLaunchConfigurationDelegate_1;
public static String ArduinoLaunchConfigurationDelegate_2; public static String ArduinoLaunchConfigurationDelegate_2;

View file

@ -201,7 +201,7 @@ public class ArduinoBuildConfiguration extends CBuildConfiguration
// Menus // Menus
HierarchicalProperties menus = board.getMenus(); HierarchicalProperties menus = board.getMenus();
if (menus != null) { if (menus != null && target != null) {
for (Entry<String, HierarchicalProperties> menuEntry : menus.getChildren().entrySet()) { for (Entry<String, HierarchicalProperties> menuEntry : menus.getChildren().entrySet()) {
String key = menuEntry.getKey(); String key = menuEntry.getKey();
String value = target.getMenuValue(key); String value = target.getMenuValue(key);

View file

@ -10,6 +10,7 @@ package org.eclipse.cdt.arduino.core.internal.build;
import java.util.Collection; import java.util.Collection;
import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.cdt.arduino.core.internal.Messages;
import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard; import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard;
import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager;
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection; import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection;
@ -52,7 +53,7 @@ public class ArduinoBuildConfigurationProvider implements ICBuildConfigurationPr
} }
} }
if (board != null) { if (board != null) {
IToolChain toolChain = createToolChain(config); IToolChain toolChain = createToolChain("default"); //$NON-NLS-1$
return new ArduinoBuildConfiguration(config, name, "run", board, toolChain); //$NON-NLS-1$ return new ArduinoBuildConfiguration(config, name, "run", board, toolChain); //$NON-NLS-1$
} }
} else { } else {
@ -60,12 +61,12 @@ public class ArduinoBuildConfigurationProvider implements ICBuildConfigurationPr
IRemoteConnectionType connectionType = remoteManager.getConnectionType(ArduinoRemoteConnection.TYPE_ID); IRemoteConnectionType connectionType = remoteManager.getConnectionType(ArduinoRemoteConnection.TYPE_ID);
IRemoteConnection connection = connectionType.getConnection(name); IRemoteConnection connection = connectionType.getConnection(name);
if (connection == null) { if (connection == null) {
throw Activator.coreException(String.format("Unknown connection: %s", name), null); throw Activator.coreException(String.format(Messages.ArduinoBuildConfigurationProvider_UnknownConnection, name), null);
} }
ArduinoRemoteConnection target = connection.getService(ArduinoRemoteConnection.class); ArduinoRemoteConnection target = connection.getService(ArduinoRemoteConnection.class);
if (target != null) { if (target != null) {
IToolChain toolChain = createToolChain(config); IToolChain toolChain = createToolChain(connection.getName());
return new ArduinoBuildConfiguration(config, name, "run", target, toolChain); //$NON-NLS-1$ return new ArduinoBuildConfiguration(config, name, "run", target, toolChain); //$NON-NLS-1$
} }
} }
@ -88,17 +89,22 @@ public class ArduinoBuildConfigurationProvider implements ICBuildConfigurationPr
// Make a new one // Make a new one
String configName = target.getRemoteConnection().getName(); String configName = target.getRemoteConnection().getName();
IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, monitor); IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName, monitor);
IToolChain toolChain = createToolChain(config); IToolChain toolChain = createToolChain(configName);
ArduinoBuildConfiguration arduinoConfig = new ArduinoBuildConfiguration(config, configName, "run", target, //$NON-NLS-1$ ArduinoBuildConfiguration arduinoConfig = new ArduinoBuildConfiguration(config, configName, "run", target, //$NON-NLS-1$
toolChain); toolChain);
configManager.addBuildConfiguration(config, arduinoConfig); configManager.addBuildConfiguration(config, arduinoConfig);
return arduinoConfig; return arduinoConfig;
} }
private IToolChain createToolChain(IBuildConfiguration config) throws CoreException { private IToolChain createToolChain(String id) throws CoreException {
IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class); IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class);
IToolChain toolChain = toolChainManager.getToolChain(ArduinoToolChain.TYPE_ID, id);
if (toolChain != null) {
return toolChain;
}
IToolChainProvider provider = toolChainManager.getProvider(ArduinoToolChainProvider.ID); IToolChainProvider provider = toolChainManager.getProvider(ArduinoToolChainProvider.ID);
IToolChain toolChain = new ArduinoToolChain(provider, config); toolChain = new ArduinoToolChain(provider, id);
toolChainManager.addToolChain(toolChain); toolChainManager.addToolChain(toolChain);
return toolChain; return toolChain;
} }

View file

@ -1,19 +1,34 @@
package org.eclipse.cdt.arduino.core.internal.build; package org.eclipse.cdt.arduino.core.internal.build;
import java.nio.file.Path;
import org.eclipse.cdt.build.gcc.core.GCCToolChain; import org.eclipse.cdt.build.gcc.core.GCCToolChain;
import org.eclipse.cdt.core.build.IToolChain; import org.eclipse.cdt.core.build.IToolChain;
import org.eclipse.cdt.core.build.IToolChainProvider; import org.eclipse.cdt.core.build.IToolChainProvider;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.runtime.CoreException;
public class ArduinoToolChain extends GCCToolChain { public class ArduinoToolChain extends GCCToolChain {
ArduinoToolChain(IToolChainProvider provider, IBuildConfiguration config) throws CoreException { public static final String TYPE_ID = "org.eclipse.cdt.arduino"; //$NON-NLS-1$
super(provider, config.getProject().getName() + '#' + config.getName(), ""); //$NON-NLS-1$ private final String id;
public ArduinoToolChain(IToolChainProvider provider, String id) {
super(provider, (Path) null, "arduino", null); //$NON-NLS-1$
this.id = id;
} }
public ArduinoToolChain(IToolChainProvider provider, String id, String version) { @Override
super(provider, id, version); public String getTypeId() {
return TYPE_ID;
}
@Override
public String getId() {
return id;
}
@Override
public String getName() {
return id;
} }
@Override @Override
@ -22,7 +37,7 @@ public class ArduinoToolChain extends GCCToolChain {
if (key.equals(IToolChain.ATTR_OS)) { if (key.equals(IToolChain.ATTR_OS)) {
return "arduino"; //$NON-NLS-1$ return "arduino"; //$NON-NLS-1$
} else { } else {
return null; return super.getProperty(key);
} }
} }

View file

@ -1,8 +1,6 @@
package org.eclipse.cdt.arduino.core.internal.build; package org.eclipse.cdt.arduino.core.internal.build;
import org.eclipse.cdt.core.build.IToolChain;
import org.eclipse.cdt.core.build.IToolChainProvider; import org.eclipse.cdt.core.build.IToolChainProvider;
import org.eclipse.core.runtime.CoreException;
public class ArduinoToolChainProvider implements IToolChainProvider { public class ArduinoToolChainProvider implements IToolChainProvider {
@ -13,9 +11,4 @@ public class ArduinoToolChainProvider implements IToolChainProvider {
return ID; return ID;
} }
@Override
public IToolChain getToolChain(String id, String version) throws CoreException {
return new ArduinoToolChain(this, id, version);
}
} }

View file

@ -7,6 +7,7 @@
################################################################################ ################################################################################
ArduinoBoardManager_0=Fetching package index ArduinoBoardManager_0=Fetching package index
ArduinoBoardManager_1=Package index missing from response ArduinoBoardManager_1=Package index missing from response
ArduinoBuildConfigurationProvider_UnknownConnection=Unknown connection: %s
ArduinoLaunchConfigurationDelegate_1=No active Arduino remote connection. ArduinoLaunchConfigurationDelegate_1=No active Arduino remote connection.
ArduinoLaunchConfigurationDelegate_0=Arduino Launch ArduinoLaunchConfigurationDelegate_0=Arduino Launch
ArduinoLaunchConfigurationDelegate_2=Target has not been selected for Launch Configuration ArduinoLaunchConfigurationDelegate_2=Target has not been selected for Launch Configuration

View file

@ -1,5 +1,5 @@
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
SHELL = $(ComSpec) SHELL = cmd
RMDIR = rmdir /s /q RMDIR = rmdir /s /q
RM = del /q RM = del /q
mymkdir = if not exist "$1" mkdir "$1" mymkdir = if not exist "$1" mkdir "$1"