aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-04-05 00:33:31 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-04-05 14:08:58 +0000
commitf07fd407c2b618b4ed0dc05edaa8d38a6918f5c4 (patch)
tree625b829d8162bae986f3c5edec006a3fbcd31909 /src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java
parentae8d6873a400393f14ab6ed7bd8d810ebfed5beb (diff)
Add 'apple_watch1_extension' and 'apple_watch_extension_binary' to support building watch OS 1 apps.
RELNOTES: Support apple_watch1_extension and apple_watch_extension_binary rules for creating watch OS 1 extensions. -- MOS_MIGRATED_REVID=119000703
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java53
1 files changed, 37 insertions, 16 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java
index 8602a83bbf..b07a36ebb8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java
@@ -35,6 +35,10 @@ import java.io.Serializable;
*/
public class IosExtension extends ReleaseBundlingTargetFactory {
+ // Apple only accepts extensions starting at 8.0.
+ @VisibleForTesting
+ static final DottedVersion EXTENSION_MINIMUM_OS_VERSION = DottedVersion.fromString("8.0");
+
/**
* Transition that when applied to a target generates a configured target for each value in
* {@code --ios_multi_cpus}, such that {@code --ios_cpu} is set to a different one of those values
@@ -44,11 +48,8 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
* --ios_minimum_os} is at least {@code 8.0} as Apple requires this for extensions.
*/
static final SplitTransition<BuildOptions> MINIMUM_OS_AND_SPLIT_ARCH_TRANSITION =
- new ExtensionSplitArchTransition();
-
- // Apple only accepts extensions starting at 8.0.
- @VisibleForTesting
- static final DottedVersion EXTENSION_MINIMUM_OS_VERSION = DottedVersion.fromString("8.0");
+ new ExtensionSplitArchTransition(EXTENSION_MINIMUM_OS_VERSION,
+ ConfigurationDistinguisher.IOS_EXTENSION);
public IosExtension() {
super(ReleaseBundlingSupport.EXTENSION_BUNDLE_DIR_FORMAT, XcodeProductType.EXTENSION,
@@ -58,7 +59,8 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
@Override
protected DottedVersion bundleMinimumOsVersion(RuleContext ruleContext) {
- return determineMinimumOsVersion(ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs());
+ return determineMinimumOsVersion(ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs(),
+ EXTENSION_MINIMUM_OS_VERSION);
}
@Override
@@ -69,24 +71,43 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
.build();
}
- private static DottedVersion determineMinimumOsVersion(DottedVersion fromFlag) {
- // Extensions are not accepted by Apple below version 8.0. While applications built with a
- // minimum iOS version of less than 8.0 may contain extensions in their bundle, the extension
- // itself needs to be built with 8.0 or higher. This logic overrides (if necessary) any
- // flag-set minimum iOS version for extensions only so that this requirement is not violated.
- return Ordering.natural().max(fromFlag, EXTENSION_MINIMUM_OS_VERSION);
+
+ /**
+ * Overrides (if necessary) any flag-set minimum iOS version for extensions only with given
+ * minimum OS version.
+ *
+ * Extensions are not accepted by Apple below given mininumOSVersion. While applications built
+ * with a minimum iOS version of less than give version may contain extensions in their bundle,
+ * the extension itself needs to be built with given version or higher.
+ *
+ * @param fromFlag the minimum OS version from command line flag
+ * @param minimumOSVersion the minumum OS version the extension should be built with
+ */
+ private static DottedVersion determineMinimumOsVersion(DottedVersion fromFlag,
+ DottedVersion minimumOSVersion) {
+ return Ordering.natural().max(fromFlag, minimumOSVersion);
}
/**
* Split transition that configures the minimum iOS version in addition to architecture splitting.
*/
- private static class ExtensionSplitArchTransition extends SplitArchTransition
+ static class ExtensionSplitArchTransition extends SplitArchTransition
implements Serializable {
+ private final DottedVersion minimumOSVersion;
+ private final ConfigurationDistinguisher configurationDistinguisher;
+
+ ExtensionSplitArchTransition(DottedVersion minimumOSVersion,
+ ConfigurationDistinguisher configurationDistinguisher) {
+ this.minimumOSVersion = minimumOSVersion;
+ this.configurationDistinguisher = configurationDistinguisher;
+ }
+
@Override
protected ImmutableList<BuildOptions> defaultOptions(BuildOptions originalOptions) {
ObjcCommandLineOptions objcOptions = originalOptions.get(ObjcCommandLineOptions.class);
- DottedVersion newMinimumVersion = determineMinimumOsVersion(objcOptions.iosMinimumOs);
+ DottedVersion newMinimumVersion = determineMinimumOsVersion(objcOptions.iosMinimumOs,
+ minimumOSVersion);
if (newMinimumVersion.equals(objcOptions.iosMinimumOs)) {
return ImmutableList.of();
@@ -102,12 +123,12 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
@Override
protected void setAdditionalOptions(BuildOptions splitOptions, BuildOptions originalOptions) {
DottedVersion fromFlag = originalOptions.get(ObjcCommandLineOptions.class).iosMinimumOs;
- setMinimumOsVersion(splitOptions, determineMinimumOsVersion(fromFlag));
+ setMinimumOsVersion(splitOptions, determineMinimumOsVersion(fromFlag, minimumOSVersion));
}
@Override
protected ConfigurationDistinguisher getConfigurationDistinguisher() {
- return ConfigurationDistinguisher.IOS_EXTENSION;
+ return configurationDistinguisher;
}
private void setMinimumOsVersion(BuildOptions splitOptions, DottedVersion newMinimumVersion) {