diff options
author | 2017-03-31 16:47:00 +0000 | |
---|---|---|
committer | 2017-04-03 13:36:56 +0200 | |
commit | f1309c4b699dfae293136a8adf041ee3ca4a75a4 (patch) | |
tree | 3b2f25a19fba03df646c9a1bda706e427769adee /src/main/java/com/google/devtools/build/lib | |
parent | 090351eec48eec401efbbf28885b1258a8416ea1 (diff) |
Allow protoc to emit annotation metadata files in addition to generated source.
This includes the necessary changes to both CcSupport and JavaSupport to enable the protoc
flags when enabled on the Blaze command line as well as the plumbing to the C++ rules to allow
Kythe `.h.meta` files to be included as transitive required inputs.
PiperOrigin-RevId: 151833238
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java | 9 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompilationContext.java | 17 |
2 files changed, 26 insertions, 0 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 f3f2e70026..248bcfd23f 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 @@ -254,6 +254,7 @@ public final class CcLibraryHelper { private final List<Artifact> nonModuleMapHeaders = new ArrayList<>(); private final List<Artifact> publicTextualHeaders = new ArrayList<>(); private final List<Artifact> privateHeaders = new ArrayList<>(); + private final List<Artifact> additionalInputs = new ArrayList<>(); private final List<PathFragment> additionalExportedHeaders = new ArrayList<>(); private final List<CppModuleMap> additionalCppModuleMaps = new ArrayList<>(); private final Set<CppSource> compilationUnitSources = new LinkedHashSet<>(); @@ -479,6 +480,12 @@ public final class CcLibraryHelper { return addSources(Arrays.asList(sources)); } + /** Add the corresponding files as non-header, non-source input files. */ + public CcLibraryHelper addAdditionalInputs(Collection<Artifact> inputs) { + Iterables.addAll(additionalInputs, inputs); + return this; + } + /** * Adds a header to {@code publicHeaders} and in case header processing is switched on for the * file type also to compilationUnitSources. @@ -1323,6 +1330,8 @@ public final class CcLibraryHelper { contextBuilder.addDeclaredIncludeSrcs(publicHeaders.getHeaders()); contextBuilder.addDeclaredIncludeSrcs(publicTextualHeaders); contextBuilder.addDeclaredIncludeSrcs(privateHeaders); + contextBuilder.addDeclaredIncludeSrcs(additionalInputs); + contextBuilder.addNonCodeInputs(additionalInputs); contextBuilder.addModularHdrs(publicHeaders.getHeaders()); contextBuilder.addModularHdrs(privateHeaders); contextBuilder.addTextualHdrs(publicTextualHeaders); 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 e33c655b66..1cf5252991 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 @@ -58,6 +58,9 @@ public final class CppCompilationContext implements TransitiveInfoProvider { */ private final NestedSet<Artifact> directModuleMaps; + /** Non-code mandatory compilation inputs. */ + private final NestedSet<Artifact> nonCodeInputs; + private final NestedSet<Pair<Artifact, Artifact>> pregreppedHdrs; private final ModuleInfo moduleInfo; @@ -78,6 +81,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { NestedSet<PathFragment> declaredIncludeWarnDirs, NestedSet<Artifact> declaredIncludeSrcs, NestedSet<Pair<Artifact, Artifact>> pregreppedHdrs, + NestedSet<Artifact> nonCodeInputs, ModuleInfo moduleInfo, ModuleInfo picModuleInfo, NestedSet<Artifact> directModuleMaps, @@ -94,6 +98,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { this.moduleInfo = moduleInfo; this.picModuleInfo = picModuleInfo; this.cppModuleMap = cppModuleMap; + this.nonCodeInputs = nonCodeInputs; this.verificationModuleMap = verificationModuleMap; this.compilationPrerequisites = compilationPrerequisites; this.propagateModuleMapAsActionInput = propagateModuleMapAsActionInput; @@ -222,6 +227,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { public NestedSet<Artifact> getAdditionalInputs() { NestedSetBuilder<Artifact> builder = NestedSetBuilder.stableOrder(); builder.addTransitive(directModuleMaps); + builder.addTransitive(nonCodeInputs); if (cppModuleMap != null && propagateModuleMapAsActionInput) { builder.add(cppModuleMap.getArtifact()); } @@ -267,6 +273,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { NestedSetBuilder.<PathFragment>emptySet(Order.STABLE_ORDER), context.declaredIncludeSrcs, context.pregreppedHdrs, + context.nonCodeInputs, context.moduleInfo, context.picModuleInfo, context.directModuleMaps, @@ -318,6 +325,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { mergeSets(ownerContext.declaredIncludeWarnDirs, libContext.declaredIncludeWarnDirs), mergeSets(ownerContext.declaredIncludeSrcs, libContext.declaredIncludeSrcs), mergeSets(ownerContext.pregreppedHdrs, libContext.pregreppedHdrs), + mergeSets(ownerContext.nonCodeInputs, libContext.nonCodeInputs), moduleInfo.build(), picModuleInfo.build(), mergeSets(ownerContext.directModuleMaps, libContext.directModuleMaps), @@ -385,6 +393,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { NestedSetBuilder.stableOrder(); private final NestedSetBuilder<Pair<Artifact, Artifact>> pregreppedHdrs = NestedSetBuilder.stableOrder(); + private final NestedSetBuilder<Artifact> nonCodeInputs = NestedSetBuilder.stableOrder(); private final ModuleInfo.Builder moduleInfo = new ModuleInfo.Builder(); private final ModuleInfo.Builder picModuleInfo = new ModuleInfo.Builder(); private final NestedSetBuilder<Artifact> directModuleMaps = NestedSetBuilder.stableOrder(); @@ -439,6 +448,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { pregreppedHdrs.addTransitive(otherContext.getPregreppedHeaders()); moduleInfo.addTransitive(otherContext.moduleInfo); picModuleInfo.addTransitive(otherContext.picModuleInfo); + nonCodeInputs.addTransitive(otherContext.nonCodeInputs); // All module maps of direct dependencies are inputs to the current compile independently of // the build type. @@ -596,6 +606,12 @@ public final class CppCompilationContext implements TransitiveInfoProvider { return this; } + /** Add a set of required non-code compilation input. */ + public Builder addNonCodeInputs(Iterable<Artifact> inputs) { + nonCodeInputs.addAll(inputs); + return this; + } + /** * Adds a single define. */ @@ -682,6 +698,7 @@ public final class CppCompilationContext implements TransitiveInfoProvider { declaredIncludeWarnDirs.build(), declaredIncludeSrcs.build(), pregreppedHdrs.build(), + nonCodeInputs.build(), moduleInfo.build(), picModuleInfo.build(), directModuleMaps.build(), |