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//lib:paths.bzl", "paths") 18*7594170eSAndroid Build Coastguard Worker 19*7594170eSAndroid Build Coastguard Workerdef _java_resources_impl(ctx): 20*7594170eSAndroid Build Coastguard Worker java_runtime = ctx.attr._runtime[java_common.JavaRuntimeInfo] 21*7594170eSAndroid Build Coastguard Worker 22*7594170eSAndroid Build Coastguard Worker output_file = ctx.actions.declare_file(ctx.attr.name + "_java_resources.jar") 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Worker ctx.actions.run_shell( 25*7594170eSAndroid Build Coastguard Worker outputs = [output_file], 26*7594170eSAndroid Build Coastguard Worker inputs = ctx.files.resources, 27*7594170eSAndroid Build Coastguard Worker tools = java_runtime.files, 28*7594170eSAndroid Build Coastguard Worker command = "{} cvf {} -C {} .".format( 29*7594170eSAndroid Build Coastguard Worker paths.join(java_runtime.java_home, "bin", "jar"), 30*7594170eSAndroid Build Coastguard Worker output_file.path, 31*7594170eSAndroid Build Coastguard Worker ctx.attr.resource_strip_prefix, 32*7594170eSAndroid Build Coastguard Worker ), 33*7594170eSAndroid Build Coastguard Worker ) 34*7594170eSAndroid Build Coastguard Worker 35*7594170eSAndroid Build Coastguard Worker compile_jar = ctx.actions.declare_file(ctx.attr.name + "_java_resources-ijar.jar") 36*7594170eSAndroid Build Coastguard Worker java_common.run_ijar( 37*7594170eSAndroid Build Coastguard Worker actions = ctx.actions, 38*7594170eSAndroid Build Coastguard Worker jar = output_file, 39*7594170eSAndroid Build Coastguard Worker java_toolchain = ctx.toolchains["@bazel_tools//tools/jdk:toolchain_type"].java, 40*7594170eSAndroid Build Coastguard Worker ) 41*7594170eSAndroid Build Coastguard Worker 42*7594170eSAndroid Build Coastguard Worker return [ 43*7594170eSAndroid Build Coastguard Worker JavaInfo( 44*7594170eSAndroid Build Coastguard Worker output_jar = output_file, 45*7594170eSAndroid Build Coastguard Worker compile_jar = compile_jar, 46*7594170eSAndroid Build Coastguard Worker ), 47*7594170eSAndroid Build Coastguard Worker DefaultInfo(files = depset([output_file])), 48*7594170eSAndroid Build Coastguard Worker ] 49*7594170eSAndroid Build Coastguard Worker 50*7594170eSAndroid Build Coastguard Workerjava_resources = rule( 51*7594170eSAndroid Build Coastguard Worker doc = """ 52*7594170eSAndroid Build Coastguard Worker Package srcs into a jar, with the option of stripping a path prefix 53*7594170eSAndroid Build Coastguard Worker """, 54*7594170eSAndroid Build Coastguard Worker implementation = _java_resources_impl, 55*7594170eSAndroid Build Coastguard Worker attrs = { 56*7594170eSAndroid Build Coastguard Worker "resources": attr.label_list(allow_files = True), 57*7594170eSAndroid Build Coastguard Worker "resource_strip_prefix": attr.string( 58*7594170eSAndroid Build Coastguard Worker doc = """The path prefix to strip from resources. 59*7594170eSAndroid Build Coastguard Worker If specified, this path prefix is stripped from every fil 60*7594170eSAndroid Build Coastguard Worker in the resources attribute. It is an error for a resource 61*7594170eSAndroid Build Coastguard Worker file not to be under this directory. If not specified 62*7594170eSAndroid Build Coastguard Worker (the default), the path of resource file is determined 63*7594170eSAndroid Build Coastguard Worker according to the same logic as the Java package of source 64*7594170eSAndroid Build Coastguard Worker files. For example, a source file at stuff/java/foo/bar/a.txt 65*7594170eSAndroid Build Coastguard Worker will be located at foo/bar/a.txt.""", 66*7594170eSAndroid Build Coastguard Worker ), 67*7594170eSAndroid Build Coastguard Worker "_runtime": attr.label( 68*7594170eSAndroid Build Coastguard Worker default = Label("@bazel_tools//tools/jdk:current_java_runtime"), 69*7594170eSAndroid Build Coastguard Worker cfg = "exec", 70*7594170eSAndroid Build Coastguard Worker providers = [java_common.JavaRuntimeInfo], 71*7594170eSAndroid Build Coastguard Worker ), 72*7594170eSAndroid Build Coastguard Worker }, 73*7594170eSAndroid Build Coastguard Worker toolchains = ["@bazel_tools//tools/jdk:toolchain_type"], 74*7594170eSAndroid Build Coastguard Worker provides = [JavaInfo], 75*7594170eSAndroid Build Coastguard Worker) 76