diff options
author | 2018-01-08 14:04:50 -0800 | |
---|---|---|
committer | 2018-01-08 14:06:20 -0800 | |
commit | 5a7d2575d3527a35b8ac541ae09591b6a040f67b (patch) | |
tree | ad6cf8d6d19022a2d9ac169efe593e0e6a6974e7 /src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java | |
parent | 5e708b99cc40f0f9bc99fd6bb962a2a3fae3bc64 (diff) |
Expose apple_common.link_multi_arch_binary to Skylark.
This API mimics the linking logic of apple_binary, and is a step to migrating apple_binary to skylark.
This API is *highly experimental* and subject to change.
RELNOTES: None.
PiperOrigin-RevId: 181215275
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java index b679558aae..6dec5fe3d2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java @@ -18,12 +18,16 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.analysis.skylark.SkylarkRuleContext; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider; import com.google.devtools.build.lib.packages.Info; +import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.Provider; +import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.packages.SkylarkAspect; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.ApplePlatform; @@ -32,12 +36,14 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.rules.apple.XcodeConfigProvider; import com.google.devtools.build.lib.rules.apple.XcodeVersionProperties; +import com.google.devtools.build.lib.rules.objc.AppleBinary.AppleBinaryOutput; import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature; import com.google.devtools.build.lib.syntax.BuiltinFunction; +import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.Runtime; import com.google.devtools.build.lib.syntax.SkylarkDict; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; @@ -54,7 +60,7 @@ import javax.annotation.Nullable; doc = "Functions for skylark to access internals of the apple rule implementations." ) public class AppleSkylarkCommon { - + @VisibleForTesting public static final String BAD_KEY_ERROR = "Argument %s not a recognized key, 'providers'," + " or 'direct_dep_providers'."; @@ -519,6 +525,27 @@ public class AppleSkylarkCommon { } }; + @SkylarkCallable( + name = "link_multi_arch_binary", + doc = "Links a (potentially multi-architecture) binary targeting Apple platforms. This " + + "method comprises a bulk of the logic of the <code>apple_binary</code> rule, and is " + + "exposed as an API to iterate on migration of <code>apple_binary</code> to skylark.\n" + + "<p>This API is <b>highly experimental</b> and subject to change at any time. Do not " + + "depend on the stability of this function at this time.", + mandatoryPositionals = 1 // The SkylarkRuleContext. + ) + // TODO(b/70937317): Iterate on, improve, and solidify this API. + public NativeInfo linkMultiArchBinary(SkylarkRuleContext skylarkRuleContext) + throws EvalException, InterruptedException { + try { + RuleContext ruleContext = skylarkRuleContext.getRuleContext(); + AppleBinaryOutput appleBinaryOutput = AppleBinary.linkMultiArchBinary(ruleContext); + return appleBinaryOutput.getBinaryInfoProvider(); + } catch (RuleErrorException exception) { + throw new EvalException(null, exception); + } + } + @SkylarkSignature( name = "dotted_version", objectType = AppleSkylarkCommon.class, |