aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java14
2 files changed, 39 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 d61b803e60..f9c20db7d6 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
@@ -21,6 +21,7 @@ import com.google.devtools.build.lib.actions.Artifact;
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.Provider;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
@@ -314,6 +315,31 @@ public class AppleSkylarkCommon {
platform, xcodeConfig.getSdkVersionForPlatform(platform));
}
+ @SkylarkCallable(
+ name = "multi_arch_split",
+ doc = "A configuration transition for rule attributes to build dependencies in one or"
+ + " more Apple platforms. "
+ + "<p>Use of this transition requires that the 'platform_type' and 'minimum_os_version'"
+ + " string attributes are defined and mandatory on the rule.</p>"
+ + "<p>The value of the platform_type attribute will dictate the target architectures "
+ + " for which dependencies along this configuration transition will be built.</p>"
+ + "<p>Options are:</p>"
+ + "<ul>"
+ + "<li><code>ios</code>: architectures gathered from <code>--ios_multi_cpus</code>.</li>"
+ + "<li><code>macos</code>: architectures gathered from <code>--macos_cpus</code>.</li>"
+ + "<li><code>tvos</code>: architectures gathered from <code>--tvos_cpus</code>.</li>"
+ + "<li><code>watchos</code>: architectures gathered from <code>--watchos_cpus</code>."
+ + "</li></ul>"
+ + "<p>minimum_os_version should be a dotted version string such as '7.3', and is used to"
+ + " set the minimum operating system on the configuration similarly based on platform"
+ + " type. For example, specifying platform_type 'ios' and minimum_os_version '8.0' will"
+ + " ensure that dependencies are built with minimum iOS version '8.0'.",
+ structField = true
+ )
+ public SplitTransitionProvider getMultiArchSplitProvider() {
+ return new MultiArchSplitTransitionProvider();
+ }
+
@SkylarkSignature(
name = "new_objc_provider",
objectType = AppleSkylarkCommon.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
index 7d0e9af46f..394c2202b7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
@@ -35,6 +35,8 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform;
import com.google.devtools.build.lib.rules.apple.ApplePlatform.PlatformType;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
import com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.PlatformRule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
import java.util.List;
import java.util.stream.Collectors;
@@ -42,7 +44,7 @@ import java.util.stream.Collectors;
* {@link SplitTransitionProvider} implementation for multi-architecture apple rules which can
* accept different apple platform types (such as ios or watchos).
*/
-public class MultiArchSplitTransitionProvider implements SplitTransitionProvider {
+public class MultiArchSplitTransitionProvider implements SplitTransitionProvider, SkylarkValue {
@VisibleForTesting
static final String UNSUPPORTED_PLATFORM_TYPE_ERROR_FORMAT =
@@ -147,6 +149,16 @@ public class MultiArchSplitTransitionProvider implements SplitTransitionProvider
return new AppleBinaryTransition(platformType, minimumOsVersion);
}
+ @Override
+ public boolean isImmutable() {
+ return true;
+ }
+
+ @Override
+ public void repr(SkylarkPrinter printer) {
+ printer.append("apple_common.multi_arch_split");
+ }
+
/**
* Transition that results in one configured target per architecture specified in the
* platform-specific cpu flag for a particular platform type (for example, --watchos_cpus