diff options
author | 2017-01-12 15:40:36 +0000 | |
---|---|---|
committer | 2017-01-12 16:55:58 +0000 | |
commit | ee5ba64a1ca41ad55a44a85c4bc18cfdf7820b2f (patch) | |
tree | 207c94e3d1f1226b2476a1347f0997d9bf957a73 /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | 326a6a588e5c25a707697bf153bbef36071096ff (diff) |
Reduce number of C++ modules explicitly specified on the command line.
--
PiperOrigin-RevId: 144323833
MOS_MIGRATED_REVID=144323833
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index 930be36707..9a91c3c970 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -215,6 +215,9 @@ public class CppCompileAction extends AbstractAction /** Set when a two-stage input discovery is used. */ private Collection<Artifact> usedModules = null; + /** Used modules that are not transitively used through other topLevelModules. */ + private Collection<Artifact> topLevelModules = null; + private CcToolchainFeatures.Variables overwrittenVariables = null; private ImmutableList<Artifact> resolvedInputs = ImmutableList.<Artifact>of(); @@ -502,6 +505,7 @@ public class CppCompileAction extends AbstractAction if (shouldPruneModules) { Set<Artifact> initialResultSet = Sets.newLinkedHashSet(initialResult); usedModules = Sets.newLinkedHashSet(); + topLevelModules = null; for (CppCompilationContext.TransitiveModuleHeaders usedModule : context.getUsedModules(usePic, initialResultSet)) { usedModules.add(usedModule.getModule()); @@ -557,6 +561,13 @@ public class CppCompileAction extends AbstractAction } } } + ImmutableSet.Builder<Artifact> topLevelModules = ImmutableSet.builder(); + for (Artifact artifact : this.usedModules) { + if (!additionalModules.contains(artifact)) { + topLevelModules.add(artifact); + } + } + this.topLevelModules = topLevelModules.build(); this.additionalInputs = new ImmutableList.Builder<Artifact>() .addAll(this.additionalInputs) @@ -569,8 +580,11 @@ public class CppCompileAction extends AbstractAction @Override public Iterable<Artifact> getInputsWhenSkippingInputDiscovery() { if (useHeaderModules) { - this.additionalInputs = context.getTransitiveModules(usePic).toCollection(); - return this.additionalInputs; + additionalInputs = Sets.newLinkedHashSet(context.getTransitiveModules(usePic).toCollection()); + // Here, we cannot really know what the top-level modules are, so we just mark all + // transitive modules as "top level". + topLevelModules = additionalInputs; + return additionalInputs; } return null; } @@ -1012,11 +1026,14 @@ public class CppCompileAction extends AbstractAction /** Sets module file flags based on the action's inputs. */ protected void setModuleFileFlags() { if (useHeaderModules) { - // If modules pruning is used, modules will be supplied via additionalInputs, otherwise they + // If modules pruning is used, modules will be supplied via topLevelModules, otherwise they // are regular inputs. - Preconditions.checkNotNull(additionalInputs); - this.overwrittenVariables = - getOverwrittenVariables(shouldPruneModules ? additionalInputs : getInputs()); + if (shouldPruneModules) { + Preconditions.checkNotNull(this.topLevelModules); + overwrittenVariables = getOverwrittenVariables(topLevelModules); + } else { + overwrittenVariables = getOverwrittenVariables(getInputs()); + } } } |