diff options
author | 2016-03-28 21:28:29 +0000 | |
---|---|---|
committer | 2016-03-29 10:52:46 +0000 | |
commit | 73e65c79ff53618f8c8326f864fa067fa15803a8 (patch) | |
tree | 2e27bb8940598d1d8ddf1c0f2419542a3d927a62 /src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java | |
parent | 3d69b4890d712f940e5ff06ee3256b384dcb3916 (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.java | 23 |
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. */ |