Skip to content

Commit fc083da

Browse files
The active Launch Target is now saved in the ICBuildConfiguration (#1076)
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) Additionally, API added to allow the ISV to configure the build output folder name. The ICBuildConfigurationProvider implementations, shown below, have been tidied up to use common code. CMakeBuildConfigurationProvider AutotoolsBuildConfigurationProvider MakefileBuildConfigurationProvider MesonBuildConfigurationProvider Addresses Issue: CDT CMake Improvements #1000, IDE-82683-REQ-016 Launch Targets used in ICBuildConfiguration Addresses Issue: CDT CMake Improvements #1000, IDE-82683-REQ-018 Build output folder name
1 parent f0c74ed commit fc083da

File tree

47 files changed

+1027
-466
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1027
-466
lines changed

NewAndNoteworthy/CHANGELOG-API.md

+150-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,156 @@ Below is the detailed descriptions of API changes and mitigation efforts API con
1010

1111
## API Changes in CDT 12.0.
1212

13-
### org.eclipse.cdt.cmake.core.properties refactored
13+
### CDT's Core Build System refactored and improved
14+
15+
Many API changes were made in org.eclipse.cdt.core.build and its surrounding areas, such as CMake and Meson.
16+
See [CDT Issue#1000](https://github.com/eclipse-cdt/cdt/issues/1000) for background information and motivation for this change.
17+
The rest of this section attempts to capture the individual changes made to methods.
18+
19+
#### org.eclipse.cdt.core.build.ICBuildConfigurationProvider
20+
21+
Renamed method createBuildConfiguration to createCBuildConfiguration, which reflects it purpose of creating a new Core Build configuration. Also added the ILaunchTarget parameter.
22+
23+
Added method:
24+
* createCBuildConfiguration(IProject, IToolChain, String, ILaunchTarget, IProgressMonitor)
25+
26+
Removed method:
27+
* createBuildConfiguration(IProject, IToolChain, String, IProgressMonitor)
28+
29+
Added method allowing extenders to customize the Core Build output directory name.
30+
* getCBuildConfigName(IProject, String, IToolChain, String, ILaunchTarget)
31+
32+
#### org.eclipse.cdt.core.build.CBuildConfiguration
33+
34+
Removed method:
35+
36+
* org.eclipse.cdt.core.build.CBuildConfiguration.setLaunchMode(String)
37+
38+
#### Simplified constructors in org.eclipse.cdt.core.build.CBuildConfiguration
39+
40+
The following constructors have been removed from CBuildConfiguration:
41+
42+
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String, IToolChain)
43+
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String, IToolChain, String)
44+
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, IToolChain)
45+
46+
Removing them simplified the API as these constructors were unneeded.
47+
48+
Instead use:
49+
50+
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String)
51+
* org.eclipse.cdt.core.build.CBuildConfiguration.CBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)
52+
53+
The documentation on these constructors has been improved.
54+
55+
#### Simplified constructors in org.eclipse.cdt.cmake.core.CMakeBuildConfiguration
56+
57+
The following constructors have been removed from CMakeBuildConfiguration:
58+
59+
* org.eclipse.cdt.cmake.core.CMakeBuildConfiguration.CMakeBuildConfiguration(IBuildConfiguration, String, IToolChain)
60+
* org.eclipse.cdt.cmake.core.CMakeBuildConfiguration.CMakeBuildConfiguration(IBuildConfiguration, String, IToolChain, ICMakeToolChainFile, String)
61+
62+
Instead use:
63+
64+
* org.eclipse.cdt.cmake.core.CMakeBuildConfiguration.CMakeBuildConfiguration(IBuildConfiguration, String, IToolChain, ICMakeToolChainFile, String, ILaunchTarget)
65+
66+
#### Simplified constructors in org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration
67+
68+
The following constructors have been removed from AutotoolsBuildConfiguration:
69+
* org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain, String)
70+
* org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain)
71+
72+
Instead use:
73+
74+
* org.eclipse.cdt.core.autotools.core.AutotoolsBuildConfiguration.AutotoolsBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)
75+
76+
#### Simplified constructors in org.eclipse.cdt.core.build.StandardBuildConfiguration
77+
78+
The following constructors have been removed from StandardBuildConfiguration:
79+
80+
* org.eclipse.cdt.core.build.StandardBuildConfiguration.StandardBuildConfiguration(IBuildConfiguration, String, IToolChain, String)
81+
82+
Instead use:
83+
84+
* org.eclipse.cdt.core.build.StandardBuildConfiguration.StandardBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)
85+
86+
#### Simplified constructors in org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration
87+
88+
The following constructors have been removed from MesonBuildConfiguration:
89+
90+
* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain)
91+
92+
* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain, IMesonToolChainFile, String)
93+
94+
Instead use:
95+
96+
* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain, String, ILaunchTarget)
97+
98+
* org.eclipse.cdt.internal.meson.core.MesonBuildConfiguration.MesonBuildConfiguration(IBuildConfiguration, String, IToolChain, IMesonToolChainFile, String, ILaunchTarget)
99+
100+
#### org.eclipse.cdt.core.build.ICBuildConfiguration
101+
102+
Added method:
103+
104+
* org.eclipse.cdt.core.build.ICBuildConfiguration.getLaunchTarget()
105+
106+
#### org.eclipse.cdt.core.build.ICBuildConfigurationManager
107+
108+
The documentation has been improved.
109+
110+
Added method:
111+
112+
* org.eclipse.cdt.core.build.ICBuildConfigurationManager.getBuildConfiguration(IProject, IToolChain, String, ILaunchTarget, IProgressMonitor)
113+
114+
Removed method:
115+
116+
* org.eclipse.cdt.core.build.ICBuildConfigurationManager.getBuildConfiguration(IProject, IToolChain, String, IProgressMonitor)
117+
118+
* org.eclipse.cdt.core.build.ICBuildConfigurationManager.getBuildConfiguration(IProject, Map<String, String>, String, IProgressMonitor)
119+
120+
#### org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate
121+
122+
Removed deprecated method:
123+
124+
* org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate.getBuildConfiguration(IProject, String, ILaunchTarget, IProgressMonitor)
125+
126+
#### org.eclipse.launchbar.core.target.ILaunchTarget
127+
128+
Removed deprecated method:
129+
130+
* org.eclipse.launchbar.core.target.ILaunchTarget.getName()
131+
132+
#### org.eclipse.launchbar.core.target.ILaunchTargetManager
133+
134+
Added method:
135+
136+
* org.eclipse.launchbar.core.target.ILaunchTargetManager.getLocalLaunchTarget()
137+
138+
Added field:
139+
140+
* org.eclipse.launchbar.core.target.ILaunchTargetManager.localLaunchTargetId
141+
142+
#### org.eclipse.launchbar.core.target.LaunchTargetUtils
143+
144+
Added methods that can be used to check/fix the Launch Target name:
145+
146+
* org.eclipse.launchbar.core.target.LaunchTargetUtils.isInvalidName(String)
147+
* org.eclipse.launchbar.core.target.LaunchTargetUtils.sanitizeName(String)
148+
149+
#### org.eclipse.cdt.debug.core
150+
- Version bumped to 9.0.0
151+
- Removed method (already deprecated):
152+
- org.eclipse.cdt.debug.core.launch.CoreBuildLaunchConfigDelegate.getBuildConfiguration(IProject, String, ILaunchTarget, IProgressMonitor)
153+
154+
#### org.eclipse.launchbar.core.target
155+
- Added method:
156+
- org.eclipse.launchbar.core.target.ILaunchTargetManager.getLocalLaunchTarget()
157+
- Added field:
158+
- org.eclipse.launchbar.core.target.ILaunchTargetManager.localLaunchTargetId
159+
- Added class:
160+
- org.eclipse.launchbar.core.target.LaunchTargetUtils
161+
162+
#### org.eclipse.cdt.cmake.core.properties refactored
14163

