aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2016-10-11 16:57:08 +0000
committerGravatar Yue Gan <yueg@google.com>2016-10-12 08:55:26 +0000
commitfb1e11e67d7cba3dbcafc783f593fbb8acf6b4e4 (patch)
tree222fe580803d7ac6065f8eebbd5540d55ae82c28
parent978c9178f0c75770b3c0477671cc1e895515d91d (diff)
Provide a mechanism for objc code built with CppCompileAction to forego dotd
input pruning. -- MOS_MIGRATED_REVID=135807490
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java17
5 files changed, 27 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
index a037904d44..fb87b5e310 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppSemantics.java
@@ -65,6 +65,11 @@ public class BazelCppSemantics implements CppSemantics {
}
@Override
+ public boolean needsDotdInputPruning() {
+ return true;
+ }
+
+ @Override
public void validateAttributes(RuleContext ruleContext) {
}
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 1d06026c93..2a8f25a955 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
@@ -46,6 +46,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.CollectionUtils;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
@@ -1140,7 +1141,7 @@ public class CppCompileAction extends AbstractAction
NestedSet<Artifact> discoveredInputs =
discoverInputsFromDotdFiles(execRoot, scanningContext.getArtifactResolver(), reply);
reply = null; // Clear in-memory .d files early.
-
+
// Post-execute "include scanning", which modifies the action inputs to match what the compile
// action actually used by incorporating the results of .d file parsing.
//
@@ -1165,8 +1166,8 @@ public class CppCompileAction extends AbstractAction
public NestedSet<Artifact> discoverInputsFromDotdFiles(
Path execRoot, ArtifactResolver artifactResolver, Reply reply)
throws ActionExecutionException {
- if (getDotdFile() == null) {
- return NestedSetBuilder.<Artifact>stableOrder().build();
+ if (!cppSemantics.needsDotdInputPruning() || getDotdFile() == null) {
+ return NestedSetBuilder.emptySet(Order.STABLE_ORDER);
}
HeaderDiscovery.Builder discoveryBuilder =
new HeaderDiscovery.Builder()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
index ec224b2d34..bc0e1ee11e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppSemantics.java
@@ -58,6 +58,9 @@ public interface CppSemantics {
* in the action graph.
*/
boolean needsIncludeScanning(RuleContext ruleContext);
+
+ /** Returns true iff this build should perform .d input pruning. */
+ boolean needsDotdInputPruning();
void validateAttributes(RuleContext ruleContext);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java
index 2b92e754d5..8769f56f0b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolSupport.java
@@ -196,7 +196,8 @@ public class CrosstoolSupport {
(pchHdr != null) ? ImmutableList.<Artifact>of(pchHdr) : ImmutableList.<Artifact>of();
return new CcLibraryHelper(
ruleContext,
- new ObjcCppSemantics(common.getObjcProvider()),
+ new ObjcCppSemantics(
+ common.getObjcProvider(), ruleContext.getFragment(ObjcConfiguration.class)),
featureConfiguration,
CcLibraryHelper.SourceCategory.CC_AND_OBJC)
.addSources(arcSources, ImmutableMap.of("objc_arc", ""))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
index 7e408c4bb9..2259e4f5ef 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCppSemantics.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.rules.cpp.CppConfiguration;
import com.google.devtools.build.lib.rules.cpp.CppConfiguration.HeadersCheckingMode;
import com.google.devtools.build.lib.rules.cpp.CppHelper;
import com.google.devtools.build.lib.rules.cpp.CppSemantics;
+import com.google.devtools.build.lib.rules.cpp.HeaderDiscovery.DotdPruningMode;
import com.google.devtools.build.lib.vfs.PathFragment;
/**
@@ -35,15 +36,18 @@ import com.google.devtools.build.lib.vfs.PathFragment;
public class ObjcCppSemantics implements CppSemantics {
private final ObjcProvider objcProvider;
+ private final ObjcConfiguration config;
/**
* Creates an instance of ObjcCppSemantics
- *
- * @param objcProvider the provider that should be used in determining objc-specific inputs
- * to actions
+ *
+ * @param objcProvider the provider that should be used in determining objc-specific inputs to
+ * actions
+ * @param config the ObjcConfiguration for this build
*/
- public ObjcCppSemantics(ObjcProvider objcProvider) {
+ public ObjcCppSemantics(ObjcProvider objcProvider, ObjcConfiguration config) {
this.objcProvider = objcProvider;
+ this.config = config;
}
@Override
@@ -84,6 +88,11 @@ public class ObjcCppSemantics implements CppSemantics {
}
@Override
+ public boolean needsDotdInputPruning() {
+ return config.getDotdPruningPlan() == DotdPruningMode.USE;
+ }
+
+ @Override
public void validateAttributes(RuleContext ruleContext) {
}