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("@rules_kotlin//kotlin:compiler_opt.bzl", "kt_compiler_opt") 18*7594170eSAndroid Build Coastguard Workerload("@rules_kotlin//kotlin:rules.bzl", _kt_jvm_library = "kt_jvm_library") 19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:java_resources.bzl", "java_resources") 20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:sdk_transition.bzl", "sdk_transition_attrs") 21*7594170eSAndroid Build Coastguard Worker 22*7594170eSAndroid Build Coastguard Workerdef make_kt_compiler_opt( 23*7594170eSAndroid Build Coastguard Worker name, 24*7594170eSAndroid Build Coastguard Worker kotlincflags = None): 25*7594170eSAndroid Build Coastguard Worker custom_kotlincopts = None 26*7594170eSAndroid Build Coastguard Worker if kotlincflags != None: 27*7594170eSAndroid Build Coastguard Worker ktcopts_name = name + "_kotlincopts" 28*7594170eSAndroid Build Coastguard Worker kt_compiler_opt( 29*7594170eSAndroid Build Coastguard Worker name = ktcopts_name, 30*7594170eSAndroid Build Coastguard Worker opts = kotlincflags, 31*7594170eSAndroid Build Coastguard Worker ) 32*7594170eSAndroid Build Coastguard Worker custom_kotlincopts = [":" + ktcopts_name] 33*7594170eSAndroid Build Coastguard Worker 34*7594170eSAndroid Build Coastguard Worker return custom_kotlincopts 35*7594170eSAndroid Build Coastguard Worker 36*7594170eSAndroid Build Coastguard Worker# TODO(b/277801336): document these attributes. 37*7594170eSAndroid Build Coastguard Workerdef kt_jvm_library( 38*7594170eSAndroid Build Coastguard Worker name, 39*7594170eSAndroid Build Coastguard Worker deps = None, 40*7594170eSAndroid Build Coastguard Worker resources = None, 41*7594170eSAndroid Build Coastguard Worker resource_strip_prefix = None, 42*7594170eSAndroid Build Coastguard Worker kotlincflags = None, 43*7594170eSAndroid Build Coastguard Worker java_version = None, 44*7594170eSAndroid Build Coastguard Worker sdk_version = None, 45*7594170eSAndroid Build Coastguard Worker javacopts = [], 46*7594170eSAndroid Build Coastguard Worker errorprone_force_enable = None, 47*7594170eSAndroid Build Coastguard Worker tags = [], 48*7594170eSAndroid Build Coastguard Worker target_compatible_with = [], 49*7594170eSAndroid Build Coastguard Worker visibility = None, 50*7594170eSAndroid Build Coastguard Worker **kwargs): 51*7594170eSAndroid Build Coastguard Worker """Bazel macro wrapping for kt_jvm_library 52*7594170eSAndroid Build Coastguard Worker 53*7594170eSAndroid Build Coastguard Worker Attributes: 54*7594170eSAndroid Build Coastguard Worker errorprone_force_enable: set this to true to always run Error Prone 55*7594170eSAndroid Build Coastguard Worker on this target (overriding the value of environment variable 56*7594170eSAndroid Build Coastguard Worker RUN_ERROR_PRONE). Error Prone can be force disabled for an individual 57*7594170eSAndroid Build Coastguard Worker module by adding the "-XepDisableAllChecks" flag to javacopts 58*7594170eSAndroid Build Coastguard Worker """ 59*7594170eSAndroid Build Coastguard Worker if resource_strip_prefix != None: 60*7594170eSAndroid Build Coastguard Worker kt_res_jar_name = name + "__kt_res_jar" 61*7594170eSAndroid Build Coastguard Worker 62*7594170eSAndroid Build Coastguard Worker java_resources( 63*7594170eSAndroid Build Coastguard Worker name = kt_res_jar_name, 64*7594170eSAndroid Build Coastguard Worker resources = resources, 65*7594170eSAndroid Build Coastguard Worker resource_strip_prefix = resource_strip_prefix, 66*7594170eSAndroid Build Coastguard Worker ) 67*7594170eSAndroid Build Coastguard Worker 68*7594170eSAndroid Build Coastguard Worker deps = deps + [":" + kt_res_jar_name] 69*7594170eSAndroid Build Coastguard Worker 70*7594170eSAndroid Build Coastguard Worker custom_kotlincopts = make_kt_compiler_opt(name, kotlincflags) 71*7594170eSAndroid Build Coastguard Worker 72*7594170eSAndroid Build Coastguard Worker opts = javacopts 73*7594170eSAndroid Build Coastguard Worker if errorprone_force_enable == None: 74*7594170eSAndroid Build Coastguard Worker # TODO (b/227504307) temporarily disable errorprone until environment variable is handled 75*7594170eSAndroid Build Coastguard Worker opts = opts + ["-XepDisableAllChecks"] 76*7594170eSAndroid Build Coastguard Worker 77*7594170eSAndroid Build Coastguard Worker lib_name = name + "_private" 78*7594170eSAndroid Build Coastguard Worker _kt_jvm_library( 79*7594170eSAndroid Build Coastguard Worker name = lib_name, 80*7594170eSAndroid Build Coastguard Worker deps = deps, 81*7594170eSAndroid Build Coastguard Worker custom_kotlincopts = custom_kotlincopts, 82*7594170eSAndroid Build Coastguard Worker javacopts = opts, 83*7594170eSAndroid Build Coastguard Worker tags = tags + ["manual"], 84*7594170eSAndroid Build Coastguard Worker target_compatible_with = target_compatible_with, 85*7594170eSAndroid Build Coastguard Worker visibility = ["//visibility:private"], 86*7594170eSAndroid Build Coastguard Worker **kwargs 87*7594170eSAndroid Build Coastguard Worker ) 88*7594170eSAndroid Build Coastguard Worker 89*7594170eSAndroid Build Coastguard Worker kt_jvm_library_sdk_transition( 90*7594170eSAndroid Build Coastguard Worker name = name, 91*7594170eSAndroid Build Coastguard Worker sdk_version = sdk_version, 92*7594170eSAndroid Build Coastguard Worker java_version = java_version, 93*7594170eSAndroid Build Coastguard Worker exports = lib_name, 94*7594170eSAndroid Build Coastguard Worker tags = tags, 95*7594170eSAndroid Build Coastguard Worker target_compatible_with = target_compatible_with, 96*7594170eSAndroid Build Coastguard Worker visibility = visibility, 97*7594170eSAndroid Build Coastguard Worker ) 98*7594170eSAndroid Build Coastguard Worker 99*7594170eSAndroid Build Coastguard Worker# The list of providers to forward was determined using cquery on one 100*7594170eSAndroid Build Coastguard Worker# of the example targets listed under EXAMPLE_WRAPPER_TARGETS at 101*7594170eSAndroid Build Coastguard Worker# //build/bazel/ci/target_lists.sh. It may not be exhaustive. A unit 102*7594170eSAndroid Build Coastguard Worker# test ensures that the wrapper's providers and the wrapped rule's do 103*7594170eSAndroid Build Coastguard Worker# match. 104*7594170eSAndroid Build Coastguard Workerdef _kt_jvm_library_sdk_transition_impl(ctx): 105*7594170eSAndroid Build Coastguard Worker return [ 106*7594170eSAndroid Build Coastguard Worker ctx.attr.exports[0][JavaInfo], 107*7594170eSAndroid Build Coastguard Worker ctx.attr.exports[0][InstrumentedFilesInfo], 108*7594170eSAndroid Build Coastguard Worker ctx.attr.exports[0][ProguardSpecProvider], 109*7594170eSAndroid Build Coastguard Worker ctx.attr.exports[0][OutputGroupInfo], 110*7594170eSAndroid Build Coastguard Worker ctx.attr.exports[0][DefaultInfo], 111*7594170eSAndroid Build Coastguard Worker ] 112*7594170eSAndroid Build Coastguard Worker 113*7594170eSAndroid Build Coastguard Workerkt_jvm_library_sdk_transition = rule( 114*7594170eSAndroid Build Coastguard Worker implementation = _kt_jvm_library_sdk_transition_impl, 115*7594170eSAndroid Build Coastguard Worker attrs = sdk_transition_attrs, 116*7594170eSAndroid Build Coastguard Worker provides = [JavaInfo], 117*7594170eSAndroid Build Coastguard Worker) 118