1# Copyright (C) 2023 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15package( 16 default_visibility = ["//visibility:public"], 17) 18 19load("@bazel_skylib//rules:common_settings.bzl", "int_setting", "string_setting") 20load("//build/bazel/rules/common:sdk_version.bzl", "sdk_version") 21load("//build/bazel/rules/common:api.bzl", "api") 22load("//build/bazel/rules/java:versions.bzl", "java_versions") 23load(":config_setting_names.bzl", "config_setting_names") 24load("@bazel_skylib//lib:selects.bzl", "selects") 25load("//prebuilts/sdk:utils.bzl", "prebuilt_sdk_utils") 26 27string_setting( 28 name = "kind", 29 build_setting_default = sdk_version.KIND_PUBLIC, 30 values = sdk_version.ALL_KINDS, 31) 32 33int_setting( 34 name = "api_level", 35 build_setting_default = api.FUTURE_API_LEVEL, 36) 37 38# The settings below are used to properly define a device java and android toolchain. 39 40# The SDK_NONE config setting maps to sdk_version = "none". In this configuration the java toolchain 41# will provide nothing on the bootclasspath, not even the standard java.* libraries. 42# The android toolchain is undefined in this configuration. 43config_setting( 44 name = config_setting_names.SDK_NONE, 45 flag_values = { 46 "//build/bazel/rules/java/sdk:kind": sdk_version.KIND_NONE, 47 }, 48) 49 50# Pre and Post Java 9 configs differ in how the bootclasspath is constructed and what arguments must 51# be passed to javac. Pre Java 9, the SDK is passed as a whole to the --bootclasspath argument of 52# javac. Post Java 9, the SDK is split between core libraries, passed using system modules and the 53# --system javac argument, and the rest, added at the beginning of the classpath. 54selects.config_setting_group( 55 name = config_setting_names.PRE_JAVA_9, 56 match_any = [ 57 "//build/bazel/rules/java:" + java_versions.VERSION_TO_CONFIG_SETTING[version] 58 for version in java_versions.VERSION_TO_CONFIG_SETTING.keys() 59 if version < 9 60 ], 61) 62 63selects.config_setting_group( 64 name = config_setting_names.POST_JAVA_9, 65 match_any = [ 66 "//build/bazel/rules/java:" + java_versions.VERSION_TO_CONFIG_SETTING[version] 67 for version in java_versions.VERSION_TO_CONFIG_SETTING.keys() 68 if version >= 9 69 ], 70) 71 72# Specific configuration at a given kind and api level will have the java and android toolchains 73# pointed to the proper android.jar and framework.aidl files. 74[ 75 config_setting( 76 name = config_setting_names.kind_api(kind, api_level), 77 flag_values = { 78 "//build/bazel/rules/java/sdk:kind": kind, 79 "//build/bazel/rules/java/sdk:api_level": str(api_level), 80 }, 81 ) 82 for api_level in prebuilt_sdk_utils.API_LEVELS 83 for kind in prebuilt_sdk_utils.available_kinds_for_api_level(api_level) 84] 85 86# The bootclasspath is a function of sdk kind, api level, and whether building for pre or post java 87# 9 sources. 88[ 89 selects.config_setting_group( 90 name = config_setting_names.kind_api_pre_java_9(kind, api_level), 91 match_all = [ 92 config_setting_names.kind_api(kind, api_level), 93 config_setting_names.PRE_JAVA_9, 94 ], 95 ) 96 for api_level in prebuilt_sdk_utils.API_LEVELS 97 for kind in prebuilt_sdk_utils.available_kinds_for_api_level(api_level) 98 if java_versions.supports_pre_java_9(api_level) 99] 100 101[ 102 selects.config_setting_group( 103 name = config_setting_names.kind_api_post_java_9(kind, api_level), 104 match_all = [ 105 config_setting_names.kind_api(kind, api_level), 106 config_setting_names.POST_JAVA_9, 107 ], 108 ) 109 for api_level in prebuilt_sdk_utils.API_LEVELS 110 for kind in prebuilt_sdk_utils.available_kinds_for_api_level(api_level) 111 if java_versions.supports_post_java_9(api_level) 112] 113