diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2008-11-27 15:50:54 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2008-11-27 15:50:54 +0000 |
commit | 30b6dbb56d6ab5be46e668904afa8aa3eaa7f124 (patch) | |
tree | 03ed1c9726c77a7838de7064b5eb5588d2572849 /org.rtems.cdt.toolchain2 | |
parent | Removed debug output. (diff) | |
download | rtems-eclipse-plug-in-30b6dbb56d6ab5be46e668904afa8aa3eaa7f124.tar.bz2 |
Added build macro and environment suppliers.
Added run scanner info provider.
Diffstat (limited to 'org.rtems.cdt.toolchain2')
10 files changed, 277 insertions, 38 deletions
diff --git a/org.rtems.cdt.toolchain2/META-INF/MANIFEST.MF b/org.rtems.cdt.toolchain2/META-INF/MANIFEST.MF index 7e619b3..68542fa 100644 --- a/org.rtems.cdt.toolchain2/META-INF/MANIFEST.MF +++ b/org.rtems.cdt.toolchain2/META-INF/MANIFEST.MF @@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.cdt.managedbuilder.core, org.eclipse.core.resources, org.eclipse.cdt.ui, org.eclipse.core.runtime, - org.eclipse.cdt.managedbuilder.ui + org.eclipse.cdt.managedbuilder.ui, + org.eclipse.cdt.core Bundle-Vendor: Embedded Brains GmbH Import-Package: org.eclipse.cdt.core.model, org.eclipse.cdt.managedbuilder.ui.wizards, diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java index 8d71d7e..c7da65b 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java @@ -18,8 +18,8 @@ public class Constants { {"AVR", "avr"}, {"Blackfin", "bfin"}, {"Hitachi H8300", "h8300"}, - {"Intel i386", "i368"}, - {"Intel i686", "i668"}, + {"Intel i386", "i386"}, + {"Intel i686", "i686"}, {"MIPS", "mips"}, {"Motorola 68k or Freescale ColdFire", "m68k"}, {"PowerPC", "powerpc"}, @@ -47,6 +47,18 @@ public class Constants { public static final String BSP_PATH_KEY = "org.rtems.cdt.key.bspPath"; + public static final String VERSION_MACRO_NAME = "ORG_RTEMS_CDT_VERSION"; + + public static final String TARGET_MACRO_NAME = "ORG_RTEMS_CDT_TARGET"; + + private static int mCounter = 0; + + public static String getCounter() { + ++mCounter; + return String.valueOf( mCounter); + } + + private Constants() { // Do nothing } diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/PropertyExpander.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/PropertyExpander.java new file mode 100644 index 0000000..3857b5a --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/PropertyExpander.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt; + +import java.util.Map; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +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.model.CoreModel; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.make.core.MakeCorePlugin; +import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; + +public class PropertyExpander { + private static final String BUILD_INFO_PROVIDER_ID = "specsFile"; + + public static void expand( IProject project) { + String basePath = Storage.getProperty( project, Constants.BASE_PATH_KEY); + String version = Storage.getProperty( project, Constants.VERSION_KEY); + String target = Storage.getProperty( project, Constants.TARGET_KEY); + String bspPath = Storage.getProperty( project, Constants.BSP_PATH_KEY); + + + ICProjectDescription pd = CoreModel.getDefault().getProjectDescription( project); + ICConfigurationDescription cd = pd.getActiveConfiguration(); + IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(cd); + + // Scanner configuration discovery. + ICfgScannerConfigBuilderInfo2Set cbi = + CfgScannerConfigProfileManager.getCfgScannerConfigBuildInfo(cfg); + Map<CfgInfoContext, IScannerConfigBuilderInfo2> infoMap = cbi.getInfoMap(); + for (CfgInfoContext infoContext : infoMap.keySet()) { + IScannerConfigBuilderInfo2 buildInfo = cbi.getInfo(infoContext); + buildInfo.setProviderRunCommand(BUILD_INFO_PROVIDER_ID, target + "-rtems" + version + "-gcc"); + try { + buildInfo.save(); + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + MakeCorePlugin.getDefault().getDiscoveryManager().removeDiscoveredInfo(project); + } + + private PropertyExpander() { + // Do nothing + } +} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java index d3684ef..f4d247b 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java @@ -18,21 +18,26 @@ import org.eclipse.core.runtime.QualifiedName; import org.rtems.cdt.Activator; public class Storage { - public static String getProperty( IProject project, String key) { + public static String getPristineProperty( IProject project, String key) { String value = null; + try { value = project.getPersistentProperty( new QualifiedName( "", key)); } catch (CoreException e) { e.printStackTrace(); } + + return value; + } + + public static String getProperty( IProject project, String key) { + String value = getPristineProperty( project, key); + if (value == null) { value = Activator.getDefault().getPreferenceStore().getString( key); - try { - project.setPersistentProperty( new QualifiedName( "", key), value); - } catch (CoreException e) { - e.printStackTrace(); - } + setProperty( project, key, value); } + return value; } diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java new file mode 100644 index 0000000..dd7e4bd --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import org.eclipse.core.resources.IProject; +import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable; +import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider; +import org.eclipse.cdt.managedbuilder.envvar.IProjectEnvironmentVariableSupplier; +import org.eclipse.cdt.managedbuilder.internal.envvar.BuildEnvVar; +import org.rtems.cdt.Constants; +import org.rtems.cdt.Storage; + +public class EnvironmentSupplier implements IProjectEnvironmentVariableSupplier { + private static final int VERSION_INDEX = 0; + + private static final int TARGET_INDEX = 1; + + private static final int MACRO_COUNT = 2; + + public EnvironmentSupplier() { + // Do nothing + } + + public IBuildEnvironmentVariable getVariable( String macroName, IManagedProject project, IEnvironmentVariableProvider provider) { + String value = null; + + if (macroName.equals( Constants.VERSION_MACRO_NAME)) { + value = Storage.getProperty( (IProject) project.getOwner(), Constants.VERSION_KEY); + } else if (macroName.equals( Constants.TARGET_MACRO_NAME)) { + value = Storage.getProperty( (IProject) project.getOwner(), Constants.TARGET_KEY); + } + + if (value != null) { + // System.out.println( Constants.getCounter() + ": getVariable: " + macroName + ": " + value); + return new BuildEnvVar( macroName, value); + } else { + return null; + } + } + + public IBuildEnvironmentVariable [] getVariables( IManagedProject project, IEnvironmentVariableProvider provider) { + IBuildEnvironmentVariable variables [] = new IBuildEnvironmentVariable [MACRO_COUNT]; + + // System.out.println( Constants.getCounter() + ": getVariables"); + + variables [VERSION_INDEX] = getVariable( Constants.VERSION_MACRO_NAME, project, provider); + + variables [TARGET_INDEX] = getVariable( Constants.TARGET_MACRO_NAME, project, provider); + + return variables; + } +}
\ No newline at end of file diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/MacroSupplier.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/MacroSupplier.java new file mode 100644 index 0000000..c07cb07 --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/MacroSupplier.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import org.eclipse.core.resources.IProject; +import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacro; +import org.eclipse.cdt.managedbuilder.macros.IBuildMacro; +import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider; +import org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier; +import org.rtems.cdt.Constants; +import org.rtems.cdt.Storage; + +public class MacroSupplier implements IProjectBuildMacroSupplier { + private static final int VERSION_INDEX = 0; + + private static final int TARGET_INDEX = 1; + + private static final int MACRO_COUNT = 2; + + public MacroSupplier() { + // Do nothing + } + + public IBuildMacro getMacro( String macroName, IManagedProject project, IBuildMacroProvider provider) { + String value = null; + + if (macroName.equals( Constants.VERSION_MACRO_NAME)) { + value = Storage.getProperty( (IProject) project.getOwner(), Constants.VERSION_KEY); + } else if (macroName.equals( Constants.TARGET_MACRO_NAME)) { + value = Storage.getProperty( (IProject) project.getOwner(), Constants.TARGET_KEY); + } + + if (value != null) { + // System.out.println( Constants.getCounter() + ": getMacro: " + macroName + ": " + value); + return new BuildMacro( macroName, IBuildMacro.VALUE_TEXT, value); + } else { + return null; + } + } + + public IBuildMacro [] getMacros( IManagedProject project, IBuildMacroProvider provider) { + IBuildMacro macros [] = new IBuildMacro [MACRO_COUNT]; + + // System.out.println( Constants.getCounter() + ": getMacros"); + + macros [VERSION_INDEX] = getMacro( Constants.VERSION_MACRO_NAME, project, provider); + + macros [TARGET_INDEX] = getMacro( Constants.TARGET_MACRO_NAME, project, provider); + + return macros; + } +} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java new file mode 100644 index 0000000..4926c13 --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.Path; +import org.rtems.cdt.Constants; +import org.rtems.cdt.Storage; + +public class RunScannerInfoProvider extends GCCSpecsRunSIProvider { + protected boolean initialize() { + if (!super.initialize()) { + return false; + } + + IProject project = resource.getProject(); + + fCompileCommand = new Path( + Storage.getProperty( project, Constants.TARGET_KEY) + + "-rtems" + + Storage.getProperty( project, Constants.VERSION_KEY) + + "-gcc" + ); + + return true; + } +} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java index 9eeb1e4..59d8d90 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java @@ -14,6 +14,7 @@ package org.rtems.cdt.properties; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.ComboFieldEditor; @@ -22,6 +23,9 @@ import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.ui.IWorkbenchPropertyPage; import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.make.core.MakeCorePlugin; +import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredScannerInfoSerializable; +import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredScannerInfoStore; import org.rtems.cdt.Activator; import org.rtems.cdt.Constants; import org.rtems.cdt.Storage; diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java index 2e21e3e..1a88300 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java @@ -12,12 +12,13 @@ package org.rtems.cdt.wizards; + import org.eclipse.cdt.managedbuilder.ui.wizards.*; import org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard; import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.QualifiedName; import org.eclipse.jface.wizard.IWizardPage; +import org.rtems.cdt.PropertyExpander; +import org.rtems.cdt.Storage; public class FinishSetup implements Runnable { public void run() { @@ -31,14 +32,7 @@ public class FinishSetup implements Runnable { if (pages != null && pages.length > 0) { CDTCommonProjectWizard wizard = (CDTCommonProjectWizard) pages [0].getWizard(); IProject project = wizard.getLastProject(); - try { - project.setPersistentProperty( - new QualifiedName( "", "XXXxxxXXX"), - installationPath - ); - } catch (CoreException e) { - e.printStackTrace(); - } + //PropertyExpander.expand( project); } System.out.println( installationPath); System.out.println( version); diff --git a/org.rtems.cdt.toolchain2/plugin.xml b/org.rtems.cdt.toolchain2/plugin.xml index e2787f6..87c41b0 100644 --- a/org.rtems.cdt.toolchain2/plugin.xml +++ b/org.rtems.cdt.toolchain2/plugin.xml @@ -27,8 +27,7 @@ <scannerInfoProvider providerId="specsFile"> <run arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" - command="powerpc-rtems4.10-gcc" - class="org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider"/> + class="org.rtems.cdt.build.RunScannerInfoProvider"/> <scannerInfoConsoleParser class="org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser"/> </scannerInfoProvider> </extension> @@ -46,8 +45,7 @@ <scannerInfoProvider providerId="specsFile"> <run arguments="-E -P -v -dD ${plugin_state_location}/specs.c" - command="powerpc-rtems4.10-gcc" - class="org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider"/> + class="org.rtems.cdt.build.RunScannerInfoProvider"/> <scannerInfoConsoleParser class="org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser"/> </scannerInfoProvider> </extension> @@ -65,8 +63,7 @@ <scannerInfoProvider providerId="specsFile"> <run arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" - command="powerpc-rtems4.10-g++" - class="org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider"/> + class="org.rtems.cdt.build.RunScannerInfoProvider"/> <scannerInfoConsoleParser class="org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser"/> </scannerInfoProvider> </extension> @@ -84,8 +81,7 @@ <scannerInfoProvider providerId="specsFile"> <run arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" - command="powerpc-rtems4.10-gcc" - class="org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider"/> + class="org.rtems.cdt.build.RunScannerInfoProvider"/> <scannerInfoConsoleParser class="org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser"/> </scannerInfoProvider> </extension> @@ -103,8 +99,7 @@ <scannerInfoProvider providerId="specsFile"> <run arguments="-E -P -v -dD ${plugin_state_location}/specs.c" - command="powerpc-rtems4.10-gcc" - class="org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider"/> + class="org.rtems.cdt.build.RunScannerInfoProvider"/> <scannerInfoConsoleParser class="org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser"/> </scannerInfoProvider> </extension> @@ -122,8 +117,7 @@ <scannerInfoProvider providerId="specsFile"> <run arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" - command="powerpc-rtems4.10-g++" - class="org.eclipse.cdt.make.internal.core.scannerconfig2.GCCSpecsRunSIProvider"/> + class="org.rtems.cdt.build.RunScannerInfoProvider"/> <scannerInfoConsoleParser class="org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCSpecsConsoleParser"/> </scannerInfoProvider> </extension> @@ -166,7 +160,7 @@ <tool id="org.rtems.cdt.c.compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler" - command="powerpc-rtems4.10-gcc"> + command="${ORG_RTEMS_CDT_TARGET}-rtems${ORG_RTEMS_CDT_VERSION}-gcc"> <inputType id="org.rtems.cdt.c.compiler.input" superClass="cdt.managedbuild.tool.gnu.c.compiler.input" @@ -175,7 +169,7 @@ <tool id="org.rtems.cdt.cpp.compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler" - command="powerpc-rtems4.10-g++"> + command="${ORG_RTEMS_CDT_TARGET}-rtems${ORG_RTEMS_CDT_VERSION}-g++"> <inputType id="org.rtems.cdt.cpp.compiler.input" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input" @@ -184,12 +178,12 @@ <tool id="org.rtems.cdt.assembler" superClass="cdt.managedbuild.tool.gnu.assembler" - command="powerpc-rtems4.10-as"> + command="${ORG_RTEMS_CDT_TARGET}-rtems${ORG_RTEMS_CDT_VERSION}-as"> </tool> <tool id="org.rtems.cdt.c.linker" superClass="cdt.managedbuild.tool.gnu.c.linker" - command="powerpc-rtems4.10-gcc"> + command="${ORG_RTEMS_CDT_TARGET}-rtems${ORG_RTEMS_CDT_VERSION}-gcc"> <enablement type="ALL"> <not> <checkBuildProperty @@ -201,7 +195,7 @@ <tool id="org.rtems.cdt.cpp.linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker" - command="powerpc-rtems4.10-g++"> + command="${ORG_RTEMS_CDT_TARGET}-rtems${ORG_RTEMS_CDT_VERSION}-g++"> <enablement type="ALL"> <not> <checkBuildProperty @@ -213,7 +207,7 @@ <tool id="org.rtems.cdt.archiver" superClass="cdt.managedbuild.tool.gnu.archiver" - command="powerpc-rtems4.10-ar"> + command="${ORG_RTEMS_CDT_TARGET}-rtems${ORG_RTEMS_CDT_VERSION}-ar"> <enablement type="ALL"> <checkBuildProperty property="org.eclipse.cdt.build.core.buildArtefactType" @@ -224,7 +218,9 @@ <projectType buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" id="org.rtems.cdt.project.exe" - name="RTEMS Executable"> + name="RTEMS Executable" + projectEnvironmentSupplier="org.rtems.cdt.build.EnvironmentSupplier" + projectMacroSupplier="org.rtems.cdt.build.MacroSupplier"> <configuration id="org.rtems.cdt.config.exe" name="RTEMS Executable Configuration" |