xref: /aosp_15_r20/build/bazel/rules/java/sdk/BUILD.bazel (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
15*7594170eSAndroid Build Coastguard Workerpackage(
16*7594170eSAndroid Build Coastguard Worker    default_visibility = ["//visibility:public"],
17*7594170eSAndroid Build Coastguard Worker)
18*7594170eSAndroid Build Coastguard Worker
19*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "int_setting", "string_setting")
20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/common:sdk_version.bzl", "sdk_version")
21*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/common:api.bzl", "api")
22*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:versions.bzl", "java_versions")
23*7594170eSAndroid Build Coastguard Workerload(":config_setting_names.bzl", "config_setting_names")
24*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:selects.bzl", "selects")
25*7594170eSAndroid Build Coastguard Workerload("//prebuilts/sdk:utils.bzl", "prebuilt_sdk_utils")
26*7594170eSAndroid Build Coastguard Worker
27*7594170eSAndroid Build Coastguard Workerstring_setting(
28*7594170eSAndroid Build Coastguard Worker    name = "kind",
29*7594170eSAndroid Build Coastguard Worker    build_setting_default = sdk_version.KIND_PUBLIC,
30*7594170eSAndroid Build Coastguard Worker    values = sdk_version.ALL_KINDS,
31*7594170eSAndroid Build Coastguard Worker)
32*7594170eSAndroid Build Coastguard Worker
33*7594170eSAndroid Build Coastguard Workerint_setting(
34*7594170eSAndroid Build Coastguard Worker    name = "api_level",
35*7594170eSAndroid Build Coastguard Worker    build_setting_default = api.FUTURE_API_LEVEL,
36*7594170eSAndroid Build Coastguard Worker)
37*7594170eSAndroid Build Coastguard Worker
38*7594170eSAndroid Build Coastguard Worker# The settings below are used to properly define a device java and android toolchain.
39*7594170eSAndroid Build Coastguard Worker
40*7594170eSAndroid Build Coastguard Worker# The SDK_NONE config setting maps to sdk_version = "none". In this configuration the java toolchain
41*7594170eSAndroid Build Coastguard Worker# will provide nothing on the bootclasspath, not even the standard java.* libraries.
42*7594170eSAndroid Build Coastguard Worker# The android toolchain is undefined in this configuration.
43*7594170eSAndroid Build Coastguard Workerconfig_setting(
44*7594170eSAndroid Build Coastguard Worker    name = config_setting_names.SDK_NONE,
45*7594170eSAndroid Build Coastguard Worker    flag_values = {
46*7594170eSAndroid Build Coastguard Worker        "//build/bazel/rules/java/sdk:kind": sdk_version.KIND_NONE,
47*7594170eSAndroid Build Coastguard Worker    },
48*7594170eSAndroid Build Coastguard Worker)
49*7594170eSAndroid Build Coastguard Worker
50*7594170eSAndroid Build Coastguard Worker# Pre and Post Java 9 configs differ in how the bootclasspath is constructed and what arguments must
51*7594170eSAndroid Build Coastguard Worker# be passed to javac. Pre Java 9, the SDK is passed as a whole to the --bootclasspath argument of
52*7594170eSAndroid Build Coastguard Worker# javac. Post Java 9, the SDK is split between core libraries, passed using system modules and the
53*7594170eSAndroid Build Coastguard Worker# --system javac argument, and the rest, added at the beginning of the classpath.
54*7594170eSAndroid Build Coastguard Workerselects.config_setting_group(
55*7594170eSAndroid Build Coastguard Worker    name = config_setting_names.PRE_JAVA_9,
56*7594170eSAndroid Build Coastguard Worker    match_any = [
57*7594170eSAndroid Build Coastguard Worker        "//build/bazel/rules/java:" + java_versions.VERSION_TO_CONFIG_SETTING[version]
58*7594170eSAndroid Build Coastguard Worker        for version in java_versions.VERSION_TO_CONFIG_SETTING.keys()
59*7594170eSAndroid Build Coastguard Worker        if version < 9
60*7594170eSAndroid Build Coastguard Worker    ],
61*7594170eSAndroid Build Coastguard Worker)
62*7594170eSAndroid Build Coastguard Worker
63*7594170eSAndroid Build Coastguard Workerselects.config_setting_group(
64*7594170eSAndroid Build Coastguard Worker    name = config_setting_names.POST_JAVA_9,
65*7594170eSAndroid Build Coastguard Worker    match_any = [
66*7594170eSAndroid Build Coastguard Worker        "//build/bazel/rules/java:" + java_versions.VERSION_TO_CONFIG_SETTING[version]
67*7594170eSAndroid Build Coastguard Worker        for version in java_versions.VERSION_TO_CONFIG_SETTING.keys()
68*7594170eSAndroid Build Coastguard Worker        if version >= 9
69*7594170eSAndroid Build Coastguard Worker    ],
70*7594170eSAndroid Build Coastguard Worker)
71*7594170eSAndroid Build Coastguard Worker
72*7594170eSAndroid Build Coastguard Worker# Specific configuration at a given kind and api level will have the java and android toolchains
73*7594170eSAndroid Build Coastguard Worker# pointed to the proper android.jar and framework.aidl files.
74*7594170eSAndroid Build Coastguard Worker[
75*7594170eSAndroid Build Coastguard Worker    config_setting(
76*7594170eSAndroid Build Coastguard Worker        name = config_setting_names.kind_api(kind, api_level),
77*7594170eSAndroid Build Coastguard Worker        flag_values = {
78*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/java/sdk:kind": kind,
79*7594170eSAndroid Build Coastguard Worker            "//build/bazel/rules/java/sdk:api_level": str(api_level),
80*7594170eSAndroid Build Coastguard Worker        },
81*7594170eSAndroid Build Coastguard Worker    )
82*7594170eSAndroid Build Coastguard Worker    for api_level in prebuilt_sdk_utils.API_LEVELS
83*7594170eSAndroid Build Coastguard Worker    for kind in prebuilt_sdk_utils.available_kinds_for_api_level(api_level)
84*7594170eSAndroid Build Coastguard Worker]
85*7594170eSAndroid Build Coastguard Worker
86*7594170eSAndroid Build Coastguard Worker# The bootclasspath is a function of sdk kind, api level, and whether building for pre or post java
87*7594170eSAndroid Build Coastguard Worker# 9 sources.
88*7594170eSAndroid Build Coastguard Worker[
89*7594170eSAndroid Build Coastguard Worker    selects.config_setting_group(
90*7594170eSAndroid Build Coastguard Worker        name = config_setting_names.kind_api_pre_java_9(kind, api_level),
91*7594170eSAndroid Build Coastguard Worker        match_all = [
92*7594170eSAndroid Build Coastguard Worker            config_setting_names.kind_api(kind, api_level),
93*7594170eSAndroid Build Coastguard Worker            config_setting_names.PRE_JAVA_9,
94*7594170eSAndroid Build Coastguard Worker        ],
95*7594170eSAndroid Build Coastguard Worker    )
96*7594170eSAndroid Build Coastguard Worker    for api_level in prebuilt_sdk_utils.API_LEVELS
97*7594170eSAndroid Build Coastguard Worker    for kind in prebuilt_sdk_utils.available_kinds_for_api_level(api_level)
98*7594170eSAndroid Build Coastguard Worker    if java_versions.supports_pre_java_9(api_level)
99*7594170eSAndroid Build Coastguard Worker]
100*7594170eSAndroid Build Coastguard Worker
101*7594170eSAndroid Build Coastguard Worker[
102*7594170eSAndroid Build Coastguard Worker    selects.config_setting_group(
103*7594170eSAndroid Build Coastguard Worker        name = config_setting_names.kind_api_post_java_9(kind, api_level),
104*7594170eSAndroid Build Coastguard Worker        match_all = [
105*7594170eSAndroid Build Coastguard Worker            config_setting_names.kind_api(kind, api_level),
106*7594170eSAndroid Build Coastguard Worker            config_setting_names.POST_JAVA_9,
107*7594170eSAndroid Build Coastguard Worker        ],
108*7594170eSAndroid Build Coastguard Worker    )
109*7594170eSAndroid Build Coastguard Worker    for api_level in prebuilt_sdk_utils.API_LEVELS
110*7594170eSAndroid Build Coastguard Worker    for kind in prebuilt_sdk_utils.available_kinds_for_api_level(api_level)
111*7594170eSAndroid Build Coastguard Worker    if java_versions.supports_post_java_9(api_level)
112*7594170eSAndroid Build Coastguard Worker]
113