diff options
author | 2016-10-13 23:10:42 +0000 | |
---|---|---|
committer | 2016-10-14 09:33:29 +0000 | |
commit | 322f531f12addfe2c4671eb5d3a0ea8b9f2843ac (patch) | |
tree | 244b38e101813602163b7a90f8c32ab86e2c8a31 /src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java | |
parent | fe868010626115a9c6978c337f19549278965872 (diff) |
Validate ios platform corresponds with watchos platform in watchos extension rule.
--
MOS_MIGRATED_REVID=136099460
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java index 2bfbdc22b6..bf0b2d951c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleWatch2Extension.java @@ -20,6 +20,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag.HAS_WAT import static com.google.devtools.build.lib.rules.objc.ObjcProvider.MERGE_ZIP; import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.WatchApplicationBundleRule.WATCH_APP_NAME_ATTR; +import com.google.common.base.Joiner; import com.google.common.collect.HashMultiset; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -32,6 +33,9 @@ import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; +import com.google.devtools.build.lib.rules.apple.AppleConfiguration; +import com.google.devtools.build.lib.rules.apple.Platform; +import com.google.devtools.build.lib.rules.apple.Platform.PlatformType; import com.google.devtools.build.lib.rules.objc.WatchUtils.WatchOSVersion; import com.google.devtools.build.lib.rules.test.InstrumentedFilesCollector; import com.google.devtools.build.lib.rules.test.InstrumentedFilesProvider; @@ -46,7 +50,7 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory { @Override public ConfiguredTarget create(RuleContext ruleContext) throws InterruptedException, RuleErrorException { - validateAttributes(ruleContext); + validateAttributesAndConfiguration(ruleContext); ObjcProvider.Builder exposedObjcProviderBuilder = new ObjcProvider.Builder(); NestedSetBuilder<Artifact> filesToBuild = NestedSetBuilder.stableOrder(); @@ -100,14 +104,11 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory { * depending targets. * * @param ruleContext rule context in which to create the bundle + * @param extensionIpa the artifact representing the final extension bundle ipa * @param filesToBuild the list to contain the files to be built for this bundle - * @param exposedObjcProviderBuilder builder of {@link ObjcProvider} exposed to the parent target; - * bundling information will be added to this builder */ private void createWatchApplicationBundle( - RuleContext ruleContext, - Artifact extensionIpa, - NestedSetBuilder<Artifact> filesToBuild) + RuleContext ruleContext, Artifact extensionIpa, NestedSetBuilder<Artifact> filesToBuild) throws InterruptedException { new WatchApplicationSupport( ruleContext, @@ -141,7 +142,8 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory { return ruleContext.getLabel().getName(); } - private void validateAttributes(RuleContext ruleContext) throws RuleErrorException { + private void validateAttributesAndConfiguration(RuleContext ruleContext) + throws RuleErrorException { boolean hasError = false; Multiset<Artifact> appResources = HashMultiset.create(); @@ -170,6 +172,32 @@ public class AppleWatch2Extension implements RuleConfiguredTargetFactory { } } + AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); + Platform watchPlatform = appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS); + Platform iosPlatform = appleConfiguration.getMultiArchPlatform(PlatformType.IOS); + if (watchPlatform.isDevice() != iosPlatform.isDevice()) { + hasError = true; + if (watchPlatform.isDevice()) { + ruleContext.ruleError( + String.format( + "Building a watch extension for watch device architectures [%s] " + + "requires a device ios architecture. Found [%s] instead.", + Joiner.on(",").join(appleConfiguration.getMultiArchitectures(PlatformType.WATCHOS)), + Joiner.on(",").join(appleConfiguration.getMultiArchitectures(PlatformType.IOS)))); + } else { + ruleContext.ruleError( + String.format( + "Building a watch extension for ios device architectures [%s] " + + "requires a device watch architecture. Found [%s] instead.", + Joiner.on(",").join(appleConfiguration.getMultiArchitectures(PlatformType.IOS)), + Joiner.on(",") + .join(appleConfiguration.getMultiArchitectures(PlatformType.WATCHOS)))); + } + ruleContext.ruleError( + "For building watch extension, there may only be a watch device " + + "architecture if and only if there is an ios device architecture"); + } + if (hasError) { throw new RuleErrorException(); } |