diff options
author | Marc-Andre Laperle | 2013-10-09 04:21:36 +0000 |
---|---|---|
committer | Marc-Andre Laperle | 2013-10-16 05:01:43 +0000 |
commit | c644a857ba56c32171d4f5a738e19aea858f7faf (patch) | |
tree | 05025518cce17acc3f2857dd9c3523b3ce753ba6 | |
parent | 35b004c5d48eff490a097a80530fea2bbe06ea81 (diff) | |
download | org.eclipse.cdt-c644a857ba56c32171d4f5a738e19aea858f7faf.tar.gz org.eclipse.cdt-c644a857ba56c32171d4f5a738e19aea858f7faf.tar.xz org.eclipse.cdt-c644a857ba56c32171d4f5a738e19aea858f7faf.zip |
Bug 392404 - Change Cross GCC toolchain to use language setting provider
Add cross toolchain prefix to the command macro.
Change-Id: I3188d21050b84fdc6d6a4b8d3b6aa540710f1790
Signed-off-by: Marc-Andre Laperle <marc-andre.laperle@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/17189
4 files changed, 56 insertions, 71 deletions
diff --git a/cross/org.eclipse.cdt.build.crossgcc/plugin.properties b/cross/org.eclipse.cdt.build.crossgcc/plugin.properties index 044e4f27e59..8653e2d91b8 100644 --- a/cross/org.eclipse.cdt.build.crossgcc/plugin.properties +++ b/cross/org.eclipse.cdt.build.crossgcc/plugin.properties @@ -22,4 +22,5 @@ tool.gpp.compiler = Cross G++ Compiler tool.gcc.linker = Cross GCC Linker tool.gpp.linker = Cross G++ Linker tool.gcc.archiver = Cross GCC Archiver -tool.gcc.assembler = Cross GCC Assembler
\ No newline at end of file +tool.gcc.assembler = Cross GCC Assembler +CrossGCCBuiltinSpecsDetector.name = CDT Cross GCC Built-in Compiler Settings
\ No newline at end of file diff --git a/cross/org.eclipse.cdt.build.crossgcc/plugin.xml b/cross/org.eclipse.cdt.build.crossgcc/plugin.xml index e8ad4b0b327..5d694351081 100644 --- a/cross/org.eclipse.cdt.build.crossgcc/plugin.xml +++ b/cross/org.eclipse.cdt.build.crossgcc/plugin.xml @@ -23,9 +23,10 @@ configurationEnvironmentSupplier="org.eclipse.cdt.internal.build.crossgcc.CrossEnvironmentVariableSupplier" id="cdt.managedbuild.toolchain.gnu.cross.base" isAbstract="false" + languageSettingsProviders="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser;org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" name="%toolChain.name" - targetTool="cdt.managedbuild.tool.gnu.cross.c.linker;cdt.managedbuild.tool.gnu.cross.cpp.linker;cdt.managedbuild.tool.gnu.archiver" - osList="all"> + osList="all" + targetTool="cdt.managedbuild.tool.gnu.cross.c.linker;cdt.managedbuild.tool.gnu.cross.cpp.linker;cdt.managedbuild.tool.gnu.archiver"> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" @@ -257,4 +258,16 @@ </toolchain> </wizardPage> </extension> + <extension + point="org.eclipse.cdt.core.LanguageSettingsProvider"> + <provider + class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" + id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" + name="%CrossGCCBuiltinSpecsDetector.name" + parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" + prefer-non-shared="true"> + <language-scope id="org.eclipse.cdt.core.gcc"/> + <language-scope id="org.eclipse.cdt.core.g++"/> + </provider> + </extension> </plugin> diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossGCCBuiltinSpecsDetector.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossGCCBuiltinSpecsDetector.java new file mode 100644 index 00000000000..fc26b62374f --- /dev/null +++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/CrossGCCBuiltinSpecsDetector.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2013 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Marc-Andre Laperle (Ericsson) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.cdt.internal.build.crossgcc; + +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.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector; + +public class CrossGCCBuiltinSpecsDetector extends GCCBuiltinSpecsDetector { + + @Override + protected String getCompilerCommand(String languageId) { + // Include the cross command prefix (tool option) in the ${COMMAND} macro + // For example: "arch-os-" + "gcc" + String prefix = ""; + IToolChain toolchain = null; + if (currentCfgDescription != null) { + IConfiguration cfg = ManagedBuildManager.getConfigurationForDescription(currentCfgDescription); + toolchain = cfg != null ? cfg.getToolChain() : null; + if (toolchain != null) { + IOption option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.prefix"); //$NON-NLS-1$ + prefix = (String)option.getValue(); + } + } + return prefix + super.getCompilerCommand(languageId); + } +} diff --git a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/SetCrossCommandOperation.java b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/SetCrossCommandOperation.java index 3599872230e..89aaf7d8f6a 100644 --- a/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/SetCrossCommandOperation.java +++ b/cross/org.eclipse.cdt.build.crossgcc/src/org/eclipse/cdt/internal/build/crossgcc/SetCrossCommandOperation.java @@ -1,5 +1,5 @@ /*******************************************************************************
- * Copyright (c) 2009, 2012 Wind River Systems, Inc. and others.
+ * Copyright (c) 2009, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,22 +11,8 @@ *******************************************************************************/
package org.eclipse.cdt.internal.build.crossgcc;
import java.lang.reflect.InvocationTargetException;
-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.core.scannerconfig.ScannerConfigBuilder;
-import org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManager;
-import org.eclipse.cdt.build.internal.core.scannerconfig2.CfgScannerConfigProfileManager;
import org.eclipse.cdt.core.templateengine.SharedDefaults;
-import org.eclipse.cdt.make.core.scannerconfig.IScannerConfigBuilderInfo2;
-import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector;
-import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollectorCleaner;
-import org.eclipse.cdt.make.core.scannerconfig.InfoContext;
-import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredPathInfo;
-import org.eclipse.cdt.make.internal.core.scannerconfig.DiscoveredScannerInfoStore;
-import org.eclipse.cdt.make.internal.core.scannerconfig2.SCProfileInstance;
-import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfileManager;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.core.IOption;
@@ -35,9 +21,7 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.ui.wizards.MBSCustomPageManager;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
/**
@@ -74,60 +58,9 @@ public class SetCrossCommandOperation implements IRunnableWithProgress { ManagedBuildManager.setOption(config, toolchain, option, prefix);
option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.path"); //$NON-NLS-1$
ManagedBuildManager.setOption(config, toolchain, option, path);
-
- ICfgScannerConfigBuilderInfo2Set cbi = CfgScannerConfigProfileManager.getCfgScannerConfigBuildInfo(config);
- Map<CfgInfoContext, IScannerConfigBuilderInfo2> map = cbi.getInfoMap();
- for (CfgInfoContext cfgInfoContext : map.keySet()) {
- IScannerConfigBuilderInfo2 bi = map.get(cfgInfoContext);
- String providerId = "specsFile"; //$NON-NLS-1$
- String runCommand = bi.getProviderRunCommand(providerId);
- bi.setProviderRunCommand(providerId, prefix + runCommand);
- try {
- bi.save();
- } catch (CoreException e) {
- Activator.log(e);
- }
-
- // Clear the path info that was captured at project creation time
- // TODO we need an API to do this to avoid the discouraged access warnings.
-
- DiscoveredPathInfo pathInfo = new DiscoveredPathInfo(project);
- InfoContext infoContext = cfgInfoContext.toInfoContext();
-
- // 1. Remove scanner info from .metadata/.plugins/org.eclipse.cdt.make.core/Project.sc
- DiscoveredScannerInfoStore dsiStore = DiscoveredScannerInfoStore.getInstance();
- try {
- dsiStore.saveDiscoveredScannerInfoToState(project, infoContext, pathInfo);
- } catch (CoreException e) {
- e.printStackTrace();
- }
-
- // 2. Remove scanner info from CfgDiscoveredPathManager cache and from the Tool
- CfgDiscoveredPathManager cdpManager = CfgDiscoveredPathManager.getInstance();
- cdpManager.removeDiscoveredInfo(project, cfgInfoContext);
-
- // 3. Remove scanner info from SI collector
- IScannerConfigBuilderInfo2 buildInfo2 = map.get(cfgInfoContext);
- if (buildInfo2!=null) {
- ScannerConfigProfileManager scpManager = ScannerConfigProfileManager.getInstance();
- String selectedProfileId = buildInfo2.getSelectedProfileId();
- SCProfileInstance profileInstance = scpManager.getSCProfileInstance(project, infoContext, selectedProfileId);
-
- IScannerInfoCollector collector = profileInstance.getScannerInfoCollector();
- if (collector instanceof IScannerInfoCollectorCleaner) {
- ((IScannerInfoCollectorCleaner) collector).deleteAll(project);
- }
- buildInfo2 = null;
- }
- }
}
ManagedBuildManager.saveBuildInfo(project, true);
-
- for (IConfiguration config : configs) {
- ScannerConfigBuilder.build(config, ScannerConfigBuilder.PERFORM_CORE_UPDATE, new NullProgressMonitor());
- }
-
}
}
|