aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/apple
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-02-01 17:14:58 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-02-02 09:57:56 +0000
commit47bde4012eb05674e2b100eb985de79db86573f4 (patch)
treee92d1266fdca29f9c5b6ecdf9b947eaf77c4a085 /src/main/java/com/google/devtools/build/lib/rules/apple
parentb99f0c75f7e74e65dfea667d19827df2bc69936e (diff)
Fills out some macOS support needed for the bundler.
This CL also changes some names from "MacOSX" to "macOS", such as the command line options, internal constants/enum values, and platform constants that are accessible from Skylark but are not let being used. It also adds some flags that are needed for completeness, like macos_minimum_os and macos_cpus. This change intentionally omits a few reference (such as "default_macosx_sdk_version" in "xcode_version") that are currently used in BUILD files in order to prevent those from breaking--I'll try to attack those later. This CL also does *not* add compiling/linking support for macOS. -- PiperOrigin-RevId: 146250799 MOS_MIGRATED_REVID=146250799
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/apple')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java43
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java39
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java8
6 files changed, 88 insertions, 47 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
index 3f0c4c20c8..612d2b3e3a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleCommandLineOptions.java
@@ -44,8 +44,8 @@ public class AppleCommandLineOptions extends FragmentOptions {
category = "build",
converter = DottedVersionConverter.class,
help =
- "If specified, uses xcode of the given version for relevant build actions. "
- + "If unspecified, uses the executor default version of xcode."
+ "If specified, uses Xcode of the given version for relevant build actions. "
+ + "If unspecified, uses the executor default version of Xcode."
)
// TODO(bazel-team): This should be of String type, to allow referencing an alias based
// on an xcode_config target.
@@ -65,7 +65,7 @@ public class AppleCommandLineOptions extends FragmentOptions {
defaultValue = "null",
converter = DottedVersionConverter.class,
category = "build",
- help = "Specifies the version of the WatchOS SDK to use to build WatchOS applications."
+ help = "Specifies the version of the watchOS SDK to use to build watchOS applications."
)
public DottedVersion watchOsSdkVersion;
@@ -74,18 +74,18 @@ public class AppleCommandLineOptions extends FragmentOptions {
defaultValue = "null",
converter = DottedVersionConverter.class,
category = "build",
- help = "Specifies the version of the AppleTVOS SDK to use to build AppleTVOS applications."
+ help = "Specifies the version of the tvOS SDK to use to build tvOS applications."
)
public DottedVersion tvOsSdkVersion;
@Option(
- name = "macosx_sdk_version",
+ name = "macos_sdk_version",
defaultValue = "null",
converter = DottedVersionConverter.class,
category = "build",
- help = "Specifies the version of the Mac OS X SDK to use to build Mac OS X applications."
+ help = "Specifies the version of the macOS SDK to use to build macOS applications."
)
- public DottedVersion macOsXSdkVersion;
+ public DottedVersion macOsSdkVersion;
@Option(
name = "ios_minimum_os",
@@ -114,9 +114,18 @@ public class AppleCommandLineOptions extends FragmentOptions {
)
public DottedVersion tvosMinimumOs;
+ @Option(
+ name = "macos_minimum_os",
+ defaultValue = "null",
+ category = "flags",
+ converter = DottedVersionConverter.class,
+ help = "Minimum compatible macOS version for targets."
+ )
+ public DottedVersion macosMinimumOs;
+
@VisibleForTesting public static final String DEFAULT_IOS_SDK_VERSION = "8.4";
@VisibleForTesting public static final String DEFAULT_WATCHOS_SDK_VERSION = "2.0";
- @VisibleForTesting public static final String DEFAULT_MACOSX_SDK_VERSION = "10.10";
+ @VisibleForTesting public static final String DEFAULT_MACOS_SDK_VERSION = "10.10";
@VisibleForTesting public static final String DEFAULT_TVOS_SDK_VERSION = "9.0";
@VisibleForTesting static final String DEFAULT_IOS_CPU = "x86_64";
@@ -130,6 +139,11 @@ public class AppleCommandLineOptions extends FragmentOptions {
*/
public static final String DEFAULT_TVOS_CPU = "x86_64";
+ /**
+ * The default macOS CPU value.
+ */
+ public static final String DEFAULT_MACOS_CPU = "x86_64";
+
@Option(name = "ios_cpu",
defaultValue = DEFAULT_IOS_CPU,
category = "build",
@@ -197,6 +211,13 @@ public class AppleCommandLineOptions extends FragmentOptions {
help = "Comma-separated list of architectures for which to build Apple tvOS binaries.")
public List<String> tvosCpus;
+ @Option(name = "macos_cpus",
+ converter = CommaSeparatedOptionListConverter.class,
+ defaultValue = DEFAULT_MACOS_CPU,
+ category = "flags",
+ help = "Comma-separated list of architectures for which to build Apple macOS binaries.")
+ public List<String> macosCpus;
+
@Option(name = "default_ios_provisioning_profile",
defaultValue = "",
category = "undocumented",
@@ -209,8 +230,8 @@ public class AppleCommandLineOptions extends FragmentOptions {
category = "undocumented",
converter = LabelConverter.class,
help =
- "The label of the xcode_config rule to be used for selecting the xcode version "
- + "in the build configuration"
+ "The label of the xcode_config rule to be used for selecting the Xcode version "
+ + "in the build configuration."
)
public Label xcodeVersionConfig;
@@ -351,7 +372,7 @@ public class AppleCommandLineOptions extends FragmentOptions {
host.iosSdkVersion = iosSdkVersion;
host.watchOsSdkVersion = watchOsSdkVersion;
host.tvOsSdkVersion = tvOsSdkVersion;
- host.macOsXSdkVersion = macOsXSdkVersion;
+ host.macOsSdkVersion = macOsSdkVersion;
host.appleBitcodeMode = appleBitcodeMode;
return host;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 86620b4f2d..e074d2096e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -103,7 +103,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
private final DottedVersion watchosMinimumOs;
private final DottedVersion tvosSdkVersion;
private final DottedVersion tvosMinimumOs;
- private final DottedVersion macosXSdkVersion;
+ private final DottedVersion macosSdkVersion;
+ private final DottedVersion macosMinimumOs;
private final String iosCpu;
private final String appleSplitCpu;
private final PlatformType applePlatformType;
@@ -111,6 +112,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
private final ImmutableList<String> iosMultiCpus;
private final ImmutableList<String> watchosCpus;
private final ImmutableList<String> tvosCpus;
+ private final ImmutableList<String> macosCpus;
private final AppleBitcodeMode bitcodeMode;
private final Label xcodeConfigLabel;
private final boolean enableAppleCrosstool;
@@ -124,7 +126,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
DottedVersion watchosMinimumOs,
DottedVersion tvosSdkVersion,
DottedVersion tvosMinimumOs,
- DottedVersion macosXSdkVersion) {
+ DottedVersion macosSdkVersion,
+ DottedVersion macosMinimumOs) {
this.iosSdkVersion = Preconditions.checkNotNull(iosSdkVersion, "iosSdkVersion");
this.iosMinimumOs = Preconditions.checkNotNull(appleOptions.iosMinimumOs, "iosMinimumOs");
this.watchosSdkVersion =
@@ -135,9 +138,9 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
Preconditions.checkNotNull(tvosSdkVersion, "tvOsSdkVersion");
this.tvosMinimumOs =
Preconditions.checkNotNull(tvosMinimumOs, "tvOsMinimumOs");
-
- this.macosXSdkVersion =
- Preconditions.checkNotNull(macosXSdkVersion, "macOsXSdkVersion");
+ this.macosSdkVersion =
+ Preconditions.checkNotNull(macosSdkVersion, "macOsSdkVersion");
+ this.macosMinimumOs = Preconditions.checkNotNull(macosMinimumOs, "macOsMinimumOs");
this.xcodeVersion = xcodeVersion;
this.iosCpu = Preconditions.checkNotNull(appleOptions.iosCpu, "iosCpu");
@@ -153,6 +156,9 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
this.tvosCpus = (appleOptions.tvosCpus == null || appleOptions.tvosCpus.isEmpty())
? ImmutableList.of(AppleCommandLineOptions.DEFAULT_TVOS_CPU)
: ImmutableList.copyOf(appleOptions.tvosCpus);
+ this.macosCpus = (appleOptions.macosCpus == null || appleOptions.macosCpus.isEmpty())
+ ? ImmutableList.of(AppleCommandLineOptions.DEFAULT_MACOS_CPU)
+ : ImmutableList.copyOf(appleOptions.macosCpus);
this.bitcodeMode = appleOptions.appleBitcodeMode;
this.xcodeConfigLabel =
Preconditions.checkNotNull(appleOptions.xcodeVersionConfig, "xcodeConfigLabel");
@@ -185,6 +191,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
return tvosMinimumOs;
case WATCHOS:
return watchosMinimumOs;
+ case MACOS:
+ return macosMinimumOs;
default:
throw new IllegalArgumentException("Unhandled platform: " + platformType);
}
@@ -217,8 +225,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
case WATCHOS_DEVICE:
case WATCHOS_SIMULATOR:
return watchosSdkVersion;
- case MACOS_X:
- return macosXSdkVersion;
+ case MACOS:
+ return macosSdkVersion;
}
throw new AssertionError();
@@ -344,7 +352,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
return watchosCpus.get(0);
case TVOS:
return tvosCpus.get(0);
- // TODO(cparsons): Handle all platform types.
+ case MACOS:
+ return macosCpus.get(0);
default:
throw new IllegalArgumentException("Unhandled platform type " + applePlatformType);
}
@@ -388,6 +397,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
return watchosCpus;
case TVOS:
return tvosCpus;
+ case MACOS:
+ return macosCpus;
default:
throw new IllegalArgumentException("Unhandled platform type " + platformType);
}
@@ -446,6 +457,8 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
}
}
return Platform.TVOS_SIMULATOR;
+ case MACOS:
+ return Platform.MACOS;
default:
throw new IllegalArgumentException("Unsupported platform type " + platformType);
}
@@ -588,7 +601,7 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
.put("ios_sdk_version", iosSdkVersion)
.put("tvos_sdk_version", tvosSdkVersion)
.put("watchos_sdk_version", watchosSdkVersion)
- .put("macosx_sdk_version", macosXSdkVersion)
+ .put("macos_sdk_version", macosSdkVersion)
.build();
}
@@ -614,12 +627,14 @@ public class AppleConfiguration extends BuildConfiguration.Fragment {
? appleOptions.tvOsSdkVersion : xcodeVersionProperties.getDefaultTvosSdkVersion();
DottedVersion tvosMinimumOsVersion = (appleOptions.tvosMinimumOs != null)
? appleOptions.tvosMinimumOs : tvosSdkVersion;
- DottedVersion macosxSdkVersion = (appleOptions.macOsXSdkVersion != null)
- ? appleOptions.macOsXSdkVersion : xcodeVersionProperties.getDefaultMacosxSdkVersion();
+ DottedVersion macosSdkVersion = (appleOptions.macOsSdkVersion != null)
+ ? appleOptions.macOsSdkVersion : xcodeVersionProperties.getDefaultMacosSdkVersion();
+ DottedVersion macosMinimumOsVersion = (appleOptions.macosMinimumOs != null)
+ ? appleOptions.macosMinimumOs : macosSdkVersion;
AppleConfiguration configuration =
new AppleConfiguration(appleOptions, xcodeVersionProperties.getXcodeVersion().orNull(),
iosSdkVersion, watchosSdkVersion, watchosMinimumOsVersion,
- tvosSdkVersion, tvosMinimumOsVersion, macosxSdkVersion);
+ tvosSdkVersion, tvosMinimumOsVersion, macosSdkVersion, macosMinimumOsVersion);
validate(configuration);
return configuration;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java
index 55a82c9611..ceb91debed 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleToolchain.java
@@ -135,7 +135,7 @@ public class AppleToolchain {
relativePath = DEVELOPER_FRAMEWORK_PATH;
}
break;
- case MACOS_X:
+ case MACOS:
relativePath = DEVELOPER_FRAMEWORK_PATH;
break;
case WATCHOS_DEVICE:
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java b/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java
index 691a1f3823..a76594c8ca 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/Platform.java
@@ -36,7 +36,7 @@ public enum Platform {
IOS_DEVICE("ios_device", "iPhoneOS", PlatformType.IOS, true),
IOS_SIMULATOR("ios_simulator", "iPhoneSimulator", PlatformType.IOS, false),
- MACOS_X("macos_x", "MacOSX", PlatformType.MACOSX, true),
+ MACOS("macos", "MacOSX", PlatformType.MACOS, true),
TVOS_DEVICE("tvos_device", "AppleTVOS", PlatformType.TVOS, true),
TVOS_SIMULATOR("tvos_simulator", "AppleTVSimulator", PlatformType.TVOS, false),
WATCHOS_DEVICE("watchos_device", "WatchOS", PlatformType.WATCHOS, true),
@@ -54,7 +54,7 @@ public enum Platform {
ImmutableSet.of("tvos_x86_64");
private static final Set<String> TVOS_DEVICE_TARGET_CPUS =
ImmutableSet.of("tvos_arm64");
- private static final Set<String> MACOSX_TARGET_CPUS =
+ private static final Set<String> MACOS_TARGET_CPUS =
ImmutableSet.of("darwin_x86_64");
private final String skylarkKey;
@@ -125,8 +125,8 @@ public enum Platform {
return TVOS_SIMULATOR;
} else if (TVOS_DEVICE_TARGET_CPUS.contains(targetCpu)) {
return TVOS_DEVICE;
- } else if (MACOSX_TARGET_CPUS.contains(targetCpu)) {
- return MACOS_X;
+ } else if (MACOS_TARGET_CPUS.contains(targetCpu)) {
+ return MACOS;
} else {
return null;
}
@@ -140,7 +140,12 @@ public enum Platform {
* @throws IllegalArgumentException if there is no valid apple platform for the given target cpu
*/
public static Platform forTarget(PlatformType platformType, String arch) {
- return forTargetCpu(String.format("%s_%s", platformType.toString(), arch));
+ switch (platformType) {
+ case MACOS:
+ return forTargetCpu(String.format("darwin_%s", arch));
+ default:
+ return forTargetCpu(String.format("%s_%s", platformType.toString(), arch));
+ }
}
/**
@@ -191,7 +196,7 @@ public enum Platform {
IOS("ios"),
WATCHOS("watchos"),
TVOS("tvos"),
- MACOSX("macosx");
+ MACOS("macos");
/**
* The key used to access the enum value as a field in the Skylark apple_common.platform_type
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
index 438eb404b9..03afc08fd5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
@@ -38,14 +38,14 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
@VisibleForTesting public static final String DEFAULT_IOS_SDK_VERSION = "8.4";
@VisibleForTesting public static final String DEFAULT_WATCHOS_SDK_VERSION = "2.0";
- @VisibleForTesting public static final String DEFAULT_MACOSX_SDK_VERSION = "10.10";
+ @VisibleForTesting public static final String DEFAULT_MACOS_SDK_VERSION = "10.10";
@VisibleForTesting public static final String DEFAULT_TVOS_SDK_VERSION = "9.0";
private final Optional<DottedVersion> xcodeVersion;
private final DottedVersion defaultIosSdkVersion;
private final DottedVersion defaultWatchosSdkVersion;
private final DottedVersion defaultTvosSdkVersion;
- private final DottedVersion defaultMacosxSdkVersion;
+ private final DottedVersion defaultMacosSdkVersion;
/**
* Creates and returns a tuple representing no known xcode property information (defaults are used
@@ -76,7 +76,7 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
@Nullable String defaultIosSdkVersion,
@Nullable String defaultWatchosSdkVersion,
@Nullable String defaultTvosSdkVersion,
- @Nullable String defaultMacosxSdkVersion) {
+ @Nullable String defaultMacosSdkVersion) {
super(
SKYLARK_CONSTRUCTOR,
getSkylarkFields(
@@ -84,7 +84,7 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
defaultIosSdkVersion,
defaultWatchosSdkVersion,
defaultTvosSdkVersion,
- defaultMacosxSdkVersion));
+ defaultMacosSdkVersion));
this.xcodeVersion = Optional.fromNullable(xcodeVersion);
this.defaultIosSdkVersion =
(Strings.isNullOrEmpty(defaultIosSdkVersion))
@@ -98,10 +98,10 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
(Strings.isNullOrEmpty(defaultTvosSdkVersion))
? DottedVersion.fromString(DEFAULT_TVOS_SDK_VERSION)
: DottedVersion.fromString(defaultTvosSdkVersion);
- this.defaultMacosxSdkVersion =
- (Strings.isNullOrEmpty(defaultMacosxSdkVersion))
- ? DottedVersion.fromString(DEFAULT_MACOSX_SDK_VERSION)
- : DottedVersion.fromString(defaultMacosxSdkVersion);
+ this.defaultMacosSdkVersion =
+ (Strings.isNullOrEmpty(defaultMacosSdkVersion))
+ ? DottedVersion.fromString(DEFAULT_MACOS_SDK_VERSION)
+ : DottedVersion.fromString(defaultMacosSdkVersion);
}
/** Returns the xcode version, or {@link Optional#absent} if the xcode version is unknown. */
@@ -125,8 +125,8 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
}
/** Returns the default macosx sdk version to use if this xcode version is in use. */
- public DottedVersion getDefaultMacosxSdkVersion() {
- return defaultMacosxSdkVersion;
+ public DottedVersion getDefaultMacosSdkVersion() {
+ return defaultMacosSdkVersion;
}
private static Map<String, Object> getSkylarkFields(
@@ -134,7 +134,7 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
@Nullable String defaultIosSdkVersion,
@Nullable String defaultWatchosSdkVersion,
@Nullable String defaultTvosSdkVersion,
- @Nullable String defaultMacosxSdkVersion) {
+ @Nullable String defaultMacosSdkVersion) {
ImmutableMap.Builder<String, Object> skylarkFields = new ImmutableMap.Builder<>();
if (xcodeVersion != null) {
skylarkFields.put("xcode_version", xcodeVersion.toString());
@@ -152,8 +152,8 @@ public class XcodeVersionProperties extends SkylarkClassObject implements Transi
skylarkFields.put("default_tvos_sdk_version", defaultTvosSdkVersion);
}
- if (defaultMacosxSdkVersion != null) {
- skylarkFields.put("default_macos_sdk_version", defaultMacosxSdkVersion);
+ if (defaultMacosSdkVersion != null) {
+ skylarkFields.put("default_macos_sdk_version", defaultMacosSdkVersion);
}
return skylarkFields.build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java
index e7e6deb34d..4c1d991a15 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/cpp/AppleCcToolchain.java
@@ -34,8 +34,8 @@ import java.util.Map;
public class AppleCcToolchain extends CcToolchain {
private static final String XCODE_VERSION_KEY = "xcode_version";
private static final String IOS_SDK_VERSION_KEY = "ios_sdk_version";
- private static final String MACOSX_SDK_VERSION_KEY = "macosx_sdk_version";
- private static final String TVOS_SDK_VERSION_KEY = "appletvos_sdk_version";
+ private static final String MACOS_SDK_VERSION_KEY = "macos_sdk_version";
+ private static final String TVOS_SDK_VERSION_KEY = "tvos_sdk_version";
private static final String WATCHOS_SDK_VERSION_KEY = "watchos_sdk_version";
public static final String SDK_DIR_KEY = "sdk_dir";
public static final String SDK_FRAMEWORK_DIR_KEY = "sdk_framework_dir";
@@ -74,8 +74,8 @@ public class AppleCcToolchain extends CcToolchain {
appleConfiguration.getSdkVersionForPlatform(Platform.IOS_SIMULATOR)
.toStringWithMinimumComponents(2))
.put(
- MACOSX_SDK_VERSION_KEY,
- appleConfiguration.getSdkVersionForPlatform(Platform.MACOS_X)
+ MACOS_SDK_VERSION_KEY,
+ appleConfiguration.getSdkVersionForPlatform(Platform.MACOS)
.toStringWithMinimumComponents(2))
.put(
TVOS_SDK_VERSION_KEY,