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 Worker"""Macro wrapping the java_aconfig_library for bp2build. """ 16*7594170eSAndroid Build Coastguard Worker 17*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//lib:paths.bzl", "paths") 18*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/aconfig:aconfig_declarations.bzl", "AconfigDeclarationsInfo") 19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/rules/java:sdk_transition.bzl", "sdk_transition") 20*7594170eSAndroid Build Coastguard Worker 21*7594170eSAndroid Build Coastguard Workerdef _java_aconfig_library_impl(ctx): 22*7594170eSAndroid Build Coastguard Worker gen_dir_str = paths.join(ctx.label.name, "gen") 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Worker aconfig_declarations = ctx.attr.aconfig_declarations[AconfigDeclarationsInfo] 25*7594170eSAndroid Build Coastguard Worker gen_srcjar = ctx.actions.declare_file(paths.join(gen_dir_str, ctx.label.name + ".srcjar")) 26*7594170eSAndroid Build Coastguard Worker 27*7594170eSAndroid Build Coastguard Worker # TODO(b/301457407): find a solution for declare_directory. 28*7594170eSAndroid Build Coastguard Worker gen_srcjar_tmp = ctx.actions.declare_directory("tmp", sibling = gen_srcjar) 29*7594170eSAndroid Build Coastguard Worker 30*7594170eSAndroid Build Coastguard Worker intermediate_path = aconfig_declarations.intermediate_path 31*7594170eSAndroid Build Coastguard Worker 32*7594170eSAndroid Build Coastguard Worker mode = "production" 33*7594170eSAndroid Build Coastguard Worker if ctx.attr.test: 34*7594170eSAndroid Build Coastguard Worker mode = "test" 35*7594170eSAndroid Build Coastguard Worker 36*7594170eSAndroid Build Coastguard Worker args = ctx.actions.args() 37*7594170eSAndroid Build Coastguard Worker args.add("create-java-lib") 38*7594170eSAndroid Build Coastguard Worker args.add_all(["--mode", mode]) 39*7594170eSAndroid Build Coastguard Worker args.add_all(["--cache", intermediate_path]) 40*7594170eSAndroid Build Coastguard Worker args.add_all(["--out", gen_srcjar_tmp.path]) 41*7594170eSAndroid Build Coastguard Worker 42*7594170eSAndroid Build Coastguard Worker ctx.actions.run( 43*7594170eSAndroid Build Coastguard Worker inputs = [intermediate_path], 44*7594170eSAndroid Build Coastguard Worker executable = ctx.executable._aconfig, 45*7594170eSAndroid Build Coastguard Worker outputs = [gen_srcjar_tmp], 46*7594170eSAndroid Build Coastguard Worker arguments = [args], 47*7594170eSAndroid Build Coastguard Worker tools = [ 48*7594170eSAndroid Build Coastguard Worker ctx.executable._aconfig, 49*7594170eSAndroid Build Coastguard Worker ], 50*7594170eSAndroid Build Coastguard Worker mnemonic = "AconfigCreateJavaLib", 51*7594170eSAndroid Build Coastguard Worker ) 52*7594170eSAndroid Build Coastguard Worker 53*7594170eSAndroid Build Coastguard Worker args = ctx.actions.args() 54*7594170eSAndroid Build Coastguard Worker args.add("-write_if_changed") 55*7594170eSAndroid Build Coastguard Worker args.add("-jar") 56*7594170eSAndroid Build Coastguard Worker args.add("-o", gen_srcjar) 57*7594170eSAndroid Build Coastguard Worker args.add("-C", gen_srcjar_tmp.path) 58*7594170eSAndroid Build Coastguard Worker args.add("-D", gen_srcjar_tmp.path) 59*7594170eSAndroid Build Coastguard Worker args.add("-symlinks=false") 60*7594170eSAndroid Build Coastguard Worker 61*7594170eSAndroid Build Coastguard Worker ctx.actions.run( 62*7594170eSAndroid Build Coastguard Worker executable = ctx.executable._soong_zip, 63*7594170eSAndroid Build Coastguard Worker inputs = [gen_srcjar_tmp], 64*7594170eSAndroid Build Coastguard Worker outputs = [gen_srcjar], 65*7594170eSAndroid Build Coastguard Worker arguments = [args], 66*7594170eSAndroid Build Coastguard Worker tools = [ 67*7594170eSAndroid Build Coastguard Worker ctx.executable._soong_zip, 68*7594170eSAndroid Build Coastguard Worker ], 69*7594170eSAndroid Build Coastguard Worker mnemonic = "AconfigZipJavaLib", 70*7594170eSAndroid Build Coastguard Worker ) 71*7594170eSAndroid Build Coastguard Worker 72*7594170eSAndroid Build Coastguard Worker out_file = ctx.actions.declare_file(ctx.label.name + ".jar") 73*7594170eSAndroid Build Coastguard Worker java_info = java_common.compile( 74*7594170eSAndroid Build Coastguard Worker ctx, 75*7594170eSAndroid Build Coastguard Worker source_jars = [gen_srcjar], 76*7594170eSAndroid Build Coastguard Worker deps = [d[JavaInfo] for d in ctx.attr.libs], 77*7594170eSAndroid Build Coastguard Worker output = out_file, 78*7594170eSAndroid Build Coastguard Worker java_toolchain = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"].java, 79*7594170eSAndroid Build Coastguard Worker ) 80*7594170eSAndroid Build Coastguard Worker 81*7594170eSAndroid Build Coastguard Worker return [ 82*7594170eSAndroid Build Coastguard Worker java_info, 83*7594170eSAndroid Build Coastguard Worker DefaultInfo( 84*7594170eSAndroid Build Coastguard Worker files = depset([out_file]), 85*7594170eSAndroid Build Coastguard Worker runfiles = ctx.runfiles( 86*7594170eSAndroid Build Coastguard Worker transitive_files = depset( 87*7594170eSAndroid Build Coastguard Worker transitive = [java_info.transitive_runtime_jars], 88*7594170eSAndroid Build Coastguard Worker ), 89*7594170eSAndroid Build Coastguard Worker ), 90*7594170eSAndroid Build Coastguard Worker ), 91*7594170eSAndroid Build Coastguard Worker OutputGroupInfo( 92*7594170eSAndroid Build Coastguard Worker srcjar = depset([gen_srcjar]), 93*7594170eSAndroid Build Coastguard Worker ), 94*7594170eSAndroid Build Coastguard Worker ] 95*7594170eSAndroid Build Coastguard Worker 96*7594170eSAndroid Build Coastguard Worker_java_aconfig_library = rule( 97*7594170eSAndroid Build Coastguard Worker implementation = _java_aconfig_library_impl, 98*7594170eSAndroid Build Coastguard Worker cfg = sdk_transition, 99*7594170eSAndroid Build Coastguard Worker attrs = { 100*7594170eSAndroid Build Coastguard Worker "aconfig_declarations": attr.label( 101*7594170eSAndroid Build Coastguard Worker providers = [AconfigDeclarationsInfo], 102*7594170eSAndroid Build Coastguard Worker mandatory = True, 103*7594170eSAndroid Build Coastguard Worker ), 104*7594170eSAndroid Build Coastguard Worker "libs": attr.label_list( 105*7594170eSAndroid Build Coastguard Worker providers = [JavaInfo], 106*7594170eSAndroid Build Coastguard Worker ), 107*7594170eSAndroid Build Coastguard Worker "test": attr.bool(default = False), 108*7594170eSAndroid Build Coastguard Worker "java_version": attr.string(), 109*7594170eSAndroid Build Coastguard Worker "sdk_version": attr.string(), 110*7594170eSAndroid Build Coastguard Worker "_aconfig": attr.label( 111*7594170eSAndroid Build Coastguard Worker allow_single_file = True, 112*7594170eSAndroid Build Coastguard Worker executable = True, 113*7594170eSAndroid Build Coastguard Worker cfg = "exec", 114*7594170eSAndroid Build Coastguard Worker default = Label("//build/make/tools/aconfig:aconfig"), 115*7594170eSAndroid Build Coastguard Worker ), 116*7594170eSAndroid Build Coastguard Worker "_soong_zip": attr.label( 117*7594170eSAndroid Build Coastguard Worker executable = True, 118*7594170eSAndroid Build Coastguard Worker cfg = "exec", 119*7594170eSAndroid Build Coastguard Worker allow_single_file = True, 120*7594170eSAndroid Build Coastguard Worker default = Label("//build/soong/zip/cmd:soong_zip"), 121*7594170eSAndroid Build Coastguard Worker ), 122*7594170eSAndroid Build Coastguard Worker "_allowlist_function_transition": attr.label( 123*7594170eSAndroid Build Coastguard Worker default = "@bazel_tools//tools/allowlists/function_transition_allowlist", 124*7594170eSAndroid Build Coastguard Worker ), 125*7594170eSAndroid Build Coastguard Worker }, 126*7594170eSAndroid Build Coastguard Worker toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], 127*7594170eSAndroid Build Coastguard Worker fragments = ["java"], 128*7594170eSAndroid Build Coastguard Worker provides = [JavaInfo], 129*7594170eSAndroid Build Coastguard Worker) 130*7594170eSAndroid Build Coastguard Worker 131*7594170eSAndroid Build Coastguard Workerdef java_aconfig_library( 132*7594170eSAndroid Build Coastguard Worker name, 133*7594170eSAndroid Build Coastguard Worker aconfig_declarations, 134*7594170eSAndroid Build Coastguard Worker test = False, 135*7594170eSAndroid Build Coastguard Worker sdk_version = "system_current", 136*7594170eSAndroid Build Coastguard Worker java_version = None, 137*7594170eSAndroid Build Coastguard Worker visibility = None, 138*7594170eSAndroid Build Coastguard Worker libs = [], 139*7594170eSAndroid Build Coastguard Worker tags = [], 140*7594170eSAndroid Build Coastguard Worker target_compatible_with = []): 141*7594170eSAndroid Build Coastguard Worker combined_libs = [ 142*7594170eSAndroid Build Coastguard Worker "//frameworks/libs/modules-utils/java:aconfig-annotations-lib", 143*7594170eSAndroid Build Coastguard Worker "//tools/platform-compat/java/android/compat/annotation:unsupportedappusage", 144*7594170eSAndroid Build Coastguard Worker ] + libs 145*7594170eSAndroid Build Coastguard Worker _java_aconfig_library( 146*7594170eSAndroid Build Coastguard Worker name = name, 147*7594170eSAndroid Build Coastguard Worker aconfig_declarations = aconfig_declarations, 148*7594170eSAndroid Build Coastguard Worker libs = combined_libs, 149*7594170eSAndroid Build Coastguard Worker test = test, 150*7594170eSAndroid Build Coastguard Worker sdk_version = sdk_version, 151*7594170eSAndroid Build Coastguard Worker java_version = java_version, 152*7594170eSAndroid Build Coastguard Worker visibility = visibility, 153*7594170eSAndroid Build Coastguard Worker tags = tags, 154*7594170eSAndroid Build Coastguard Worker target_compatible_with = target_compatible_with, 155*7594170eSAndroid Build Coastguard Worker ) 156*7594170eSAndroid Build Coastguard Worker 157*7594170eSAndroid Build Coastguard Worker native.filegroup( 158*7594170eSAndroid Build Coastguard Worker name = name + ".generated_srcjars", 159*7594170eSAndroid Build Coastguard Worker srcs = [name], 160*7594170eSAndroid Build Coastguard Worker output_group = "srcjar", 161*7594170eSAndroid Build Coastguard Worker visibility = visibility, 162*7594170eSAndroid Build Coastguard Worker tags = tags, 163*7594170eSAndroid Build Coastguard Worker ) 164