diff options
author | 2018-04-30 11:22:24 -0700 | |
---|---|---|
committer | 2018-04-30 11:23:42 -0700 | |
commit | 968f87900dce45a7af749a965b72dbac51b176b3 (patch) | |
tree | c8fe0ed7bb3d1a138206047bbd4160e4d28d2e7f /src/main/java/com/google/devtools/build/lib | |
parent | 678bdb78a7971d9155297099aaac594f03d663fc (diff) |
Headers specified in cc_library.textual_hdrs are passed through objc_library
targets to upstream cc_library targets.
PiperOrigin-RevId: 194816009
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
3 files changed, 23 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContextInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContextInfo.java index efd15ac512..3603f20e4f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContextInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContextInfo.java @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -198,6 +199,11 @@ public final class CcCompilationContextInfo { return declaredIncludeSrcs; } + /** Returns headers given as textual_hdrs in this target. */ + public ImmutableSet<Artifact> getTextualHdrs() { + return moduleInfo.textualHeaders; + } + /** * Returns the immutable pairs of (header file, pregrepped header file). The value artifacts * (pregrepped header file) are generated by {@link ExtractInclusionAction}. @@ -687,6 +693,9 @@ public final class CcCompilationContextInfo { @VisibleForTesting // productionVisibility = Visibility.PRIVATE public CcCompilationContextInfo build(ActionOwner owner, MiddlemanFactory middlemanFactory) { + Preconditions.checkState( + Objects.equals(moduleInfo.textualHeaders, picModuleInfo.textualHeaders), + "Module and PIC module's textual headers are expected to be identical"); // We don't create middlemen in LIPO collector subtree, because some target CT // will do that instead. Artifact prerequisiteStampFile = (ruleContext != null diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java index c13c0757be..f53d612f97 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java @@ -156,6 +156,7 @@ public final class ObjcCommon { private Iterable<Artifact> staticFrameworkImports = ImmutableList.of(); private Iterable<Artifact> dynamicFrameworkImports = ImmutableList.of(); private Optional<CompilationArtifacts> compilationArtifacts = Optional.absent(); + private ImmutableSet.Builder<Artifact> textualHeaders = ImmutableSet.builder(); private Iterable<ObjcProvider> depObjcProviders = ImmutableList.of(); private Iterable<ObjcProvider> directDepObjcProviders = ImmutableList.of(); private Iterable<ObjcProvider> runtimeDepObjcProviders = ImmutableList.of(); @@ -461,6 +462,7 @@ public final class ObjcCommon { // probably shouldn't. objcProvider.addAll(INCLUDE_SYSTEM, headerProvider.getSystemIncludeDirs()); objcProvider.addAll(DEFINE, headerProvider.getDefines()); + textualHeaders.addAll(headerProvider.getTextualHdrs()); } for (CcLinkParamsInfo linkProvider : depCcLinkProviders) { CcLinkParams params = linkProvider.getCcLinkParams(true, false); @@ -607,7 +609,7 @@ public final class ObjcCommon { .add(DEBUG_SYMBOLS_PLIST, intermediateArtifacts.dsymPlist(dsymOutputType)); } - return new ObjcCommon(objcProvider.build(), compilationArtifacts); + return new ObjcCommon(objcProvider.build(), compilationArtifacts, textualHeaders.build()); } private static boolean useStrictObjcModuleMaps(RuleContext context) { @@ -653,11 +655,15 @@ public final class ObjcCommon { private final ObjcProvider objcProvider; private final Optional<CompilationArtifacts> compilationArtifacts; + private final ImmutableSet<Artifact> textualHdrs; private ObjcCommon( - ObjcProvider objcProvider, Optional<CompilationArtifacts> compilationArtifacts) { + ObjcProvider objcProvider, + Optional<CompilationArtifacts> compilationArtifacts, + ImmutableSet<Artifact> textualHdrs) { this.objcProvider = Preconditions.checkNotNull(objcProvider); this.compilationArtifacts = Preconditions.checkNotNull(compilationArtifacts); + this.textualHdrs = textualHdrs; } public ObjcProvider getObjcProvider() { @@ -668,6 +674,10 @@ public final class ObjcCommon { return compilationArtifacts; } + public ImmutableSet<Artifact> getTextualHdrs() { + return textualHdrs; + } + /** * Returns an {@link Optional} containing the compiled {@code .a} file, or * {@link Optional#absent()} if this object contains no {@link CompilationArtifacts} or the diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java index 5d1accfa4a..0c55c45c10 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java @@ -101,6 +101,8 @@ public class ObjcLibrary implements RuleConfiguredTargetFactory { .build() .hdrs() .toCollection()) + .addTextualHdrs(common.getTextualHdrs()) + .addDeclaredIncludeSrcs(common.getTextualHdrs()) .build(); CcCompilationInfo.Builder ccCompilationInfoBuilder = CcCompilationInfo.Builder.create(); |