aboutsummaryrefslogtreecommitdiffhomepage
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
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
-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
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/AppleSkylarkCommon.java2
7 files changed, 89 insertions, 48 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,
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 1f646539d4..37720cdb6a 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
@@ -81,7 +81,7 @@ public class AppleSkylarkCommon {
@SkylarkCallable(
name = "platform_type",
doc = "Returns a struct containing fields corresponding to Apple platform types: 'ios', "
- + "'watchos', 'tvos', and 'macosx'. These values can be passed to methods that expect a "
+ + "'watchos', 'tvos', and 'macos'. These values can be passed to methods that expect a "
+ "platform type, like the 'apple' configuration fragment's 'multi_arch_platform' "
+ "method. For example, ctx.fragments.apple.multi_arch_platform(apple_common."
+ "platform_type.ios).",