aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2018-04-30 11:22:24 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-30 11:23:42 -0700
commit968f87900dce45a7af749a965b72dbac51b176b3 (patch)
treec8fe0ed7bb3d1a138206047bbd4160e4d28d2e7f /src/main/java/com
parent678bdb78a7971d9155297099aaac594f03d663fc (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContextInfo.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommon.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcLibrary.java2
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();