diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java | 16 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java index 50864716ad..e028cbb7be 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibrary.java @@ -181,6 +181,10 @@ public abstract class CcLibrary implements RuleConfiguredTargetFactory { CppFileTypes.CPP_HEADER)); ruleContext.checkSrcsSamePackage(true); } + if (ruleContext.getRule().isAttrDefined("textual_hdrs", Type.LABEL_LIST)) { + helper.addPublicTextualHeaders( + ruleContext.getPrerequisiteArtifacts("textual_hdrs", Mode.TARGET).list()); + } if (common.getLinkopts().contains("-static")) { ruleContext.attributeWarning("linkopts", "Using '-static' here won't work. " 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 9e31b974b8..a03fd9cd85 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 @@ -152,6 +152,7 @@ public final class CcLibraryHelper { private final CppSemantics semantics; private final List<Artifact> publicHeaders = new ArrayList<>(); + private final List<Artifact> publicTextualHeaders = new ArrayList<>(); private final List<Artifact> privateHeaders = new ArrayList<>(); private final List<PathFragment> additionalExportedHeaders = new ArrayList<>(); private final List<Pair<Artifact, Label>> sources = new ArrayList<>(); @@ -233,6 +234,18 @@ public final class CcLibraryHelper { } /** + * Add the corresponding files as public textual header files. These files will not be compiled + * into a target's header module, but will be made visible as textual includes to dependent rules. + */ + public CcLibraryHelper addPublicTextualHeaders(Iterable<Artifact> textualHeaders) { + Iterables.addAll(this.publicTextualHeaders, textualHeaders); + for (Artifact header : textualHeaders) { + this.additionalExportedHeaders.add(header.getExecPath()); + } + return this; + } + + /** * Add the corresponding files as source files. These may also be header files, in which case * they will not be compiled, but also not made visible as includes to dependent rules. */ @@ -711,10 +724,13 @@ public final class CcLibraryHelper { // There are no ordering constraints for declared include dirs/srcs, or the pregrepped headers. contextBuilder.addDeclaredIncludeSrcs(publicHeaders); + contextBuilder.addDeclaredIncludeSrcs(publicTextualHeaders); contextBuilder.addDeclaredIncludeSrcs(privateHeaders); contextBuilder.addPregreppedHeaderMap( CppHelper.createExtractInclusions(ruleContext, publicHeaders)); contextBuilder.addPregreppedHeaderMap( + CppHelper.createExtractInclusions(ruleContext, publicTextualHeaders)); + contextBuilder.addPregreppedHeaderMap( CppHelper.createExtractInclusions(ruleContext, privateHeaders)); contextBuilder.addCompilationPrerequisites(prerequisites); |