aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
diff options
context:
space:
mode:
authorGravatar Cal Peyser <cpeyser@google.com>2016-03-28 21:28:29 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-03-29 10:52:46 +0000
commit73e65c79ff53618f8c8326f864fa067fa15803a8 (patch)
tree2e27bb8940598d1d8ddf1c0f2419542a3d927a62 /src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
parent3d69b4890d712f940e5ff06ee3256b384dcb3916 (diff)
Skylark providers exported under the key "objc" are consumed as ObjcProvider instances by dependant objc_binary targets.
-- MOS_MIGRATED_REVID=118395529
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
index 0b5b7ba848..6a999cab65 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.RunfilesSupport;
+import com.google.devtools.build.lib.analysis.SkylarkProviders;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
@@ -37,6 +38,7 @@ import com.google.devtools.build.lib.rules.objc.ObjcCommon.CompilationAttributes
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.LinkedBinary;
import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider;
+import com.google.devtools.build.lib.syntax.ClassObject.SkylarkClassObject;
/**
* Implementation for rules that link binaries.
@@ -212,6 +214,8 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
.setHasModuleMap()
.setLinkedBinary(intermediateArtifacts.strippedSingleArchitectureBinary());
+ builder.addDepObjcProviders(createSkylarkObjcProviders(ruleContext));
+
if (ObjcRuleClasses.objcConfiguration(ruleContext).generateDebugSymbols()) {
builder.setBreakpadFile(intermediateArtifacts.breakpadSym());
}
@@ -220,6 +224,25 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
}
/**
+ * Constructs an ObjcProvider instance for each skylark objc provider in this target's
+ * dependencies.
+ */
+ private Iterable<ObjcProvider> createSkylarkObjcProviders(RuleContext ruleContext) {
+ ImmutableList.Builder<ObjcProvider> skylarkProviderListBuilder = ImmutableList.builder();
+ for (SkylarkProviders skylarkProviders :
+ ruleContext.getPrerequisites("deps", Mode.TARGET, SkylarkProviders.class)) {
+ Object objcSkylarkProvider =
+ skylarkProviders.getValue(ObjcProvider.OBJC_SKYLARK_PROVIDER_NAME);
+ if (objcSkylarkProvider != null) {
+ ObjcProvider objcProviderFromSkylark =
+ ObjcProvider.fromSkylarkProvider((SkylarkClassObject) objcSkylarkProvider);
+ skylarkProviderListBuilder.add(objcProviderFromSkylark);
+ }
+ }
+ return skylarkProviderListBuilder.build();
+ }
+
+ /**
* Performs additional configuration of the target. The default implementation does nothing, but
* subclasses may override it to add logic.
*/