Skip to content

Commit

Permalink
The active Launch Target is now saved in the ICBuildConfiguration
Browse files Browse the repository at this point in the history
In addition to the active launch mode and toolchain, the active Launch
Target is now used to determine the Core Build Configuration
(ICBuildConfiguration).

The build output folder name now ends with the name of the Launch Target
(eg: cmake.debug.win32.x86_64.Local)

Addresses Issue: CDT CMake Improvements #1000, IDE-82683-REQ-016 Launch
Targets used in ICBuildConfiguration
  • Loading branch information
betamaxbandit committed Feb 5, 2025
1 parent 0fcf41a commit a98d721
Show file tree
Hide file tree
Showing 38 changed files with 546 additions and 199 deletions.
26 changes: 26 additions & 0 deletions NewAndNoteworthy/CHANGELOG-API.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,32 @@ Below is the detailed descriptions of API changes and mitigation efforts API con

## API Changes in CDT 12.0.

### org.eclipse.cdt.core.build
- Added method:
- org.eclipse.cdt.core.build.ICBuildConfigurationProvider.createBuildConfiguration(IProject, IToolChain, String, ILaunchTarget, IProgressMonitor)
- Removed method:
- org.eclipse.cdt.core.build.ICBuildConfigurationProvider.createBuildConfiguration(IProject, IToolChain, String, IProgressMonitor)

### org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration
- Added method:
- org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)
- Remove method:
- org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain, String)
- org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain)

### org.eclipse.cdt.debug.core
- Version bumped to 9.0.0
- Removed method (already deprecated):
- org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate.getBuildConfiguration(IProject, String, ILaunchTarget, IProgressMonitor)

### org.eclipse.launchbar.core.target
- Added method:
- org.eclipse.launchbar.core.target.ILaunchTargetManager.getLocalLaunchTarget()
- Added field:
- org.eclipse.launchbar.core.target.ILaunchTargetManager.localLaunchTargetId
- Added class:
- org.eclipse.launchbar.core.target.LaunchTargetUtils

### org.eclipse.cdt.cmake.core.properties refactored

A significant simplification to the CMake build properties was completed, this included removing some API that was not used.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.tools.templates.core;bundle-version="2.0.0",
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
org.eclipse.cdt.core;bundle-version="6.3.1",
org.eclipse.core.resources;bundle-version="3.12.0"
org.eclipse.core.resources;bundle-version="3.12.0",
org.eclipse.launchbar.core
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.launchbar.core.target.ILaunchTarget;

public class AutotoolsBuildConfiguration extends CBuildConfiguration {

Expand All @@ -46,13 +47,9 @@ public AutotoolsBuildConfiguration(IBuildConfiguration config, String name) thro
super(config, name);
}

public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
super(config, name, toolChain, "run"); // TODO: why "run" //$NON-NLS-1$
}

public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
String launchMode) {
super(config, name, toolChain, launchMode);
public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, String launchMode,
ILaunchTarget launchTarget) throws CoreException {
super(config, name, toolChain, launchMode, launchTarget);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,16 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.eclipse.launchbar.core.target.LaunchTargetUtils;

public class AutotoolsBuildConfigurationProvider implements ICBuildConfigurationProvider {

public static final String ID = Activator.PLUGIN_ID + ".provider"; //$NON-NLS-1$

private ICBuildConfigurationManager configManager = Activator.getService(ICBuildConfigurationManager.class);
private final ILaunchTargetManager launchTargetManager = Activator.getService(ILaunchTargetManager.class);

@Override
public String getId() {
Expand Down Expand Up @@ -64,7 +68,8 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S
}

if (toolChain != null) {
return new AutotoolsBuildConfiguration(config, name, toolChain);
return new AutotoolsBuildConfiguration(config, name, toolChain, "run", //$NON-NLS-1$
launchTargetManager.getLocalLaunchTarget());
}
// No valid combinations
return null;
Expand All @@ -80,7 +85,7 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S

@Override
public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
IProgressMonitor monitor) throws CoreException {
ILaunchTarget launchTarget, IProgressMonitor monitor) throws CoreException {
// get matching toolchain file if any
Map<String, String> properties = new HashMap<>();
String os = toolChain.getProperty(IToolChain.ATTR_OS);
Expand Down Expand Up @@ -109,7 +114,11 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
configName.append('.');
configName.append(arch);
}
// Add Launch Target name
configName.append('.');
configName.append(LaunchTargetUtils.sanitizeName(launchTarget.getId()));
}

