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