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 382ce1e
Show file tree
Hide file tree
Showing 34 changed files with 500 additions and 191 deletions.
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,15 @@
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;

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 +67,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 +84,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 +113,11 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
configName.append('.');
configName.append(arch);
}
// Add Launch Target name
configName.append('.');
configName.append(launchTarget.getSantizedId());
}

String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
Expand All @@ -123,7 +131,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
3 changes: 2 additions & 1 deletion build/org.eclipse.cdt.make.core/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -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,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;

/**
* @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 +64,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 +76,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 +97,11 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
configName.append('.');
configName.append(arch);
}
// Add Launch Target name
configName.append('.');
configName.append(launchTarget.getSantizedId());
}

String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
Expand All @@ -105,7 +113,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,13 @@
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;

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 +70,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 +85,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 +130,11 @@ public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChai
configName.append('.');
configName.append(arch);
}
// Add Launch Target name
configName.append('.');
configName.append(launchTarget.getSantizedId());
}

String name = configName.toString();
IBuildConfiguration config = null;
// reuse any IBuildConfiguration with the same name for the project
Expand All @@ -140,7 +147,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 382ce1e

Please sign in to comment.