diff options
author | lberki <lberki@google.com> | 2017-10-18 09:30:09 +0200 |
---|---|---|
committer | Jakob Buchgraber <buchgr@google.com> | 2017-10-18 10:28:30 +0200 |
commit | 57a2ad72d954b6986fbc857d44694ffb516cdb1b (patch) | |
tree | 953394c8c9db18230effb532834c1bf9b846bae1 /tools/osx | |
parent | b8a86761c99da43175aead93ea0bde057fd1dcef (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/BUILD | 19 | ||||
-rw-r--r-- | tools/osx/xcode_version_flag.bzl | 89 |
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")), + }) |