diff options
author | Morten Kristiansen | 2016-12-25 14:58:07 +0000 |
---|---|---|
committer | Jonah Graham | 2017-01-03 12:26:18 +0000 |
commit | 10428dd53afc4d794d711cdde9e970ca9b9bf732 (patch) | |
tree | 67e36042e3f1d0ba3c51032d06d3d8f51e788fd1 /build/org.eclipse.cdt.managedbuilder.core | |
parent | 425e72de58184609394e305a8f126e44a34c3966 (diff) | |
download | org.eclipse.cdt-10428dd53afc4d794d711cdde9e970ca9b9bf732.tar.gz org.eclipse.cdt-10428dd53afc4d794d711cdde9e970ca9b9bf732.tar.xz org.eclipse.cdt-10428dd53afc4d794d711cdde9e970ca9b9bf732.zip |
[Bug 340300] Fix parallel make when using pre-build steps
Pre-build will always run in parallel to compilation of source files
unless each and every source file depends on pre-build. Also, when
parallel build was enabled, the "Make build target" under "Workbench
Build Behavior" was ignored. Instead of doing make -j all, Eclipse ran
make -j pre-build main-build. While the intentions are good, make will
attempt to build pre-build and main-build in parallel for previous
stated reasons.
This patch changes two things:
1. Eclipse will consistently respect the "Workbench Build Behavior" for
both single- and multi-process build.
2. The generated makefile is changed to guarantee pre-build is run
first.
Changed from
all: pre-build main-build
to
all:
$(MAKE) --no-print-directory pre-build
$(MAKE) --no-print-directory main-build
Change-Id: Icf3a1057ee3b3cc8a04a433820492a4f469e17dd
Signed-off-by: Morten Kristiansen <millibit@gmail.com>
Diffstat (limited to 'build/org.eclipse.cdt.managedbuilder.core')
2 files changed, 23 insertions, 44 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java index fd54bf98905..41dab02d436 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java @@ -160,43 +160,22 @@ public class ExternalBuildRunner extends AbstractBuildRunner { } protected String[] getTargets(int kind, IBuilder builder) { - String targetsArray[] = null; - - if(kind != IncrementalProjectBuilder.CLEAN_BUILD && !builder.isCustomBuilder() && builder.isManagedBuildOn()){ - IConfiguration cfg = builder.getParent().getParent(); - String preBuildStep = cfg.getPrebuildStep(); - try { - preBuildStep = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat( - preBuildStep, - "", //$NON-NLS-1$ - " ", //$NON-NLS-1$ - IBuildMacroProvider.CONTEXT_CONFIGURATION, - cfg); - } catch (BuildMacroException e) { - } - - if(preBuildStep != null && preBuildStep.length() != 0){ - targetsArray = new String[]{"pre-build", "main-build"}; //$NON-NLS-1$ //$NON-NLS-2$ - } + String targets = ""; //$NON-NLS-1$ + switch (kind) { + case IncrementalProjectBuilder.AUTO_BUILD : + targets = builder.getAutoBuildTarget(); + break; + case IncrementalProjectBuilder.INCREMENTAL_BUILD : // now treated as the same! + case IncrementalProjectBuilder.FULL_BUILD : + targets = builder.getIncrementalBuildTarget(); + break; + case IncrementalProjectBuilder.CLEAN_BUILD : + targets = builder.getCleanBuildTarget(); + break; } - if(targetsArray == null){ - String targets = ""; //$NON-NLS-1$ - switch (kind) { - case IncrementalProjectBuilder.AUTO_BUILD : - targets = builder.getAutoBuildTarget(); - break; - case IncrementalProjectBuilder.INCREMENTAL_BUILD : // now treated as the same! - case IncrementalProjectBuilder.FULL_BUILD : - targets = builder.getIncrementalBuildTarget(); - break; - case IncrementalProjectBuilder.CLEAN_BUILD : - targets = builder.getCleanBuildTarget(); - break; - } + String targetsArray[] = CommandLineUtil.argumentsToArray(targets); - targetsArray = CommandLineUtil.argumentsToArray(targets); - } return targetsArray; } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java index 67fbf4825a0..28cba267ac4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java @@ -1348,8 +1348,10 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 { // and neither conditions apply if we are building for it .... } */ - // If a prebuild step exists, redefine the all target to be - // all: {pre-build} main-build + // If a prebuild step exists, redefine the all target to be + // all: + // $(MAKE) pre-build + // $(MAKE) main-build // and then reset the "traditional" all target to main-build // This will allow something meaningful to happen if the generated // makefile is @@ -1361,17 +1363,15 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 { // Add the comment for the "All" target buffer.append(COMMENT_SYMBOL).append(WHITESPACE).append(ManagedMakeMessages.getResourceString(ALL_TARGET)).append(NEWLINE); - buffer.append(defaultTarget).append(WHITESPACE); - buffer.append(PREBUILD).append(WHITESPACE); - - // Reset defaultTarget for now and for subsequent use, below - defaultTarget = MAINBUILD; - buffer.append(defaultTarget); + // Invoke make multiple times to ensure pre-build is executed before main-build + buffer.append(defaultTarget).append(NEWLINE); + buffer.append(TAB).append(MAKE).append(WHITESPACE).append(NO_PRINT_DIR).append(WHITESPACE).append(PREBUILD).append(NEWLINE); + buffer.append(TAB).append(MAKE).append(WHITESPACE).append(NO_PRINT_DIR).append(WHITESPACE).append(MAINBUILD).append(NEWLINE); + buffer.append(NEWLINE); // Update the defaultTarget, main-build, by adding a colon, which is // needed below - defaultTarget = defaultTarget.concat(COLON); - buffer.append(NEWLINE).append(NEWLINE); + defaultTarget = MAINBUILD.concat(COLON); // Add the comment for the "main-build" target buffer.append(COMMENT_SYMBOL).append(WHITESPACE).append(ManagedMakeMessages.getResourceString(MAINBUILD_TARGET)).append(NEWLINE); |