15164
A significant simplification to the CMake build properties was completed, this included removing some API that was not used.
16165
The following classes have been removed or modified in API breaking ways:

build/org.eclipse.cdt.core.autotools.core/META-INF/MANIFEST.MF

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ Require-Bundle: org.eclipse.core.runtime,
88
org.eclipse.tools.templates.core;bundle-version="2.0.0",
99
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
1010
org.eclipse.cdt.core;bundle-version="6.3.1",
11-
org.eclipse.core.resources;bundle-version="3.12.0"
11+
org.eclipse.core.resources;bundle-version="3.12.0",
12+
org.eclipse.launchbar.core;bundle-version="[3.0.0,4.0.0)"
1213
Bundle-RequiredExecutionEnvironment: JavaSE-17
1314
Bundle-ActivationPolicy: lazy
1415
Bundle-Vendor: %providerName

build/org.eclipse.cdt.core.autotools.core/src/org/eclipse/cdt/core/autotools/core/AutotoolsBuildConfiguration.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.eclipse.core.runtime.IProgressMonitor;
3535
import org.eclipse.core.runtime.Path;
3636
import org.eclipse.core.runtime.Status;
37+
import org.eclipse.launchbar.core.target.ILaunchTarget;
3738

3839
public class AutotoolsBuildConfiguration extends CBuildConfiguration {
3940

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

49-
public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain) {
50-
super(config, name, toolChain, "run"); // TODO: why "run" //$NON-NLS-1$
51-
}
52-
53-
public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain,
54-
String launchMode) {
55-
super(config, name, toolChain, launchMode);
50+
public AutotoolsBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, String launchMode,
51+
ILaunchTarget launchTarget) throws CoreException {
52+
super(config, name, toolChain, launchMode, launchTarget);
5653
}
5754

