aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2017-01-26 21:39:33 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2017-01-26 23:05:18 +0000
commit600468d110595e9c663d6b335a7a67a899f88261 (patch)
tree88b0598c6478c358207b02ae171978a38a62228a /src/main/java/com/google/devtools/build/lib/rules/cpp
parente2fbeb36f341cd4612692307a95e8be7a2e89744 (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.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java27
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);
}
/**