String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
Expand All @@ -123,7 +132,7 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
}

AutotoolsBuildConfiguration autotoolsConfig = new AutotoolsBuildConfiguration(config, name, toolChain,
launchMode);
launchMode, launchTarget);
configManager.addBuildConfiguration(config, autotoolsConfig);
return autotoolsConfig;
}
Expand Down
5 changes: 3 additions & 2 deletions build/org.eclipse.cdt.make.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.make.core; singleton:=true
Bundle-Version: 7.6.600.qualifier
Bundle-Version: 8.0.0.qualifier
Bundle-Activator: org.eclipse.cdt.make.core.MakeCorePlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Expand All @@ -26,7 +26,8 @@ Require-Bundle: org.eclipse.cdt.core;bundle-version="[9.0.0,10.0.0)",
org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.filesystem;bundle-version="1.2.0",
org.eclipse.tools.templates.core;bundle-version="2.0.0",
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0"
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
org.eclipse.launchbar.core;bundle-version="[3.0.0,4.0.0)"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-17
Automatic-Module-Name: org.eclipse.cdt.make.core
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,17 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.eclipse.launchbar.core.target.LaunchTargetUtils;

/**
* @since 7.4
*/
public class MakefileBuildConfigurationProvider implements ICBuildConfigurationProvider {

public static final String ID = "org.eclipse.cdt.make.core.provider"; //$NON-NLS-1$
private final ILaunchTargetManager launchTargetManager = MakeCorePlugin.getService(ILaunchTargetManager.class);

@Override
public String getId() {
Expand Down Expand Up @@ -61,7 +65,8 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S
}

if (toolChain != null) {
return new StandardBuildConfiguration(config, name, toolChain, "run"); //$NON-NLS-1$
return new StandardBuildConfiguration(config, name, toolChain, "run", //$NON-NLS-1$
launchTargetManager.getLocalLaunchTarget());
} else {
// No valid combinations
return null;
Expand All @@ -72,7 +77,7 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S

@Override
public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
IProgressMonitor monitor) throws CoreException {
ILaunchTarget launchTarget, IProgressMonitor monitor) throws CoreException {
ICBuildConfigurationManager configManager = MakeCorePlugin.getService(ICBuildConfigurationManager.class);

StringBuilder configName = new StringBuilder("make."); //$NON-NLS-1$
Expand All @@ -93,7 +98,11 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
configName.append('.');
configName.append(arch);
}
// Add Launch Target name
configName.append('.');
configName.append(LaunchTargetUtils.sanitizeName(launchTarget.getId()));
}

String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
Expand All @@ -105,7 +114,8 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
if (config == null) {
config = configManager.createBuildConfiguration(this, project, name, monitor);
}
StandardBuildConfiguration makeConfig = new StandardBuildConfiguration(config, name, toolChain, launchMode);
StandardBuildConfiguration makeConfig = new StandardBuildConfiguration(config, name, toolChain, launchMode,
launchTarget);
configManager.addBuildConfiguration(config, makeConfig);
return makeConfig;
}
Expand Down
3 changes: 2 additions & 1 deletion build/org.eclipse.cdt.meson.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.resources,
org.eclipse.cdt.core;bundle-version="6.4.0",
org.eclipse.tools.templates.core;bundle-version="2.0.0",
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0"
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
org.eclipse.launchbar.core
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;

Expand Down Expand Up @@ -71,13 +72,14 @@ public MesonBuildConfiguration(IBuildConfiguration config, String name) throws C
}
}

public MesonBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
this(config, name, toolChain, null, "run"); //$NON-NLS-1$
public MesonBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, String launchMode,
ILaunchTarget launchTarget) throws CoreException {
this(config, name, toolChain, null, launchMode, launchTarget);
}

public MesonBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
IMesonToolChainFile toolChainFile, String launchMode) {
super(config, name, toolChain, launchMode);
IMesonToolChainFile toolChainFile, String launchMode, ILaunchTarget launchTarget) throws CoreException {
super(config, name, toolChain, launchMode, launchTarget);

this.toolChainFile = toolChainFile;
if (toolChainFile != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,14 @@
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
import org.eclipse.launchbar.core.target.LaunchTargetUtils;

public class MesonBuildConfigurationProvider implements ICBuildConfigurationProvider {

public static final String ID = "org.eclipse.cdt.meson.core.provider"; //$NON-NLS-1$

private final static ILaunchTargetManager launchTargetManager = Activator.getService(ILaunchTargetManager.class);
private IMesonToolChainManager manager = Activator.getService(IMesonToolChainManager.class);
private ICBuildConfigurationManager configManager = Activator.getService(ICBuildConfigurationManager.class);

Expand Down Expand Up @@ -68,7 +71,8 @@ public synchronized ICBuildConfiguration getCBuildConfiguration(IBuildConfigurat
}

if (toolChain != null) {
return new MesonBuildConfiguration(config, name, toolChain);
return new MesonBuildConfiguration(config, name, toolChain, "run", //$NON-NLS-1$
launchTargetManager.getLocalLaunchTarget());
}
// No valid combinations
return null;
Expand All @@ -82,15 +86,15 @@ public synchronized ICBuildConfiguration getCBuildConfiguration(IBuildConfigurat
}
if (tcFile != null && !toolChain.equals(tcFile.getToolChain())) {
// toolchain changed
return new MesonBuildConfiguration(config, name, tcFile.getToolChain(), tcFile,
mesonConfig.getLaunchMode());
return new MesonBuildConfiguration(config, name, tcFile.getToolChain(), tcFile, mesonConfig.getLaunchMode(),
launchTargetManager.getLocalLaunchTarget());
}
return mesonConfig;
}

@Override
public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
IProgressMonitor monitor) throws CoreException {
ILaunchTarget launchTarget, IProgressMonitor monitor) throws CoreException {
// get matching toolchain file if any
Map<String, String> properties = new HashMap<>();
String os = toolChain.getProperty(IToolChain.ATTR_OS);
Expand Down Expand Up @@ -127,7 +131,11 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
configName.append('.');
configName.append(arch);
}
// Add Launch Target name
configName.append('.');
configName.append(LaunchTargetUtils.sanitizeName(launchTarget.getId()));
}

String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
Expand All @@ -140,7 +148,8 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
config = configManager.createBuildConfiguration(this, project, name, monitor);
}

MesonBuildConfiguration mesonConfig = new MesonBuildConfiguration(config, name, toolChain, file, launchMode);
MesonBuildConfiguration mesonConfig = new MesonBuildConfiguration(config, name, toolChain, file, launchMode,
launchTarget);
configManager.addBuildConfiguration(config, mesonConfig);
return mesonConfig;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.eclipse.launchbar.core.target.ILaunchTargetManager;

/**
* @since 2.0
Expand All @@ -83,6 +85,7 @@ public class CMakeBuildConfiguration extends CBuildConfiguration implements ICMa
* To work around that, we run cmake in advance with its dedicated working error parser.
*/
private boolean cmakeListsModified;
private final static ILaunchTargetManager launchTargetManager = Activator.getService(ILaunchTargetManager.class);

public CMakeBuildConfiguration(IBuildConfiguration config, String name) throws CoreException {
super(config, name);
Expand All @@ -91,13 +94,21 @@ public CMakeBuildConfiguration(IBuildConfiguration config, String name) throws C
toolChainFile = manager.getToolChainFileFor(getToolChain());
}

public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
this(config, name, toolChain, null, "run"); //$NON-NLS-1$
// TODO: delete ??
public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) throws CoreException {
this(config, name, toolChain, null, "run", launchTargetManager.getLocalLaunchTarget()); //$NON-NLS-1$
}

// TODO: delete ??
public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
ICMakeToolChainFile toolChainFile, String launchMode) {
super(config, name, toolChain, launchMode);
ICMakeToolChainFile toolChainFile, String launchMode) throws CoreException {
super(config, name, toolChain, launchMode, launchTargetManager.getLocalLaunchTarget());
this.toolChainFile = toolChainFile;
}

public CMakeBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
ICMakeToolChainFile toolChainFile, String launchMode, ILaunchTarget launchTarget) throws CoreException {
super(config, name, toolChain, launchMode, launchTarget);
this.toolChainFile = toolChainFile;
}

Expand Down
Loading

0 comments on commit a98d721

Please sign in to comment.