5855
@Override

build/org.eclipse.cdt.core.autotools.core/src/org/eclipse/cdt/core/autotools/core/AutotoolsBuildConfigurationProvider.java

+21-47
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Map;
1919

2020
import org.eclipse.cdt.core.autotools.core.internal.Activator;
21+
import org.eclipse.cdt.core.build.CBuildConfigUtils;
2122
import org.eclipse.cdt.core.build.ICBuildConfiguration;
2223
import org.eclipse.cdt.core.build.ICBuildConfigurationManager;
2324
import org.eclipse.cdt.core.build.ICBuildConfigurationProvider;
@@ -28,12 +29,14 @@
2829
import org.eclipse.core.runtime.CoreException;
2930
import org.eclipse.core.runtime.IProgressMonitor;
3031
import org.eclipse.core.runtime.Platform;
32+
import org.eclipse.launchbar.core.target.ILaunchTarget;
33+
import org.eclipse.launchbar.core.target.ILaunchTargetManager;
3134

3235
public class AutotoolsBuildConfigurationProvider implements ICBuildConfigurationProvider {
3336

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

36-
private ICBuildConfigurationManager configManager = Activator.getService(ICBuildConfigurationManager.class);
39+
private final ILaunchTargetManager launchTargetManager = Activator.getService(ILaunchTargetManager.class);
3740

3841
@Override
3942
public String getId() {
@@ -64,7 +67,8 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S
6467
}
6568

6669
if (toolChain != null) {
67-
return new AutotoolsBuildConfiguration(config, name, toolChain);
70+
return new AutotoolsBuildConfiguration(config, name, toolChain, "run", //$NON-NLS-1$
71+
launchTargetManager.getLocalLaunchTarget());
6872
}
6973
// No valid combinations
7074
return null;
@@ -79,53 +83,23 @@ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, S
7983
}
8084

