diff options
author | 2016-10-26 11:33:39 +0000 | |
---|---|---|
committer | 2016-10-27 09:22:31 +0000 | |
commit | 43237e46fb78e81ab17f22622c7b177b52d58695 (patch) | |
tree | 232270d0fc212893c3eef7969f3bbd409e5638bd /src/main/java/com/google/devtools/build/lib/rules/cpp | |
parent | a3c25a6ce14156bad75f9fd971ffc58320d28c9f (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.java | 17 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java | 16 |
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. */ |