aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/osx
diff options
context:
space:
mode:
authorGravatar lberki <lberki@google.com>2017-10-18 09:30:09 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-10-18 10:28:30 +0200
commit57a2ad72d954b6986fbc857d44694ffb516cdb1b (patch)
tree953394c8c9db18230effb532834c1bf9b846bae1 /tools/osx
parentb8a86761c99da43175aead93ea0bde057fd1dcef (diff)
Add Skylark code that exports the current Xcode version and the Apple SDK versions as flags.
This will serve to replace AppleConfiguration#lateBoundOptionDefaults(). That one has to go away so that AppleConfiguration doesn't need to know the contents of the xcode_config rule anymore. Progress towards #3424. RELNOTES: None. PiperOrigin-RevId: 172569961
Diffstat (limited to 'tools/osx')
-rw-r--r--tools/osx/BUILD19
-rw-r--r--tools/osx/xcode_version_flag.bzl89
2 files changed, 108 insertions, 0 deletions
diff --git a/tools/osx/BUILD b/tools/osx/BUILD
index f9c5b8e187..be32162b71 100644
--- a/tools/osx/BUILD
+++ b/tools/osx/BUILD
@@ -47,3 +47,22 @@ config_setting(
load("//tools/osx:alias_rules.bzl", "xcode_config_alias")
xcode_config_alias(name = "current_xcode_config")
+
+load(
+ "//tools/osx:xcode_version_flag.bzl",
+ "xcode_version_flag",
+ "ios_sdk_version_flag",
+ "tvos_sdk_version_flag",
+ "watchos_sdk_version_flag",
+ "macos_sdk_version_flag",
+)
+
+xcode_version_flag(name = "xcode_version_flag")
+
+ios_sdk_version_flag(name = "ios_sdk_version_flag")
+
+tvos_sdk_version_flag(name = "tvos_sdk_version_flag")
+
+watchos_sdk_version_flag(name = "watchos_sdk_version_flag")
+
+macos_sdk_version_flag(name = "macos_sdk_version_flag")
diff --git a/tools/osx/xcode_version_flag.bzl b/tools/osx/xcode_version_flag.bzl
new file mode 100644
index 0000000000..5503749616
--- /dev/null
+++ b/tools/osx/xcode_version_flag.bzl
@@ -0,0 +1,89 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Rules that allows select() to differentiate between Apple OS versions."""
+
+def _xcode_version_flag_impl(ctx):
+ """A rule that allows select() to differentiate between Xcode versions."""
+ xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig]
+
+ return struct(providers = [
+ config_common.FeatureFlagInfo(value = str(xcode_config.xcode_version()))])
+
+
+def _ios_sdk_version_flag_impl(ctx):
+ """A rule that allows select() to select based on the iOS SDK version."""
+ xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig]
+
+ return struct(providers = [config_common.FeatureFlagInfo(value = str(
+ xcode_config.sdk_version_for_platform(
+ apple_common.platform.ios_device)))])
+
+
+def _tvos_sdk_version_flag_impl(ctx):
+ """A rule that allows select() to select based on the tvOS SDK version."""
+ xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig]
+
+ return struct(providers = [config_common.FeatureFlagInfo(value = str(
+ xcode_config.sdk_version_for_platform(
+ apple_common.platform.tvos_device)))])
+
+
+def _watchos_sdk_version_flag_impl(ctx):
+ """A rule that allows select() to select based on the watchOS SDK version."""
+ xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig]
+
+ return struct(providers = [config_common.FeatureFlagInfo(value = str(
+ xcode_config.sdk_version_for_platform(
+ apple_common.platform.watchos_device)))])
+
+
+def _macos_sdk_version_flag_impl(ctx):
+ """A rule that allows select() to select based on the macOS SDK version."""
+ xcode_config = ctx.attr._xcode_config[apple_common.XcodeVersionConfig]
+
+ return struct(providers = [config_common.FeatureFlagInfo(value = str(
+ xcode_config.sdk_version_for_platform(
+ apple_common.platform.macos_device)))])
+
+
+xcode_version_flag = rule(
+ implementation = _xcode_version_flag_impl,
+ attrs = {
+ "_xcode_config": attr.label(default=Label("//tools/osx:current_xcode_config")),
+ })
+
+ios_sdk_version_flag = rule(
+ implementation = _ios_sdk_version_flag_impl,
+ attrs = {
+ "_xcode_config": attr.label(default=Label("//tools/osx:current_xcode_config")),
+ })
+
+tvos_sdk_version_flag = rule(
+ implementation = _tvos_sdk_version_flag_impl,
+ attrs = {
+ "_xcode_config": attr.label(default=Label("//tools/osx:current_xcode_config")),
+ })
+
+watchos_sdk_version_flag = rule(
+ implementation = _watchos_sdk_version_flag_impl,
+ attrs = {
+ "_xcode_config": attr.label(default=Label("//tools/osx:current_xcode_config")),
+ })
+
+macos_sdk_version_flag = rule(
+ implementation = _macos_sdk_version_flag_impl,
+ attrs = {
+ "_xcode_config": attr.label(default=Label("//tools/osx:current_xcode_config")),
+ })