1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2022 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 Workerload("//build/bazel/rules/aidl:aidl_library.bzl", "AidlGenInfo", "aidl_file_utils") 16*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:sdk_transition.bzl", "sdk_transition") 17*7594170eSAndroid Build Coastguard Worker 18*7594170eSAndroid Build Coastguard WorkerJavaAidlAspectInfo = provider("JavaAidlAspectInfo", fields = ["jars"]) 19*7594170eSAndroid Build Coastguard Worker 20*7594170eSAndroid Build Coastguard Workerdef _java_aidl_gen_aspect_impl(target, ctx): 21*7594170eSAndroid Build Coastguard Worker aidl_gen_java_files = aidl_file_utils.generate_aidl_bindings(ctx, "java", target[AidlGenInfo]) 22*7594170eSAndroid Build Coastguard Worker java_deps = [ 23*7594170eSAndroid Build Coastguard Worker d[JavaInfo] 24*7594170eSAndroid Build Coastguard Worker for d in ctx.rule.attr.deps 25*7594170eSAndroid Build Coastguard Worker ] 26*7594170eSAndroid Build Coastguard Worker out_jar = ctx.actions.declare_file(target.label.name + "-aidl-gen.jar") 27*7594170eSAndroid Build Coastguard Worker java_info = java_common.compile( 28*7594170eSAndroid Build Coastguard Worker ctx, 29*7594170eSAndroid Build Coastguard Worker source_files = aidl_gen_java_files, 30*7594170eSAndroid Build Coastguard Worker deps = java_deps, 31*7594170eSAndroid Build Coastguard Worker output = out_jar, 32*7594170eSAndroid Build Coastguard Worker java_toolchain = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"].java, 33*7594170eSAndroid Build Coastguard Worker ) 34*7594170eSAndroid Build Coastguard Worker 35*7594170eSAndroid Build Coastguard Worker return [ 36*7594170eSAndroid Build Coastguard Worker java_info, 37*7594170eSAndroid Build Coastguard Worker JavaAidlAspectInfo( 38*7594170eSAndroid Build Coastguard Worker jars = depset([out_jar]), 39*7594170eSAndroid Build Coastguard Worker ), 40*7594170eSAndroid Build Coastguard Worker ] 41*7594170eSAndroid Build Coastguard Worker 42*7594170eSAndroid Build Coastguard Worker_java_aidl_gen_aspect = aspect( 43*7594170eSAndroid Build Coastguard Worker implementation = _java_aidl_gen_aspect_impl, 44*7594170eSAndroid Build Coastguard Worker attr_aspects = ["deps"], 45*7594170eSAndroid Build Coastguard Worker attrs = { 46*7594170eSAndroid Build Coastguard Worker "_aidl_tool": attr.label( 47*7594170eSAndroid Build Coastguard Worker allow_files = True, 48*7594170eSAndroid Build Coastguard Worker executable = True, 49*7594170eSAndroid Build Coastguard Worker cfg = "exec", 50*7594170eSAndroid Build Coastguard Worker default = Label("//system/tools/aidl"), 51*7594170eSAndroid Build Coastguard Worker ), 52*7594170eSAndroid Build Coastguard Worker }, 53*7594170eSAndroid Build Coastguard Worker toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], 54*7594170eSAndroid Build Coastguard Worker fragments = ["java"], 55*7594170eSAndroid Build Coastguard Worker provides = [JavaInfo, JavaAidlAspectInfo], 56*7594170eSAndroid Build Coastguard Worker) 57*7594170eSAndroid Build Coastguard Worker 58*7594170eSAndroid Build Coastguard Workerdef _java_aidl_library_rule_impl(ctx): 59*7594170eSAndroid Build Coastguard Worker java_info = java_common.merge([d[JavaInfo] for d in ctx.attr.deps]) 60*7594170eSAndroid Build Coastguard Worker runtime_jars = depset(transitive = [dep[JavaAidlAspectInfo].jars for dep in ctx.attr.deps]) 61*7594170eSAndroid Build Coastguard Worker transitive_runtime_jars = depset(transitive = [java_info.transitive_runtime_jars]) 62*7594170eSAndroid Build Coastguard Worker 63*7594170eSAndroid Build Coastguard Worker return [ 64*7594170eSAndroid Build Coastguard Worker java_info, 65*7594170eSAndroid Build Coastguard Worker DefaultInfo( 66*7594170eSAndroid Build Coastguard Worker files = runtime_jars, 67*7594170eSAndroid Build Coastguard Worker runfiles = ctx.runfiles(transitive_files = transitive_runtime_jars), 68*7594170eSAndroid Build Coastguard Worker ), 69*7594170eSAndroid Build Coastguard Worker OutputGroupInfo(default = depset()), 70*7594170eSAndroid Build Coastguard Worker ] 71*7594170eSAndroid Build Coastguard Worker 72*7594170eSAndroid Build Coastguard Workerjava_aidl_library = rule( 73*7594170eSAndroid Build Coastguard Worker implementation = _java_aidl_library_rule_impl, 74*7594170eSAndroid Build Coastguard Worker attrs = { 75*7594170eSAndroid Build Coastguard Worker # This attribute's name lets the DexArchiveAspect propagate 76*7594170eSAndroid Build Coastguard Worker # through it. It should be changed carefully. 77*7594170eSAndroid Build Coastguard Worker "deps": attr.label_list( 78*7594170eSAndroid Build Coastguard Worker providers = [AidlGenInfo], 79*7594170eSAndroid Build Coastguard Worker aspects = [_java_aidl_gen_aspect], 80*7594170eSAndroid Build Coastguard Worker cfg = sdk_transition, 81*7594170eSAndroid Build Coastguard Worker ), 82*7594170eSAndroid Build Coastguard Worker "java_version": attr.string(), 83*7594170eSAndroid Build Coastguard Worker "sdk_version": attr.string( 84*7594170eSAndroid Build Coastguard Worker default = "system_current", 85*7594170eSAndroid Build Coastguard Worker ), 86*7594170eSAndroid Build Coastguard Worker "_allowlist_function_transition": attr.label( 87*7594170eSAndroid Build Coastguard Worker default = "@bazel_tools//tools/allowlists/function_transition_allowlist", 88*7594170eSAndroid Build Coastguard Worker ), 89*7594170eSAndroid Build Coastguard Worker }, 90*7594170eSAndroid Build Coastguard Worker provides = [JavaInfo], 91*7594170eSAndroid Build Coastguard Worker) 92