summaryrefslogtreecommitdiffstats
path: root/org.rtems.cdt.toolchain/src/org/rtems/cdt/toolchain/RtemsCommandLineGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.rtems.cdt.toolchain/src/org/rtems/cdt/toolchain/RtemsCommandLineGenerator.java')
-rw-r--r--org.rtems.cdt.toolchain/src/org/rtems/cdt/toolchain/RtemsCommandLineGenerator.java89
1 files changed, 89 insertions, 0 deletions
diff --git a/org.rtems.cdt.toolchain/src/org/rtems/cdt/toolchain/RtemsCommandLineGenerator.java b/org.rtems.cdt.toolchain/src/org/rtems/cdt/toolchain/RtemsCommandLineGenerator.java
new file mode 100644
index 0000000..1e52f85
--- /dev/null
+++ b/org.rtems.cdt.toolchain/src/org/rtems/cdt/toolchain/RtemsCommandLineGenerator.java
@@ -0,0 +1,89 @@
+package org.rtems.cdt.toolchain;
+
+import java.util.HashMap;
+
+import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator;
+import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
+import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedCommandLineGenerator;
+
+public class RtemsCommandLineGenerator extends ManagedCommandLineGenerator
+ implements IManagedCommandLineGenerator {
+
+ public static final String ENV_RTEMS_TOOLSET = "RTEMS_TOOLSET";
+
+ public static final String TOOL_AR = "ar";
+ public static final String TOOL_AS = "as";
+ public static final String TOOL_GCC = "gcc";
+ public static final String TOOL_GPP = "g++";
+
+ private static final String DEFAULT_RTEMS_TOOLSET =
+ "i386-rtems4.9-ar, i386-rtems4.9-as, i386-rtems4.9-gcc, i386-rtems4.9-g++";
+
+ private static HashMap<String, String> toolCmdMap = new HashMap<String, String>(10);
+ private String toolName;
+
+ static {
+ String toolset = System.getenv(ENV_RTEMS_TOOLSET);
+ if (toolset==null) toolset = DEFAULT_RTEMS_TOOLSET;
+
+ String[] tool = toolset.split(",");
+ for (int i=0; i<tool.length; i++) {
+ String cmd = tool[i].trim();
+
+ if (cmd.endsWith(TOOL_AR)) toolCmdMap.put(TOOL_AR, cmd);
+ else if (cmd.endsWith(TOOL_AS)) toolCmdMap.put(TOOL_AS, cmd);
+ else if (cmd.endsWith(TOOL_GCC)) toolCmdMap.put(TOOL_GCC, cmd);
+ else if (cmd.endsWith(TOOL_GPP)) toolCmdMap.put(TOOL_GPP, cmd);
+ }
+ }
+
+ public RtemsCommandLineGenerator() {
+ }
+
+ public IManagedCommandLineInfo generateCommandLineInfo(ITool tool,
+ String commandName, String[] flags, String outputFlag, String outputPrefix,
+ String outputName, String[] inputResources, String commandLinePattern ) {
+
+ boolean isLinker = false;
+ String cmdName = commandName;
+ String toolId = tool.getId();
+
+ if (toolId.contains("gnu.archiver")) {
+ cmdName = toolCmdMap.get(TOOL_AR);
+
+ } else if (toolId.contains("gnu.assembler")) {
+ cmdName = toolCmdMap.get(TOOL_AS);
+
+ } else if (toolId.contains("gnu.c.compiler")) {
+ cmdName = toolCmdMap.get(TOOL_GCC);
+
+ } else if (toolId.contains("gnu.c.linker")) {
+ cmdName = toolCmdMap.get(TOOL_GCC);
+ isLinker = true;
+
+ } else if (toolId.contains("gnu.cpp.compiler")) {
+ cmdName = toolCmdMap.get(TOOL_GPP);
+
+ } else if (toolId.contains("gnu.cpp.linker")) {
+ cmdName = toolCmdMap.get(TOOL_GPP);
+ isLinker = true;
+ }
+
+ tool.setToolCommand(cmdName);
+
+ IManagedCommandLineInfo cmdLineInfo = super.generateCommandLineInfo(tool,
+ cmdName, flags, outputFlag, outputPrefix,
+ outputName, inputResources, commandLinePattern);
+ if (isLinker){
+ RtemsLinkCommandLineInfo rtemsCmdLineInfo = new RtemsLinkCommandLineInfo(
+ cmdLineInfo.getCommandLine(), cmdLineInfo.getCommandLinePattern(),
+ cmdLineInfo.getCommandName(), cmdLineInfo.getFlags(),
+ cmdLineInfo.getOutputFlag(), cmdLineInfo.getOutputPrefix(),
+ cmdLineInfo.getOutput(), cmdLineInfo.getInputs() );
+
+ return rtemsCmdLineInfo;
+
+ } else return cmdLineInfo;
+ }
+}