diff options
author | Cal Peyser <cpeyser@google.com> | 2016-10-11 16:57:08 +0000 |
---|---|---|
committer | Yue Gan <yueg@google.com> | 2016-10-12 08:55:26 +0000 |
commit | fb1e11e67d7cba3dbcafc783f593fbb8acf6b4e4 (patch) | |
tree | 222fe580803d7ac6065f8eebbd5540d55ae82c28 | |
parent | 978c9178f0c75770b3c0477671cc1e895515d91d (diff) |
Provide a mechanism for objc code built with CppCompileAction to forego dotd
input pruning.
--
MOS_MIGRATED_REVID=135807490
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) { } |