aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-01-12 15:40:36 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-12 16:55:58 +0000
commitee5ba64a1ca41ad55a44a85c4bc18cfdf7820b2f (patch)
tree207c94e3d1f1226b2476a1347f0997d9bf957a73 /src/main/java/com/google/devtools/build/lib/rules/cpp
parent326a6a588e5c25a707697bf153bbef36071096ff (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.java29
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());
+ }
}
}