aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-10-26 11:33:39 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2016-10-27 09:22:31 +0000
commit43237e46fb78e81ab17f22622c7b177b52d58695 (patch)
tree232270d0fc212893c3eef7969f3bbd409e5638bd /src/main/java/com/google/devtools/build/lib/rules/cpp
parenta3c25a6ce14156bad75f9fd971ffc58320d28c9f (diff)
Create a separate module for .proto.h files. Together with modules pruning,
this allows reaping some of the benefits of .proto.h files even without completely disabling .pb.h files. -- MOS_MIGRATED_REVID=137261686
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.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java16
2 files changed, 26 insertions, 7 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 dc6dd1faff..bfc13a2f26 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
@@ -251,6 +251,7 @@ public final class CcLibraryHelper {
private final List<Artifact> publicTextualHeaders = new ArrayList<>();
private final List<Artifact> privateHeaders = new ArrayList<>();
private final List<PathFragment> additionalExportedHeaders = new ArrayList<>();
+ private final List<CppModuleMap> additionalCppModuleMaps = new ArrayList<>();
private final Set<CppSource> compilationUnitSources = new LinkedHashSet<>();
private final List<Artifact> objectFiles = new ArrayList<>();
private final List<Artifact> picObjectFiles = new ArrayList<>();
@@ -261,6 +262,7 @@ public final class CcLibraryHelper {
private final Set<String> defines = new LinkedHashSet<>();
private final List<TransitiveInfoCollection> implementationDeps = new ArrayList<>();
private final List<TransitiveInfoCollection> interfaceDeps = new ArrayList<>();
+ private final List<CppCompilationContext> depContexts = new ArrayList<>();
private final NestedSetBuilder<Artifact> linkstamps = NestedSetBuilder.stableOrder();
private final List<PathFragment> looseIncludeDirs = new ArrayList<>();
private final List<PathFragment> systemIncludeDirs = new ArrayList<>();
@@ -612,6 +614,11 @@ public final class CcLibraryHelper {
return this;
}
+ public CcLibraryHelper addDepContext(CppCompilationContext dep) {
+ this.depContexts.add(Preconditions.checkNotNull(dep));
+ return this;
+ }
+
/**
* Similar to @{link addDeps}, but adds the given targets as implementation dependencies.
* Implementation dependencies are required to actually build a target, but are not required to
@@ -1119,6 +1126,9 @@ public final class CcLibraryHelper {
contextBuilder.mergeDependentContexts(
AnalysisUtils.getProviders(
forInterface ? interfaceDeps : implementationDeps, CppCompilationContext.class));
+ for (CppCompilationContext depContext : depContexts) {
+ contextBuilder.mergeDependentContext(depContext);
+ }
CppHelper.mergeToolchainDependentContext(ruleContext, contextBuilder);
// But defines come after those inherited from deps.
@@ -1212,6 +1222,9 @@ public final class CcLibraryHelper {
if (toolchain != null) {
result.add(toolchain.getCppCompilationContext().getCppModuleMap());
}
+ for (CppModuleMap additionalCppModuleMap : additionalCppModuleMaps) {
+ result.add(additionalCppModuleMap);
+ }
return Iterables.filter(result, Predicates.<CppModuleMap>notNull());
}
@@ -1322,4 +1335,8 @@ public final class CcLibraryHelper {
? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)
: compilationOutputs.getTemps();
}
+
+ public void registerAdditionalModuleMap(CppModuleMap cppModuleMap) {
+ this.additionalCppModuleMaps.add(Preconditions.checkNotNull(cppModuleMap));
+ }
}
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 beed4b80e3..0eb81fef29 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
@@ -210,15 +210,15 @@ public final class CppCompilationContext implements TransitiveInfoProvider {
NestedSet<Pair<Artifact, Artifact>> getPregreppedHeaders() {
return pregreppedHdrs;
}
-
+
public NestedSet<Artifact> getTransitiveModules(boolean usePic) {
return usePic ? picModuleInfo.transitiveModules : moduleInfo.transitiveModules;
}
-
+
public Set<Artifact> getTopLevelModules(boolean usePic) {
return usePic ? picModuleInfo.getTopLevelModules() : moduleInfo.getTopLevelModules();
}
-
+
public Collection<Artifact> getUsedModules(boolean usePic, Set<Artifact> usedHeaders) {
return usePic
? picModuleInfo.getUsedModules(usedHeaders)
@@ -725,7 +725,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider {
provideTransitiveModuleMaps,
useHeaderModules);
}
-
+
/**
* Creates a middleman for the compilation prerequisites.
*
@@ -754,8 +754,10 @@ public final class CppCompilationContext implements TransitiveInfoProvider {
// Such middleman will be ignored by the dependency checker yet will still
// represent an edge in the action dependency graph - forcing proper execution
// order and error propagation.
+ String name =
+ cppModuleMap != null ? cppModuleMap.getName() : ruleContext.getLabel().toString();
return middlemanFactory.createErrorPropagatingMiddleman(
- owner, ruleContext.getLabel().toString(), purpose,
+ owner, name, purpose,
ImmutableList.copyOf(compilationPrerequisites),
ruleContext.getConfiguration().getMiddlemanDirectory(
ruleContext.getRule().getRepository()));
@@ -879,7 +881,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider {
private NestedSetBuilder<Artifact> impliedModules = NestedSetBuilder.stableOrder();
private NestedSetBuilder<TransitiveModuleHeaders> transitiveModuleHeaders =
NestedSetBuilder.stableOrder();
-
+
public Builder setHeaderModule(Artifact headerModule) {
this.headerModule = headerModule;
return this;
@@ -945,7 +947,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider {
}
}
}
-
+
/**
* Collects data for a specific module in a special format that makes pruning easy.
*/