diff options
author | 2017-01-26 21:39:33 +0000 | |
---|---|---|
committer | 2017-01-26 23:05:18 +0000 | |
commit | 600468d110595e9c663d6b335a7a67a899f88261 (patch) | |
tree | 88b0598c6478c358207b02ae171978a38a62228a /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | e2fbeb36f341cd4612692307a95e8be7a2e89744 (diff) |
Module maps arising from an experimental_objc_library are not automatically
added as inputs to dependant compile actions. This puts
experimental_objc_library in line with the behavior of objc_library, and
allows targets that specific "-fmodules" to continue to build.
--
PiperOrigin-RevId: 145714898
MOS_MIGRATED_REVID=145714898
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/CcLibraryHelper.java | 26 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java | 27 |
2 files changed, 40 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index 0f79568c02..c49d82fa0a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -288,7 +288,8 @@ public final class CcLibraryHelper { private boolean emitCompileProviders; private final SourceCategory sourceCategory; private List<VariablesExtension> variablesExtensions = new ArrayList<>(); - @Nullable private CppModuleMap injectedCppModuleMap; + @Nullable private CppModuleMap cppModuleMap; + private boolean propagateModuleMapToCompileAction = true; private final FeatureConfiguration featureConfiguration; @@ -680,10 +681,20 @@ public final class CcLibraryHelper { return this; } - /** Sets the module map artifact for this build. */ + /** + * Sets a module map artifact for this build. + */ public CcLibraryHelper setCppModuleMap(CppModuleMap cppModuleMap) { Preconditions.checkNotNull(cppModuleMap); - this.injectedCppModuleMap = cppModuleMap; + this.cppModuleMap = cppModuleMap; + return this; + } + + /** + * Signals that this target's module map should not be an input to c++ compile actions. + */ + public CcLibraryHelper setPropagateModuleMapToCompileAction(boolean propagatesModuleMap) { + this.propagateModuleMapToCompileAction = propagatesModuleMap; return this; } @@ -1216,10 +1227,11 @@ public final class CcLibraryHelper { } if (featureConfiguration.isEnabled(CppRuleClasses.MODULE_MAPS)) { - CppModuleMap cppModuleMap = - injectedCppModuleMap == null - ? CppHelper.createDefaultCppModuleMap(ruleContext) - : injectedCppModuleMap; + if (cppModuleMap == null) { + cppModuleMap = CppHelper.createDefaultCppModuleMap(ruleContext); + } + + contextBuilder.setPropagateCppModuleMapAsActionInput(propagateModuleMapToCompileAction); contextBuilder.setCppModuleMap(cppModuleMap); CppModuleMapAction action = new CppModuleMapAction( diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java index db954cb5db..b9d202d8dc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java @@ -63,7 +63,8 @@ public final class CppCompilationContext implements TransitiveInfoProvider { private final ModuleInfo picModuleInfo; private final CppModuleMap cppModuleMap; - + private final boolean propagateModuleMapAsActionInput; + // Derived from depsContexts. private final ImmutableSet<Artifact> compilationPrerequisites; @@ -77,7 +78,8 @@ public final class CppCompilationContext implements TransitiveInfoProvider { ModuleInfo moduleInfo, ModuleInfo picModuleInfo, NestedSet<Artifact> directModuleMaps, - CppModuleMap cppModuleMap) { + CppModuleMap cppModuleMap, + boolean propagateModuleMapAsActionInput) { Preconditions.checkNotNull(commandLineContext); this.commandLineContext = commandLineContext; this.declaredIncludeDirs = declaredIncludeDirs; @@ -89,6 +91,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { this.picModuleInfo = picModuleInfo; this.cppModuleMap = cppModuleMap; this.compilationPrerequisites = compilationPrerequisites; + this.propagateModuleMapAsActionInput = propagateModuleMapAsActionInput; } /** @@ -214,7 +217,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { public NestedSet<Artifact> getAdditionalInputs() { NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder(); builder.addTransitive(directModuleMaps); - if (cppModuleMap != null) { + if (cppModuleMap != null && propagateModuleMapAsActionInput) { builder.add(cppModuleMap.getArtifact()); } return builder.build(); @@ -262,7 +265,8 @@ public final class CppCompilationContext implements TransitiveInfoProvider { context.moduleInfo, context.picModuleInfo, context.directModuleMaps, - context.cppModuleMap); + context.cppModuleMap, + context.propagateModuleMapAsActionInput); } /** @@ -311,7 +315,8 @@ public final class CppCompilationContext implements TransitiveInfoProvider { moduleInfo.build(), picModuleInfo.build(), mergeSets(ownerContext.directModuleMaps, libContext.directModuleMaps), - libContext.cppModuleMap); + libContext.cppModuleMap, + libContext.propagateModuleMapAsActionInput); } /** @@ -373,6 +378,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { private final NestedSetBuilder<Artifact> directModuleMaps = NestedSetBuilder.stableOrder(); private final Set<String> defines = new LinkedHashSet<>(); private CppModuleMap cppModuleMap; + private boolean propagateModuleMapAsActionInput = true; /** The rule that owns the context */ private final RuleContext ruleContext; @@ -594,6 +600,14 @@ public final class CppCompilationContext implements TransitiveInfoProvider { } /** + * Causes the module map to be passed as an action input to dependant compilations. + */ + public Builder setPropagateCppModuleMapAsActionInput(boolean propagateModuleMap) { + this.propagateModuleMapAsActionInput = propagateModuleMap; + return this; + } + + /** * Sets the C++ header module in non-pic mode. * @param headerModule The .pcm file generated for this library. */ @@ -645,7 +659,8 @@ public final class CppCompilationContext implements TransitiveInfoProvider { moduleInfo.build(), picModuleInfo.build(), directModuleMaps.build(), - cppModuleMap); + cppModuleMap, + propagateModuleMapAsActionInput); } /** |