8185
@Override
82-
public ICBuildConfiguration createBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
83-
IProgressMonitor monitor) throws CoreException {
84-
// get matching toolchain file if any
85-
Map<String, String> properties = new HashMap<>();
86-
String os = toolChain.getProperty(IToolChain.ATTR_OS);
87-
if (os != null && !os.isEmpty()) {
88-
properties.put(IToolChain.ATTR_OS, os);
89-
}
90-
String arch = toolChain.getProperty(IToolChain.ATTR_ARCH);
91-
if (arch != null && !arch.isEmpty()) {
92-
properties.put(IToolChain.ATTR_ARCH, arch);
93-
}
86+
public ICBuildConfiguration createCBuildConfiguration(IProject project, IToolChain toolChain, String launchMode,
87+
ILaunchTarget launchTarget, IProgressMonitor monitor) throws CoreException {
88+
// Compute name to use for ICBuildConfiguration
89+
String cBuildConfigName = getCBuildConfigName(project, "autotools", toolChain, launchMode, launchTarget); //$NON-NLS-1$
9490

95-
// create config
96-
StringBuilder configName = new StringBuilder("autotools."); //$NON-NLS-1$
97-
configName.append(launchMode);
98-
if ("linux-container".equals(os)) { //$NON-NLS-1$
99-
String osConfigName = toolChain.getProperty("linux-container-id"); //$NON-NLS-1$
100-
osConfigName = osConfigName.replaceAll("/", "_"); //$NON-NLS-1$ //$NON-NLS-2$
101-
configName.append('.');
102-
configName.append(osConfigName);
103-
} else {
104-
if (os != null) {
105-
configName.append('.');
106-
configName.append(os);
107-
}
108-
if (arch != null && !arch.isEmpty()) {
109-
configName.append('.');
110-
configName.append(arch);
111-
}
112-
}
113-
String name = configName.toString();
114-
IBuildConfiguration config = null;
115-
// reuse any IBuildConfiguration with the same name for the project
116-
// so adding the CBuildConfiguration will override the old one stored
117-
// by the CBuildConfigurationManager
118-
if (configManager.hasConfiguration(this, project, name)) {
119-
config = project.getBuildConfig(this.getId() + '/' + name);
120-
}
121-
if (config == null) {
122-
config = configManager.createBuildConfiguration(this, project, name, monitor);
123-
}
91+
// Create Platform Build configuration
92+
ICBuildConfigurationManager cBuildConfigManager = Activator.getService(ICBuildConfigurationManager.class);
93+
IBuildConfiguration buildConfig = CBuildConfigUtils.createBuildConfiguration(this, project, cBuildConfigName,
94+
cBuildConfigManager, monitor);
12495

125-
AutotoolsBuildConfiguration autotoolsConfig = new AutotoolsBuildConfiguration(config, name, toolChain,
126-
launchMode);
127-
configManager.addBuildConfiguration(config, autotoolsConfig);
128-
return autotoolsConfig;
96+
// Create Core Build configuration
97+
ICBuildConfiguration cBuildConfig = new AutotoolsBuildConfiguration(buildConfig, cBuildConfigName, toolChain,
98+
launchMode, launchTarget);
99+
100+
// Add the Platform Build/Core Build configuration combination
101+
cBuildConfigManager.addBuildConfiguration(buildConfig, cBuildConfig);
102+
return cBuildConfig;
129103
}
130104

131105
}

build/org.eclipse.cdt.make.core/META-INF/MANIFEST.MF

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %pluginName
44
Bundle-SymbolicName: org.eclipse.cdt.make.core; singleton:=true
5-
Bundle-Version: 7.6.600.qualifier
5+
Bundle-Version: 8.0.0.qualifier
66
Bundle-Activator: org.eclipse.cdt.make.core.MakeCorePlugin
77
Bundle-Vendor: %providerName
88
Bundle-Localization: plugin
@@ -26,7 +26,8 @@ Require-Bundle: org.eclipse.cdt.core;bundle-version="[9.0.0,10.0.0)",
2626
org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
2727
org.eclipse.core.filesystem;bundle-version="1.2.0",
2828
org.eclipse.tools.templates.core;bundle-version="2.0.0",
29-
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0"
29+
org.eclipse.tools.templates.freemarker;bundle-version="2.0.0",
30+
org.eclipse.launchbar.core;bundle-version="[3.0.0,4.0.0)"
3031
Bundle-ActivationPolicy: lazy
3132
Bundle-RequiredExecutionEnvironment: JavaSE-17
3233
Automatic-Module-Name: org.eclipse.cdt.make.core

0 commit comments

Comments
 (0)