xref: /aosp_15_r20/build/bazel/rules/java/versions.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project
2*7594170eSAndroid Build Coastguard Worker#
3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*7594170eSAndroid Build Coastguard Worker#
7*7594170eSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*7594170eSAndroid Build Coastguard Worker#
9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*7594170eSAndroid Build Coastguard Worker# limitations under the License.
14*7594170eSAndroid Build Coastguard Worker"""Constants and utility functions relating to Java versions and how they map to SDK versions.
15*7594170eSAndroid Build Coastguard Worker"""
16*7594170eSAndroid Build Coastguard Worker
17*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/common:api.bzl", "api")
18*7594170eSAndroid Build Coastguard Worker
19*7594170eSAndroid Build Coastguard Worker# The default java version used absent any java_version or sdk_version specification.
20*7594170eSAndroid Build Coastguard Worker_DEFAULT_VERSION = 17
21*7594170eSAndroid Build Coastguard Worker
22*7594170eSAndroid Build Coastguard Worker# All available java versions
23*7594170eSAndroid Build Coastguard Worker_ALL_VERSIONS = [
24*7594170eSAndroid Build Coastguard Worker    7,
25*7594170eSAndroid Build Coastguard Worker    8,
26*7594170eSAndroid Build Coastguard Worker    9,
27*7594170eSAndroid Build Coastguard Worker    11,
28*7594170eSAndroid Build Coastguard Worker    17,
29*7594170eSAndroid Build Coastguard Worker]
30*7594170eSAndroid Build Coastguard Worker
31*7594170eSAndroid Build Coastguard Worker_VERSION_TO_CONFIG_SETTING = {
32*7594170eSAndroid Build Coastguard Worker    java_version: "config_setting_java_%s" % java_version
33*7594170eSAndroid Build Coastguard Worker    for java_version in _ALL_VERSIONS
34*7594170eSAndroid Build Coastguard Worker}
35*7594170eSAndroid Build Coastguard Worker
36*7594170eSAndroid Build Coastguard Workerdef _compatible_versions_for_api_level(api_level):
37*7594170eSAndroid Build Coastguard Worker    """Returns all possible java versions that can be used at the given api level."""
38*7594170eSAndroid Build Coastguard Worker    if api_level in (api.FUTURE_API_LEVEL, api.NONE_API_LEVEL):
39*7594170eSAndroid Build Coastguard Worker        return _ALL_VERSIONS
40*7594170eSAndroid Build Coastguard Worker    if api_level <= 23:
41*7594170eSAndroid Build Coastguard Worker        return [7]
42*7594170eSAndroid Build Coastguard Worker    if api_level <= 29:
43*7594170eSAndroid Build Coastguard Worker        return [
44*7594170eSAndroid Build Coastguard Worker            7,
45*7594170eSAndroid Build Coastguard Worker            8,
46*7594170eSAndroid Build Coastguard Worker        ]
47*7594170eSAndroid Build Coastguard Worker    if api_level <= 31:
48*7594170eSAndroid Build Coastguard Worker        return [
49*7594170eSAndroid Build Coastguard Worker            7,
50*7594170eSAndroid Build Coastguard Worker            8,
51*7594170eSAndroid Build Coastguard Worker            9,
52*7594170eSAndroid Build Coastguard Worker        ]
53*7594170eSAndroid Build Coastguard Worker    if api_level <= 33:
54*7594170eSAndroid Build Coastguard Worker        return [
55*7594170eSAndroid Build Coastguard Worker            7,
56*7594170eSAndroid Build Coastguard Worker            8,
57*7594170eSAndroid Build Coastguard Worker            9,
58*7594170eSAndroid Build Coastguard Worker            11,
59*7594170eSAndroid Build Coastguard Worker        ]
60*7594170eSAndroid Build Coastguard Worker    return _ALL_VERSIONS
61*7594170eSAndroid Build Coastguard Worker
62*7594170eSAndroid Build Coastguard Workerdef _supports_pre_java_9(api_level):
63*7594170eSAndroid Build Coastguard Worker    return any([
64*7594170eSAndroid Build Coastguard Worker        version < 9
65*7594170eSAndroid Build Coastguard Worker        for version in _compatible_versions_for_api_level(api_level)
66*7594170eSAndroid Build Coastguard Worker    ])
67*7594170eSAndroid Build Coastguard Worker
68*7594170eSAndroid Build Coastguard Workerdef _supports_post_java_9(api_level):
69*7594170eSAndroid Build Coastguard Worker    return any([
70*7594170eSAndroid Build Coastguard Worker        version >= 9
71*7594170eSAndroid Build Coastguard Worker        for version in _compatible_versions_for_api_level(api_level)
72*7594170eSAndroid Build Coastguard Worker    ])
73*7594170eSAndroid Build Coastguard Worker
74*7594170eSAndroid Build Coastguard Worker_NORMALIZED_VERSIONS = {
75*7594170eSAndroid Build Coastguard Worker    "1.7": 7,
76*7594170eSAndroid Build Coastguard Worker    "7": 7,
77*7594170eSAndroid Build Coastguard Worker    "1.8": 8,
78*7594170eSAndroid Build Coastguard Worker    "8": 8,
79*7594170eSAndroid Build Coastguard Worker    "1.9": 9,
80*7594170eSAndroid Build Coastguard Worker    "9": 9,
81*7594170eSAndroid Build Coastguard Worker    "11": 11,
82*7594170eSAndroid Build Coastguard Worker    "17": 17,
83*7594170eSAndroid Build Coastguard Worker}
84*7594170eSAndroid Build Coastguard Worker
85*7594170eSAndroid Build Coastguard Workerdef _default_version(api_level):
86*7594170eSAndroid Build Coastguard Worker    """Returns the default java version for the input api level."""
87*7594170eSAndroid Build Coastguard Worker    return max(_compatible_versions_for_api_level(api_level))
88*7594170eSAndroid Build Coastguard Worker
89*7594170eSAndroid Build Coastguard Workerdef _get_version(java_version = None, api_level = None):
90*7594170eSAndroid Build Coastguard Worker    """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."""
91*7594170eSAndroid Build Coastguard Worker    if java_version:
92*7594170eSAndroid Build Coastguard Worker        return _NORMALIZED_VERSIONS[java_version]
93*7594170eSAndroid Build Coastguard Worker    elif api_level:
94*7594170eSAndroid Build Coastguard Worker        return _default_version(api_level)
95*7594170eSAndroid Build Coastguard Worker    return _DEFAULT_VERSION
96*7594170eSAndroid Build Coastguard Worker
97*7594170eSAndroid Build Coastguard Workerdef _kt_jvm_version_from_normalized_java_version(java_version):
98*7594170eSAndroid Build Coastguard Worker    if java_version == 7:
99*7594170eSAndroid Build Coastguard Worker        return "1.6"
100*7594170eSAndroid Build Coastguard Worker    elif java_version == 8:
101*7594170eSAndroid Build Coastguard Worker        return "1.8"
102*7594170eSAndroid Build Coastguard Worker    else:
103*7594170eSAndroid Build Coastguard Worker        return str(java_version)
104*7594170eSAndroid Build Coastguard Worker
105*7594170eSAndroid Build Coastguard Workerjava_versions = struct(
106*7594170eSAndroid Build Coastguard Worker    ALL_VERSIONS = _ALL_VERSIONS,
107*7594170eSAndroid Build Coastguard Worker    VERSION_TO_CONFIG_SETTING = _VERSION_TO_CONFIG_SETTING,
108*7594170eSAndroid Build Coastguard Worker    compatible_versions_for_api_level = _compatible_versions_for_api_level,
109*7594170eSAndroid Build Coastguard Worker    get_version = _get_version,
110*7594170eSAndroid Build Coastguard Worker    kt_jvm_version_from_normalized_java_version = _kt_jvm_version_from_normalized_java_version,
111*7594170eSAndroid Build Coastguard Worker    supports_pre_java_9 = _supports_pre_java_9,
112*7594170eSAndroid Build Coastguard Worker    supports_post_java_9 = _supports_post_java_9,
113*7594170eSAndroid Build Coastguard Worker)
114