unplugged-system/build/bazel/rules/java/versions.bzl

105 lines
2.9 KiB
Python

# Copyright (C) 2023 The Android Open Source Project
#
# 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.
"""Constants and utility functions relating to Java versions and how they map to SDK versions.
"""
load("//build/bazel/rules/common:api.bzl", "api")
# The default java version used absent any java_version or sdk_version specification.
_DEFAULT_VERSION = 17
# All available java versions
_ALL_VERSIONS = [
7,
8,
9,
11,
17,
]
_VERSION_TO_CONFIG_SETTING = {
java_version: "config_setting_java_%s" % java_version
for java_version in _ALL_VERSIONS
}
def _compatible_versions_for_api_level(api_level):
"""Returns all possible java versions that can be used at the given api level."""
if api_level in (api.FUTURE_API_LEVEL, api.NONE_API_LEVEL):
return _ALL_VERSIONS
if api_level <= 23:
return [7]
if api_level <= 29:
return [
7,
8,
]
if api_level <= 31:
return [
7,
8,
9,
]
if api_level <= 33:
return [
7,
8,
9,
11,
]
return _ALL_VERSIONS
def _supports_pre_java_9(api_level):
return any([
version < 9
for version in _compatible_versions_for_api_level(api_level)
])
def _supports_post_java_9(api_level):
return any([
version >= 9
for version in _compatible_versions_for_api_level(api_level)
])
_NORMALIZED_VERSIONS = {
"1.7": 7,
"7": 7,
"1.8": 8,
"8": 8,
"1.9": 9,
"9": 9,
"11": 11,
"17": 17,
}
def _default_version(api_level):
"""Returns the default java version for the input api level."""
return max(_compatible_versions_for_api_level(api_level))
def _get_version(java_version = None, api_level = None):
"""Returns the java version to use for a given target based on the java_version set by this target and the api_level_string extracted from sdk_version."""
if java_version:
return _NORMALIZED_VERSIONS[java_version]
elif api_level:
return _default_version(api_level)
return _DEFAULT_VERSION
java_versions = struct(
ALL_VERSIONS = _ALL_VERSIONS,
VERSION_TO_CONFIG_SETTING = _VERSION_TO_CONFIG_SETTING,
compatible_versions_for_api_level = _compatible_versions_for_api_level,
get_version = _get_version,
supports_pre_java_9 = _supports_pre_java_9,
supports_post_java_9 = _supports_post_java_9,
)