aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/objc
diff options
context:
space:
mode:
authorGravatar Chris Parsons <cparsons@google.com>2016-09-29 21:55:45 +0000
committerGravatar Yun Peng <pcloudy@google.com>2016-09-30 08:15:01 +0000
commit1eac7e8195158a1b88dd6d1f11e5690ec387e077 (patch)
treedd8082c264e969c6f84ec5d10c6f89cccc29df1a /src/main/java/com/google/devtools/build/lib/rules/objc
parent29dc3f7dabc24f9e032ffc3602c0f928babdf1ad (diff)
Use minimum OS flags for watchOS and tvOS actions.
Also: - Move minimum os information into AppleConfiguration - Update watchos and tvos minimum version defaulting behavior such that, if unspecified in flags, the minimum OS is equal to the SDK version. - Expose Apple Platform to apple_common in skylark -- MOS_MIGRATED_REVID=134712763
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.java19
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosExtension.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java34
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java36
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java4
16 files changed, 53 insertions, 125 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 ed5b6d8d40..5583c4ece6 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
@@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.objc;
import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.rules.apple.AppleToolchain;
+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.ObjcProvider.Key;
import com.google.devtools.build.lib.skylarkinterface.Param;
@@ -26,7 +27,6 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature;
import com.google.devtools.build.lib.syntax.BuiltinFunction;
import com.google.devtools.build.lib.syntax.SkylarkDict;
import com.google.devtools.build.lib.syntax.SkylarkSignatureProcessor;
-
import java.util.Map.Entry;
import javax.annotation.Nullable;
@@ -64,6 +64,8 @@ public class AppleSkylarkCommon {
@Nullable
private SkylarkClassObject platformType;
+ @Nullable
+ private SkylarkClassObject platform;
@SkylarkCallable(
name = "apple_toolchain",
@@ -89,6 +91,21 @@ public class AppleSkylarkCommon {
return platformType;
}
+ @SkylarkCallable(
+ name = "platform",
+ doc = "Returns a struct containing fields corresponding to Apple platforms. These values "
+ + "can be passed to methods that expect a platform, like the 'apple' configuration "
+ + "fragment's 'sdk_version_for_platform' method. Each platform_type except for macosx "
+ + "has two platform types -- one for device, and one for simulator.",
+ structField = true
+ )
+ public SkylarkClassObject getPlatformStruct() {
+ if (platform == null) {
+ platform = Platform.getSkylarkStruct();
+ }
+ return platform;
+ }
+
@SkylarkSignature(
name = "new_objc_provider",
objectType = AppleSkylarkCommon.class,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
index f214487e05..9e72c42549 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BinaryLinkingTargetFactory.java
@@ -122,7 +122,6 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
Optional<XcTestAppProvider> xcTestAppProvider;
Optional<RunfilesSupport> maybeRunfilesSupport = Optional.absent();
- ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext);
switch (hasReleaseBundlingSupport) {
case YES:
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
@@ -133,7 +132,7 @@ abstract class BinaryLinkingTargetFactory implements RuleConfiguredTargetFactory
objcProvider,
LinkedBinary.LOCAL_AND_DEPENDENCIES,
ReleaseBundlingSupport.APP_BUNDLE_DIR_FORMAT,
- objcConfiguration.getMinimumOs(),
+ appleConfiguration.getMinimumOsForPlatformType(PlatformType.IOS),
appleConfiguration.getSingleArchPlatform());
releaseBundlingSupport
.registerActions(DsymOutputType.APP)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 31322dbb34..fa16aaf3f9 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -1799,11 +1799,11 @@ public final class CompilationSupport {
switch (platform) {
case IOS_SIMULATOR:
builder.add("-mios-simulator-version-min="
- + objcConfiguration.getMinimumOsForPlatformType(platform.getType()));
+ + appleConfiguration.getMinimumOsForPlatformType(platform.getType()));
break;
case IOS_DEVICE:
builder.add("-miphoneos-version-min="
- + objcConfiguration.getMinimumOsForPlatformType(platform.getType()));
+ + appleConfiguration.getMinimumOsForPlatformType(platform.getType()));
break;
case WATCHOS_SIMULATOR:
// TODO(bazel-team): Use the value from --watchos-minimum-os instead of tying to the SDK
@@ -1819,11 +1819,11 @@ public final class CompilationSupport {
break;
case TVOS_SIMULATOR:
builder.add("-mtvos-simulator-version-min="
- + objcConfiguration.getMinimumOsForPlatformType(platform.getType()));
+ + appleConfiguration.getMinimumOsForPlatformType(platform.getType()));
break;
case TVOS_DEVICE:
builder.add("-mtvos-version-min="
- + objcConfiguration.getMinimumOsForPlatformType(platform.getType()));
+ + appleConfiguration.getMinimumOsForPlatformType(platform.getType()));
break;
default:
throw new IllegalArgumentException("Unhandled platform " + platform);
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 f4435d4a0f..184dcdced5 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
@@ -25,10 +25,11 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.rules.apple.AppleCommandLineOptions;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
+import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.objc.ReleaseBundlingSupport.SplitArchTransition;
-
import java.io.Serializable;
/**
@@ -60,7 +61,9 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
@Override
protected DottedVersion bundleMinimumOsVersion(RuleContext ruleContext) {
- return determineMinimumOsVersion(ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs(),
+ return determineMinimumOsVersion(
+ ruleContext.getFragment(AppleConfiguration.class)
+ .getMinimumOsForPlatformType(PlatformType.IOS),
EXTENSION_MINIMUM_OS_VERSION);
}
@@ -110,11 +113,11 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
@Override
protected ImmutableList<BuildOptions> defaultOptions(BuildOptions originalOptions) {
- ObjcCommandLineOptions objcOptions = originalOptions.get(ObjcCommandLineOptions.class);
- DottedVersion newMinimumVersion = determineMinimumOsVersion(objcOptions.iosMinimumOs,
+ AppleCommandLineOptions appleOptions = originalOptions.get(AppleCommandLineOptions.class);
+ DottedVersion newMinimumVersion = determineMinimumOsVersion(appleOptions.iosMinimumOs,
minimumOSVersion);
- if (newMinimumVersion.equals(objcOptions.iosMinimumOs)) {
+ if (newMinimumVersion.equals(appleOptions.iosMinimumOs)) {
return ImmutableList.of();
}
@@ -127,7 +130,7 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
@Override
protected void setAdditionalOptions(BuildOptions splitOptions, BuildOptions originalOptions) {
- DottedVersion fromFlag = originalOptions.get(ObjcCommandLineOptions.class).iosMinimumOs;
+ DottedVersion fromFlag = originalOptions.get(AppleCommandLineOptions.class).iosMinimumOs;
setMinimumOsVersion(splitOptions, determineMinimumOsVersion(fromFlag, minimumOSVersion));
}
@@ -137,7 +140,7 @@ public class IosExtension extends ReleaseBundlingTargetFactory {
}
private void setMinimumOsVersion(BuildOptions splitOptions, DottedVersion newMinimumVersion) {
- splitOptions.get(ObjcCommandLineOptions.class).iosMinimumOs = newMinimumVersion;
+ splitOptions.get(AppleCommandLineOptions.class).iosMinimumOs = newMinimumVersion;
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java
index 4de6706c1f..0bd68c41b1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosFramework.java
@@ -31,8 +31,10 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.actions.SymlinkAction;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.rules.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher;
import com.google.devtools.build.lib.rules.apple.DottedVersion;
+import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.cpp.CcCommon;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -72,7 +74,8 @@ public class IosFramework extends ReleaseBundlingTargetFactory {
// minimum iOS version of less than 8.0 may contain frameworks in their bundle, the framework
// itself needs to be built with 8.0 or higher. This logic overrides (if necessary) any
// flag-set minimum iOS version for framework only so that this requirement is not violated.
- DottedVersion fromFlag = ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs();
+ DottedVersion fromFlag = ruleContext.getFragment(AppleConfiguration.class)
+ .getMinimumOsForPlatformType(PlatformType.IOS);
return Ordering.natural().max(fromFlag, MINIMUM_OS_VERSION);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
index be3e6639ba..b1c4389202 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTest.java
@@ -163,14 +163,13 @@ public final class IosTest implements RuleConfiguredTargetFactory {
.addXcodeSettings(xcodeProviderBuilder, common)
.validateAttributes();
- ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext);
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
new ReleaseBundlingSupport(
ruleContext,
common.getObjcProvider(),
LinkedBinary.LOCAL_AND_DEPENDENCIES,
bundleFormat,
- objcConfiguration.getMinimumOs(),
+ appleConfiguration.getMinimumOsForPlatformType(PlatformType.IOS),
appleConfiguration.getMultiArchPlatform(PlatformType.IOS))
.registerActions(DsymOutputType.TEST)
.addXcodeSettings(xcodeProviderBuilder)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
index cbc74ea862..b8f691cf94 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java
@@ -27,11 +27,11 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
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.PlatformType;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes;
import com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.InvalidFamilyNameException;
import com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.RepeatedFamilyNameException;
import com.google.devtools.build.lib.syntax.Type;
-
import java.util.List;
/**
@@ -84,7 +84,6 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory {
private Bundling bundling(RuleContext ruleContext, ObjcCommon common) {
IntermediateArtifacts intermediateArtifacts =
ObjcRuleClasses.intermediateArtifacts(ruleContext);
- ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext);
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
ImmutableSet<TargetDeviceFamily> families = null;
@@ -106,7 +105,7 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory {
.setObjcProvider(common.getObjcProvider())
.addInfoplistInputFromRule(ruleContext)
.setIntermediateArtifacts(intermediateArtifacts)
- .setMinimumOsVersion(objcConfiguration.getMinimumOs())
+ .setMinimumOsVersion(appleConfiguration.getMinimumOsForPlatformType(PlatformType.IOS))
.setTargetDeviceFamilies(families)
.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
index 3efdc8b4d4..ab1e96bd1b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
@@ -14,7 +14,6 @@
package com.google.devtools.build.lib.rules.objc;
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -98,33 +97,6 @@ public class ObjcCommandLineOptions extends FragmentOptions {
help = "Additional options to pass to Objective C compilation.")
public List<String> copts;
- @Option(
- name = "ios_minimum_os",
- defaultValue = DEFAULT_MINIMUM_IOS,
- category = "flags",
- converter = DottedVersionConverter.class,
- help = "Minimum compatible iOS version for target simulators and devices."
- )
- public DottedVersion iosMinimumOs;
-
- @Option(
- name = "watchos_minimum_os",
- defaultValue = DEFAULT_MINIMUM_WATCHOS,
- category = "flags",
- converter = DottedVersionConverter.class,
- help = "Minimum compatible watchOS version for target simulators and devices."
- )
- public DottedVersion watchosMinimumOs;
-
- @Option(
- name = "tvos_minimum_os",
- defaultValue = DEFAULT_MINIMUM_TVOS,
- category = "flags",
- converter = DottedVersionConverter.class,
- help = "Minimum compatible tvOS version for target simulators and devices."
- )
- public DottedVersion tvosMinimumOs;
-
@Option(name = "ios_memleaks",
defaultValue = "false",
category = "misc",
@@ -248,7 +220,7 @@ public class ObjcCommandLineOptions extends FragmentOptions {
category = "undocumented"
)
public boolean experimentalObjcLibrary;
-
+
@Option(
name = "objc_use_dotd_pruning",
defaultValue = "false",
@@ -258,10 +230,6 @@ public class ObjcCommandLineOptions extends FragmentOptions {
+ "compiles."
)
public boolean useDotdPruning;
-
- @VisibleForTesting static final String DEFAULT_MINIMUM_IOS = "7.0";
- @VisibleForTesting static final String DEFAULT_MINIMUM_WATCHOS = "2.0";
- @VisibleForTesting static final String DEFAULT_MINIMUM_TVOS = "9.0";
@SuppressWarnings("unchecked")
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
index ebe35c5212..b773269a97 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
@@ -53,13 +53,10 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
ImmutableList.of(
"-Os", "-DNDEBUG=1", "-Wno-unused-variable", "-Winit-self", "-Wno-extra");
- private final DottedVersion iosMinimumOs;
private final DottedVersion iosSimulatorVersion;
private final String iosSimulatorDevice;
- private final DottedVersion watchosMinimumOs;
private final DottedVersion watchosSimulatorVersion;
private final String watchosSimulatorDevice;
- private final DottedVersion tvosMinimumOs;
private final DottedVersion tvosSimulatorVersion;
private final String tvosSimulatorDevice;
private final boolean generateDsym;
@@ -83,18 +80,14 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
ObjcConfiguration(ObjcCommandLineOptions objcOptions, BuildConfiguration.Options options,
@Nullable BlazeDirectories directories) {
- this.iosMinimumOs = Preconditions.checkNotNull(objcOptions.iosMinimumOs, "iosMinimumOs");
this.iosSimulatorDevice =
Preconditions.checkNotNull(objcOptions.iosSimulatorDevice, "iosSimulatorDevice");
this.iosSimulatorVersion =
Preconditions.checkNotNull(objcOptions.iosSimulatorVersion, "iosSimulatorVersion");
- this.watchosMinimumOs =
- Preconditions.checkNotNull(objcOptions.watchosMinimumOs, "watchosMinimumOs");
this.watchosSimulatorDevice =
Preconditions.checkNotNull(objcOptions.watchosSimulatorDevice, "watchosSimulatorDevice");
this.watchosSimulatorVersion =
Preconditions.checkNotNull(objcOptions.watchosSimulatorVersion, "watchosSimulatorVersion");
- this.tvosMinimumOs = Preconditions.checkNotNull(objcOptions.tvosMinimumOs, "tvosMinimumOs");
this.tvosSimulatorDevice =
Preconditions.checkNotNull(objcOptions.tvosSimulatorDevice, "tvosSimulatorDevice");
this.tvosSimulatorVersion =
@@ -123,18 +116,6 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
}
/**
- * Returns the minimum iOS version supported by binaries and libraries. Any dependencies on newer
- * iOS version features or libraries will become weak dependencies which are only loaded if the
- * runtime OS supports them.
- */
- @SkylarkCallable(name = "ios_minimum_os", structField = true,
- doc = "The minimum compatible iOS version for target simulators and devices.")
- public DottedVersion getMinimumOs() {
- // TODO(bazel-team): Deprecate in favor of getMinimumOsForPlatformType(IOS).
- return iosMinimumOs;
- }
-
- /**
* Returns the type of device (e.g. 'iPhone 6') to simulate when running on the simulator.
*/
@SkylarkCallable(name = "ios_simulator_device", structField = true,
@@ -152,23 +133,6 @@ public class ObjcConfiguration extends BuildConfiguration.Fragment {
}
@SkylarkCallable(
- name = "minimum_os_for_platform_type",
- doc = "The minimum compatible OS version for target simulator and devices for a particular "
- + "platform type.")
- public DottedVersion getMinimumOsForPlatformType(PlatformType platformType) {
- switch (platformType) {
- case IOS:
- return iosMinimumOs;
- case TVOS:
- return tvosMinimumOs;
- case WATCHOS:
- return watchosMinimumOs;
- default:
- throw new IllegalArgumentException("Unhandled platform: " + platformType);
- }
- }
-
- @SkylarkCallable(
name = "simulator_device_for_platform_type",
doc = "The type of device (e.g., 'iPhone 6' to simulate when running on the simulator.")
public String getSimulatorDeviceForPlatformType(PlatformType platformType) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java
index 51b47ef153..6e13ff79bd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcVariablesExtension.java
@@ -23,7 +23,6 @@ import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
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.cpp.CcToolchainFeatures;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.ValueSequence;
import com.google.devtools.build.lib.rules.cpp.CcToolchainFeatures.Variables.VariablesExtension;
@@ -52,7 +51,6 @@ class ObjcVariablesExtension implements VariablesExtension {
private final BuildConfiguration buildConfiguration;
private final AppleConfiguration appleConfiguration;
- private final ObjcConfiguration objcConfiguration;
public ObjcVariablesExtension(
RuleContext ruleContext,
@@ -67,7 +65,6 @@ class ObjcVariablesExtension implements VariablesExtension {
this.fullyLinkArchive = fullyLinkArchive;
this.intermediateArtifacts = intermediateArtifacts;
this.buildConfiguration = buildConfiguration;
- this.objcConfiguration = buildConfiguration.getFragment(ObjcConfiguration.class);
this.appleConfiguration = buildConfiguration.getFragment(AppleConfiguration.class);
}
@@ -118,27 +115,8 @@ class ObjcVariablesExtension implements VariablesExtension {
private void addArchVariables(CcToolchainFeatures.Variables.Builder builder) {
Platform platform = appleConfiguration.getSingleArchPlatform();
- switch (platform.getType()) {
- case IOS:
- builder.addVariable(
- VERSION_MIN_VARIABLE_NAME,
- objcConfiguration.getMinimumOsForPlatformType(PlatformType.IOS).toString());
- break;
- case TVOS:
- builder.addVariable(
- VERSION_MIN_VARIABLE_NAME,
- objcConfiguration.getMinimumOsForPlatformType(PlatformType.TVOS).toString());
- break;
- case WATCHOS:
- // TODO(bazel-team): Use the minimum OS version derived from the flag as is done for the
- // other platform types.
- builder.addVariable(
- VERSION_MIN_VARIABLE_NAME,
- appleConfiguration.getSdkVersionForPlatform(platform).toString());
- break;
- default:
- throw new IllegalArgumentException("Unhandled platform: " + platform);
- }
+ builder.addVariable(VERSION_MIN_VARIABLE_NAME,
+ appleConfiguration.getMinimumOsForPlatformType(platform.getType()).toString());
}
private void addArchiveVariables(CcToolchainFeatures.Variables.Builder builder) {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
index 54ba369ca0..5af53b3587 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingTargetFactory.java
@@ -125,7 +125,8 @@ public abstract class ReleaseBundlingTargetFactory implements RuleConfiguredTarg
* configuration).
*/
protected DottedVersion bundleMinimumOsVersion(RuleContext ruleContext) {
- return ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs();
+ return ruleContext.getFragment(AppleConfiguration.class)
+ .getMinimumOsForPlatformType(PlatformType.IOS);
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
index a0aa241320..12c0819451 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/Watch2ExtensionSupport.java
@@ -37,11 +37,9 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
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.ReleaseBundlingSupport.LinkedBinary;
import com.google.devtools.build.lib.syntax.Type;
-
import javax.annotation.Nullable;
/**
@@ -112,7 +110,6 @@ public class Watch2ExtensionSupport {
}
AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
- Platform appPlatform = appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS);
ReleaseBundlingSupport releaseBundlingSupport =
new ReleaseBundlingSupport(
@@ -121,7 +118,7 @@ public class Watch2ExtensionSupport {
LinkedBinary.DEPENDENCIES_ONLY,
ReleaseBundlingSupport.EXTENSION_BUNDLE_DIR_FORMAT,
bundleName,
- appleConfiguration.getSdkVersionForPlatform(appPlatform),
+ appleConfiguration.getMinimumOsForPlatformType(PlatformType.WATCHOS),
releaseBundling.build(),
appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
index cff817f088..a5b5992b9e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java
@@ -191,11 +191,10 @@ final class WatchApplicationSupport {
PlatformType appPlatformType = watchOSVersion == WatchOSVersion.OS1
? PlatformType.IOS : PlatformType.WATCHOS;
- Platform appPlatform = appleConfiguration.getMultiArchPlatform(appPlatformType);
DottedVersion minimumOsVersion = appPlatformType == PlatformType.IOS
? WatchUtils.determineMinimumIosVersion(
- ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs())
- : appleConfiguration.getSdkVersionForPlatform(appPlatform);
+ appleConfiguration.getMinimumOsForPlatformType(PlatformType.IOS))
+ : appleConfiguration.getMinimumOsForPlatformType(PlatformType.WATCHOS);
ReleaseBundlingSupport releaseBundlingSupport =
new ReleaseBundlingSupport(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java
index 9de8689085..d988343f44 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchExtensionSupport.java
@@ -143,7 +143,7 @@ public class WatchExtensionSupport {
ReleaseBundlingSupport.EXTENSION_BUNDLE_DIR_FORMAT,
bundleName,
WatchUtils.determineMinimumIosVersion(
- ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs()),
+ appleConfiguration.getMinimumOsForPlatformType(PlatformType.IOS)),
releaseBundling.build(),
appleConfiguration.getMultiArchPlatform(PlatformType.IOS));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java
index 228445f443..f0df7f5ab8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java
@@ -193,7 +193,8 @@ final class WatchUtils {
XcodeprojBuildSetting.newBuilder()
.setName("IPHONEOS_DEPLOYMENT_TARGET")
.setValue(determineMinimumIosVersion(
- ObjcRuleClasses.objcConfiguration(ruleContext).getMinimumOs()).toString())
+ ruleContext.getFragment(AppleConfiguration.class)
+ .getMinimumOsForPlatformType(PlatformType.IOS)).toString())
.build());
return xcodeSettings.build();
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java
index d179d75f95..9d75d1168e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java
@@ -30,11 +30,11 @@ 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.apple.AppleConfiguration;
import com.google.devtools.build.lib.rules.apple.AppleConfiguration.ConfigurationDistinguisher;
+import com.google.devtools.build.lib.rules.apple.Platform.PlatformType;
import com.google.devtools.build.lib.rules.objc.XcodeProvider.Builder;
import com.google.devtools.build.lib.rules.objc.XcodeProvider.Project;
import com.google.devtools.build.xcode.xcodegen.proto.XcodeGenProtos;
import com.google.devtools.build.xcode.xcodegen.proto.XcodeGenProtos.XcodeprojBuildSetting;
-
import java.io.InputStream;
import java.util.List;
@@ -273,7 +273,7 @@ public final class XcodeSupport {
this.workspaceRoot = objcConfiguration.getXcodeWorkspaceRoot();
this.appleCpus = appleConfiguration.getMultiArchitectures(
appleConfiguration.getSingleArchPlatform().getType());
- this.minimumOs = objcConfiguration.getMinimumOs().toString();
+ this.minimumOs = appleConfiguration.getMinimumOsForPlatformType(PlatformType.IOS).toString();
this.generateDebugSymbols = objcConfiguration.generateDsym();
}