1*7594170eSAndroid Build Coastguard Worker""" 2*7594170eSAndroid Build Coastguard WorkerCopyright (C) 2023 The Android Open Source Project 3*7594170eSAndroid Build Coastguard Worker 4*7594170eSAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License"); 5*7594170eSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License. 6*7594170eSAndroid Build Coastguard WorkerYou may obtain a copy of the License at 7*7594170eSAndroid Build Coastguard Worker 8*7594170eSAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 9*7594170eSAndroid Build Coastguard Worker 10*7594170eSAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software 11*7594170eSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS, 12*7594170eSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*7594170eSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and 14*7594170eSAndroid Build Coastguard Workerlimitations under the License. 15*7594170eSAndroid Build Coastguard Worker""" 16*7594170eSAndroid Build Coastguard Worker 17*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "string_setting") 18*7594170eSAndroid Build Coastguard Workerload("@bazel_tools//tools/jdk:default_java_toolchain.bzl", "DEFAULT_JAVACOPTS", "default_java_toolchain") 19*7594170eSAndroid Build Coastguard Workerload("@soong_injection//java_toolchain:constants.bzl", "constants") 20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java/errorprone:errorprone.bzl", "errorprone_global_flags") 21*7594170eSAndroid Build Coastguard Workerload(":bootclasspath.bzl", "bootclasspath") 22*7594170eSAndroid Build Coastguard Workerload(":bootclasspath_test.bzl", "bootclasspath_test_suite") 23*7594170eSAndroid Build Coastguard Workerload(":host_for_device_test.bzl", "host_for_device_test_suite") 24*7594170eSAndroid Build Coastguard Workerload(":java_aconfig_library_test.bzl", "java_aconfig_library_rt_test_suite", "java_aconfig_library_test_suite") 25*7594170eSAndroid Build Coastguard Workerload(":java_resources_test.bzl", "java_resources_test_suite") 26*7594170eSAndroid Build Coastguard Workerload(":java_sysprop_library_test.bzl", "java_sysprop_library_test_suite") 27*7594170eSAndroid Build Coastguard Workerload(":java_system_modules_test.bzl", "java_system_modules_test_suite") 28*7594170eSAndroid Build Coastguard Workerload(":java_xsd_config_library_test.bzl", "java_xsd_config_library_test_suite") 29*7594170eSAndroid Build Coastguard Workerload(":library_test.bzl", "java_library_test_suite") 30*7594170eSAndroid Build Coastguard Workerload(":merged_txts_test.bzl", "merged_txts_test_suite") 31*7594170eSAndroid Build Coastguard Workerload(":platform_compat_config_test.bzl", "platform_compat_config_test_suite") 32*7594170eSAndroid Build Coastguard Workerload(":sdk_library_test.bzl", "java_sdk_library_test_suite") 33*7594170eSAndroid Build Coastguard Workerload(":sdk_transition_test.bzl", "sdk_transition_test_suite") 34*7594170eSAndroid Build Coastguard Workerload(":versions.bzl", "java_versions") 35*7594170eSAndroid Build Coastguard Workerload(":versions_test.bzl", "versions_test_suite") 36*7594170eSAndroid Build Coastguard Worker 37*7594170eSAndroid Build Coastguard Workerpackage( 38*7594170eSAndroid Build Coastguard Worker default_visibility = ["//visibility:public"], 39*7594170eSAndroid Build Coastguard Worker) 40*7594170eSAndroid Build Coastguard Worker 41*7594170eSAndroid Build Coastguard Workerjava_sdk_library_test_suite(name = "java_sdk_library_tests") 42*7594170eSAndroid Build Coastguard Worker 43*7594170eSAndroid Build Coastguard Workermerged_txts_test_suite(name = "merged_txts_tests") 44*7594170eSAndroid Build Coastguard Worker 45*7594170eSAndroid Build Coastguard Workerjava_system_modules_test_suite(name = "java_system_modules_tests") 46*7594170eSAndroid Build Coastguard Worker 47*7594170eSAndroid Build Coastguard Workerjava_library_test_suite(name = "java_library_tests") 48*7594170eSAndroid Build Coastguard Worker 49*7594170eSAndroid Build Coastguard Workerbootclasspath_test_suite(name = "bootclasspath_tests") 50*7594170eSAndroid Build Coastguard Worker 51*7594170eSAndroid Build Coastguard Workerjava_resources_test_suite(name = "java_resources_test_suite") 52*7594170eSAndroid Build Coastguard Worker 53*7594170eSAndroid Build Coastguard Workerversions_test_suite(name = "versions_tests") 54*7594170eSAndroid Build Coastguard Worker 55*7594170eSAndroid Build Coastguard Workersdk_transition_test_suite(name = "sdk_transition_tests") 56*7594170eSAndroid Build Coastguard Worker 57*7594170eSAndroid Build Coastguard Workerhost_for_device_test_suite(name = "host_for_device_test_suite") 58*7594170eSAndroid Build Coastguard Worker 59*7594170eSAndroid Build Coastguard Workerjava_xsd_config_library_test_suite(name = "java_xsd_config_library_tests") 60*7594170eSAndroid Build Coastguard Worker 61*7594170eSAndroid Build Coastguard Workerplatform_compat_config_test_suite(name = "platform_compat_config_tests") 62*7594170eSAndroid Build Coastguard Worker 63*7594170eSAndroid Build Coastguard Workerjava_aconfig_library_test_suite(name = "java_aconfig_library_test") 64*7594170eSAndroid Build Coastguard Worker 65*7594170eSAndroid Build Coastguard Workerjava_aconfig_library_rt_test_suite(name = "java_aconfig_library_rt_test") 66*7594170eSAndroid Build Coastguard Worker 67*7594170eSAndroid Build Coastguard Workerjava_sysprop_library_test_suite(name = "java_sysprop_library_tests") 68*7594170eSAndroid Build Coastguard Worker 69*7594170eSAndroid Build Coastguard Workerstring_setting( 70*7594170eSAndroid Build Coastguard Worker name = "version", 71*7594170eSAndroid Build Coastguard Worker build_setting_default = str(java_versions.get_version()), 72*7594170eSAndroid Build Coastguard Worker values = [str(v) for v in java_versions.ALL_VERSIONS], 73*7594170eSAndroid Build Coastguard Worker) 74*7594170eSAndroid Build Coastguard Worker 75*7594170eSAndroid Build Coastguard Worker[ 76*7594170eSAndroid Build Coastguard Worker config_setting( 77*7594170eSAndroid Build Coastguard Worker name = setting, 78*7594170eSAndroid Build Coastguard Worker flag_values = { 79*7594170eSAndroid Build Coastguard Worker "//build/bazel/rules/java:version": str(java_version), 80*7594170eSAndroid Build Coastguard Worker }, 81*7594170eSAndroid Build Coastguard Worker ) 82*7594170eSAndroid Build Coastguard Worker for java_version, setting in java_versions.VERSION_TO_CONFIG_SETTING.items() 83*7594170eSAndroid Build Coastguard Worker] 84*7594170eSAndroid Build Coastguard Worker 85*7594170eSAndroid Build Coastguard Worker# There is no need for both host and device java version build settings in a 86*7594170eSAndroid Build Coastguard Worker# world where every java_*/android_*/kt_* target uses the AOSP-specific 87*7594170eSAndroid Build Coastguard Worker# wrappers. However, there are targets defined by BUILD.tools files within the 88*7594170eSAndroid Build Coastguard Worker# Bazel binary that do not use the wrapper. These would inherit their java 89*7594170eSAndroid Build Coastguard Worker# version from their reverse dependency, which can cause build failures (e.g. an 90*7594170eSAndroid Build Coastguard Worker# android_library_import with java_version=7 has a tools dependency on a 91*7594170eSAndroid Build Coastguard Worker# non-wrapped Bazel java_library that uses lambdas). By using a separate host 92*7594170eSAndroid Build Coastguard Worker# version, we can reset it to its default when in the device configuration, so 93*7594170eSAndroid Build Coastguard Worker# that a subsequent exec transition will use the default java version. 94*7594170eSAndroid Build Coastguard Workerstring_setting( 95*7594170eSAndroid Build Coastguard Worker name = "host_version", 96*7594170eSAndroid Build Coastguard Worker build_setting_default = str(java_versions.get_version()), 97*7594170eSAndroid Build Coastguard Worker values = [str(v) for v in java_versions.ALL_VERSIONS], 98*7594170eSAndroid Build Coastguard Worker) 99*7594170eSAndroid Build Coastguard Worker 100*7594170eSAndroid Build Coastguard Worker[ 101*7594170eSAndroid Build Coastguard Worker config_setting( 102*7594170eSAndroid Build Coastguard Worker name = "host_" + setting, 103*7594170eSAndroid Build Coastguard Worker flag_values = { 104*7594170eSAndroid Build Coastguard Worker "//build/bazel/rules/java:host_version": str(java_version), 105*7594170eSAndroid Build Coastguard Worker }, 106*7594170eSAndroid Build Coastguard Worker ) 107*7594170eSAndroid Build Coastguard Worker for java_version, setting in java_versions.VERSION_TO_CONFIG_SETTING.items() 108*7594170eSAndroid Build Coastguard Worker] 109*7594170eSAndroid Build Coastguard Worker 110*7594170eSAndroid Build Coastguard Workerjava_version_select_dict = { 111*7594170eSAndroid Build Coastguard Worker "host_" + setting: str(version) 112*7594170eSAndroid Build Coastguard Worker for version, setting in java_versions.VERSION_TO_CONFIG_SETTING.items() 113*7594170eSAndroid Build Coastguard Worker} | { 114*7594170eSAndroid Build Coastguard Worker "//conditions:default": str(java_versions.get_version()), 115*7594170eSAndroid Build Coastguard Worker} 116*7594170eSAndroid Build Coastguard Worker 117*7594170eSAndroid Build Coastguard Worker# Give host-side tools a version of OpenJDK's standard libraries 118*7594170eSAndroid Build Coastguard Worker# close to what they're targeting. As of Dec 2017, AOSP is only 119*7594170eSAndroid Build Coastguard Worker# bundling OpenJDK 8 and 9, so nothing < 8 is available. 120*7594170eSAndroid Build Coastguard Worker# 121*7594170eSAndroid Build Coastguard Worker# When building with OpenJDK 8, the following should have no 122*7594170eSAndroid Build Coastguard Worker# effect since those jars would be available by default. 123*7594170eSAndroid Build Coastguard Worker# 124*7594170eSAndroid Build Coastguard Worker# When building with OpenJDK 9 but targeting a version < 1.8, 125*7594170eSAndroid Build Coastguard Worker# putting them on the bootclasspath means that: 126*7594170eSAndroid Build Coastguard Worker# a) code can't (accidentally) refer to OpenJDK 9 specific APIs 127*7594170eSAndroid Build Coastguard Worker# b) references to existing APIs are not reinterpreted in an 128*7594170eSAndroid Build Coastguard Worker# OpenJDK 9-specific way, eg. calls to subclasses of 129*7594170eSAndroid Build Coastguard Worker# java.nio.Buffer as in http://b/70862583 130*7594170eSAndroid Build Coastguard Worker 131*7594170eSAndroid Build Coastguard Workerbootclasspath( 132*7594170eSAndroid Build Coastguard Worker name = "pre_java9_bootclasspath", 133*7594170eSAndroid Build Coastguard Worker auxiliary = ["//prebuilts/jdk/jdk8:pre_java9_bootclasspath_jars"], 134*7594170eSAndroid Build Coastguard Worker bootclasspath = ["//prebuilts/jdk/jdk8:pre_java9_bootclasspath_jars"], 135*7594170eSAndroid Build Coastguard Worker system = None, 136*7594170eSAndroid Build Coastguard Worker) 137*7594170eSAndroid Build Coastguard Worker 138*7594170eSAndroid Build Coastguard Workerdefault_java_toolchain( 139*7594170eSAndroid Build Coastguard Worker name = "jdk21_host_toolchain_java", 140*7594170eSAndroid Build Coastguard Worker bootclasspath = select({ 141*7594170eSAndroid Build Coastguard Worker "host_config_setting_java_7": [":pre_java9_bootclasspath"], 142*7594170eSAndroid Build Coastguard Worker "host_config_setting_java_8": [":pre_java9_bootclasspath"], 143*7594170eSAndroid Build Coastguard Worker "//conditions:default": ["@rules_java_builtin//toolchains:platformclasspath"], 144*7594170eSAndroid Build Coastguard Worker }), 145*7594170eSAndroid Build Coastguard Worker # TODO(b/218720643): Support switching between multiple JDKs. 146*7594170eSAndroid Build Coastguard Worker java_runtime = "//prebuilts/jdk/jdk21:jdk21_runtime", 147*7594170eSAndroid Build Coastguard Worker misc = errorprone_global_flags + DEFAULT_JAVACOPTS + constants.CommonJdkFlags, 148*7594170eSAndroid Build Coastguard Worker source_version = select(java_version_select_dict), 149*7594170eSAndroid Build Coastguard Worker target_version = select(java_version_select_dict), 150*7594170eSAndroid Build Coastguard Worker toolchain_definition = False, 151*7594170eSAndroid Build Coastguard Worker) 152*7594170eSAndroid Build Coastguard Worker 153*7594170eSAndroid Build Coastguard Workertoolchain( 154*7594170eSAndroid Build Coastguard Worker name = "jdk21_host_toolchain_java_definition", 155*7594170eSAndroid Build Coastguard Worker exec_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"], 156*7594170eSAndroid Build Coastguard Worker target_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"], 157*7594170eSAndroid Build Coastguard Worker target_settings = [], 158*7594170eSAndroid Build Coastguard Worker toolchain = ":jdk21_host_toolchain_java", 159*7594170eSAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/jdk:toolchain_type", 160*7594170eSAndroid Build Coastguard Worker) 161