From 1042ed5f25a54495dd18079515e8b07b4c4d1bf2 Mon Sep 17 00:00:00 2001
From: Doug Schaefer
Date: Fri, 17 Apr 2009 19:15:56 +0000
Subject: gcc cross compiler integration plugin.
---
cross/org.eclipse.cdt.build.crossgcc/.classpath | 7 +
cross/org.eclipse.cdt.build.crossgcc/.project | 28 +++
.../.settings/org.eclipse.jdt.core.prefs | 8 +
.../META-INF/MANIFEST.MF | 13 ++
.../build.properties | 5 +
cross/org.eclipse.cdt.build.crossgcc/plugin.xml | 190 +++++++++++++++++++++
.../cdt/build/crossgcc/SetCrossCommandProcess.java | 66 +++++++
.../cdt/internal/build/crossgcc/Activator.java | 50 ++++++
.../build/crossgcc/CrossCommandLineGenerator.java | 24 +++
.../crossgcc/CrossEnvironmentVariableSupplier.java | 77 +++++++++
.../templates/setCrossCommand/template.xml | 33 ++++
11 files changed, 501 insertions(+)
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/.classpath
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/.project
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/.settings/org.eclipse.jdt.core.prefs
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/build.properties
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/plugin.xml
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/build/crossgcc/SetCrossCommandProcess.java
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/Activator.java
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossEnvironmentVariableSupplier.java
create mode 100755 cross/org.eclipse.cdt.build.crossgcc/templates/setCrossCommand/template.xml
(limited to 'cross/org.eclipse.cdt.build.crossgcc')
diff --git a/cross/org.eclipse.cdt.build.crossgcc/.classpath b/cross/org.eclipse.cdt.build.crossgcc/.classpath
new file mode 100755
index 00000000000..8a8f1668cdc
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/cross/org.eclipse.cdt.build.crossgcc/.project b/cross/org.eclipse.cdt.build.crossgcc/.project
new file mode 100755
index 00000000000..2655c345209
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/.project
@@ -0,0 +1,28 @@
+
+
+ org.eclipse.cdt.build.crossgcc
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/cross/org.eclipse.cdt.build.crossgcc/.settings/org.eclipse.jdt.core.prefs b/cross/org.eclipse.cdt.build.crossgcc/.settings/org.eclipse.jdt.core.prefs
new file mode 100755
index 00000000000..f8e6bb76981
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Sun Mar 22 23:47:05 PDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF b/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF
new file mode 100755
index 00000000000..267961a006c
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Good
+Bundle-SymbolicName: org.eclipse.cdt.build.crossgcc;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Activator: org.eclipse.cdt.internal.build.crossgcc.Activator
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.cdt.managedbuilder.core;bundle-version="5.0.100",
+ org.eclipse.cdt.managedbuilder.gnu.ui;bundle-version="5.0.100",
+ org.eclipse.cdt.core;bundle-version="5.1.0",
+ org.eclipse.core.resources;bundle-version="3.5.0"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
diff --git a/cross/org.eclipse.cdt.build.crossgcc/build.properties b/cross/org.eclipse.cdt.build.crossgcc/build.properties
new file mode 100755
index 00000000000..6f20375d6c7
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/cross/org.eclipse.cdt.build.crossgcc/plugin.xml b/cross/org.eclipse.cdt.build.crossgcc/plugin.xml
new file mode 100755
index 00000000000..692cfb4aded
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/plugin.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/build/crossgcc/SetCrossCommandProcess.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/build/crossgcc/SetCrossCommandProcess.java
new file mode 100755
index 00000000000..efcec43f26e
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/build/crossgcc/SetCrossCommandProcess.java
@@ -0,0 +1,66 @@
+package org.eclipse.cdt.build.crossgcc;
+
+import java.util.Map;
+
+import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext;
+import org.eclipse.cdt.build.core.scannerconfig.ICfgScannerConfigBuilderInfo2Set;
+import org.eclipse.cdt.build.internal.core.scannerconfig2.CfgScannerConfigProfileManager;
+import org.eclipse.cdt.core.templateengine.TemplateCore;
+import org.eclipse.cdt.core.templateengine.process.ProcessArgument;
+import org.eclipse.cdt.core.templateengine.process.ProcessFailureException;
+import org.eclipse.cdt.core.templateengine.process.ProcessRunner;
+import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+public class SetCrossCommandProcess extends ProcessRunner {
+
+ @Override
+ public void process(TemplateCore template, ProcessArgument[] args,
+ String processId, IProgressMonitor monitor)
+ throws ProcessFailureException {
+ String projectName = args[0].getSimpleValue();
+ String prefix = args[1].getSimpleValue();
+ String path = args[2].getSimpleValue();
+
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+ if (!project.exists())
+ return;
+
+ IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(project);
+ if (buildInfo == null)
+ return;
+
+ IConfiguration[] configs = buildInfo.getManagedProject().getConfigurations();
+ for (IConfiguration config : configs) {
+ IToolChain toolchain = config.getToolChain();
+ IOption option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.prefix");
+ ManagedBuildManager.setOption(config, toolchain, option, prefix);
+ option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.path");
+ ManagedBuildManager.setOption(config, toolchain, option, path);
+
+ ICfgScannerConfigBuilderInfo2Set cbi = CfgScannerConfigProfileManager.getCfgScannerConfigBuildInfo(config);
+ Map map = cbi.getInfoMap();
+ IScannerConfigBuilderInfo2 bi = map.values().iterator().next();
+ String providerId = "specsFile";
+ String runCommand = bi.getProviderRunCommand(providerId);
+ bi.setProviderRunCommand(providerId, prefix + runCommand);
+ try {
+ bi.save();
+ } catch (CoreException e) {
+ throw new ProcessFailureException(e);
+ }
+ }
+
+ ManagedBuildManager.saveBuildInfo(project, true);
+
+ }
+
+}
diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/Activator.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/Activator.java
new file mode 100755
index 00000000000..b5085295619
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/Activator.java
@@ -0,0 +1,50 @@
+package org.eclipse.cdt.internal.build.crossgcc;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "tut.cross.good";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java
new file mode 100755
index 00000000000..c64fd7bd986
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossCommandLineGenerator.java
@@ -0,0 +1,24 @@
+package org.eclipse.cdt.internal.build.crossgcc;
+
+import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
+import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedCommandLineGenerator;
+
+public class CrossCommandLineGenerator extends ManagedCommandLineGenerator {
+
+ @Override
+ public IManagedCommandLineInfo generateCommandLineInfo(ITool tool,
+ String commandName, String[] flags, String outputFlag,
+ String outputPrefix, String outputName, String[] inputResources,
+ String commandLinePattern) {
+ IToolChain toolchain = (IToolChain)tool.getParent();
+ IOption option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.prefix");
+ String prefix = (String)option.getValue();
+ String newCommandName = prefix + commandName;
+ return super.generateCommandLineInfo(tool, newCommandName, flags, outputFlag,
+ outputPrefix, outputName, inputResources, commandLinePattern);
+ }
+
+}
diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossEnvironmentVariableSupplier.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossEnvironmentVariableSupplier.java
new file mode 100755
index 00000000000..5317421ae59
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossEnvironmentVariableSupplier.java
@@ -0,0 +1,77 @@
+package org.eclipse.cdt.internal.build.crossgcc;
+
+import java.io.File;
+
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
+import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier;
+import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
+import org.eclipse.core.runtime.Platform;
+
+public class CrossEnvironmentVariableSupplier implements
+ IConfigurationEnvironmentVariableSupplier {
+
+ @Override
+ public IBuildEnvironmentVariable getVariable(String variableName,
+ IConfiguration configuration, IEnvironmentVariableProvider provider) {
+ if (PathEnvironmentVariable.isVar(variableName))
+ return PathEnvironmentVariable.create(configuration);
+ else
+ return null;
+ }
+
+ @Override
+ public IBuildEnvironmentVariable[] getVariables(
+ IConfiguration configuration, IEnvironmentVariableProvider provider) {
+ IBuildEnvironmentVariable path = PathEnvironmentVariable.create(configuration);
+ return path != null ? new IBuildEnvironmentVariable[] { path } : new IBuildEnvironmentVariable[0];
+ }
+
+ private static class PathEnvironmentVariable implements IBuildEnvironmentVariable {
+
+ public static String name = "PATH";
+
+ private File path;
+
+ private PathEnvironmentVariable(File path) {
+ this.path = path;
+ }
+
+ public static PathEnvironmentVariable create(IConfiguration configuration) {
+ IToolChain toolchain = configuration.getToolChain();
+ IOption option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.path");
+ String path = (String)option.getValue();
+ return new PathEnvironmentVariable(new File(path, "bin"));
+ }
+
+ public static boolean isVar(String name) {
+ // Windows has case insensitive env var names
+ return Platform.getOS().equals(Platform.OS_WIN32)
+ ? name.equalsIgnoreCase(PathEnvironmentVariable.name)
+ : name.equals(PathEnvironmentVariable.name);
+ }
+
+ @Override
+ public String getDelimiter() {
+ return Platform.getOS().equals(Platform.OS_WIN32) ? ";" : ":";
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public int getOperation() {
+ return IBuildEnvironmentVariable.ENVVAR_PREPEND;
+ }
+
+ @Override
+ public String getValue() {
+ return path.getAbsolutePath();
+ }
+
+ }
+}
diff --git a/cross/org.eclipse.cdt.build.crossgcc/templates/setCrossCommand/template.xml b/cross/org.eclipse.cdt.build.crossgcc/templates/setCrossCommand/template.xml
new file mode 100755
index 00000000000..cb46bdd59b0
--- /dev/null
+++ b/cross/org.eclipse.cdt.build.crossgcc/templates/setCrossCommand/template.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--
cgit v1.2.3