aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-01-08 14:04:50 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-08 14:06:20 -0800
commit5a7d2575d3527a35b8ac541ae09591b6a040f67b (patch)
treead6cf8d6d19022a2d9ac169efe593e0e6a6974e7 /src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java
parent5e708b99cc40f0f9bc99fd6bb962a2a3fae3bc64 (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.java29
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,