xref: /aosp_15_r20/build/bazel/rules/java/merged_txts.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
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("//build/bazel/rules/java:sdk_library.bzl", "JavaSdkLibraryInfo")
18*7594170eSAndroid Build Coastguard Worker
19*7594170eSAndroid Build Coastguard WorkerMETALAVA_ARGS = [
20*7594170eSAndroid Build Coastguard Worker    "--quiet",
21*7594170eSAndroid Build Coastguard Worker    "--format=v2",
22*7594170eSAndroid Build Coastguard Worker]
23*7594170eSAndroid Build Coastguard Worker
24*7594170eSAndroid Build Coastguard Workerdef _get_inputs(ctx):
25*7594170eSAndroid Build Coastguard Worker    inputs = []
26*7594170eSAndroid Build Coastguard Worker    inputs.extend(ctx.files.base)
27*7594170eSAndroid Build Coastguard Worker    from_deps = []
28*7594170eSAndroid Build Coastguard Worker    if ctx.attr.scope == "public":
29*7594170eSAndroid Build Coastguard Worker        from_deps = [d[JavaSdkLibraryInfo].public for d in ctx.attr.deps]
30*7594170eSAndroid Build Coastguard Worker    elif ctx.attr.scope == "system":
31*7594170eSAndroid Build Coastguard Worker        from_deps = [d[JavaSdkLibraryInfo].system for d in ctx.attr.deps]
32*7594170eSAndroid Build Coastguard Worker    elif ctx.attr.scope == "module-lib":
33*7594170eSAndroid Build Coastguard Worker        from_deps = [d[JavaSdkLibraryInfo].module_lib for d in ctx.attr.deps]
34*7594170eSAndroid Build Coastguard Worker    elif ctx.attr.scope == "system-server":
35*7594170eSAndroid Build Coastguard Worker        from_deps = [d[JavaSdkLibraryInfo].system_server for d in ctx.attr.deps]
36*7594170eSAndroid Build Coastguard Worker    inputs.extend(from_deps)
37*7594170eSAndroid Build Coastguard Worker    return depset(inputs)
38*7594170eSAndroid Build Coastguard Worker
39*7594170eSAndroid Build Coastguard Workerdef _get_output_name(ctx):
40*7594170eSAndroid Build Coastguard Worker    output_name = "current.txt"
41*7594170eSAndroid Build Coastguard Worker    if ctx.attr.scope != "public":
42*7594170eSAndroid Build Coastguard Worker        output_name = ctx.attr.scope + "-" + output_name
43*7594170eSAndroid Build Coastguard Worker    return output_name
44*7594170eSAndroid Build Coastguard Worker
45*7594170eSAndroid Build Coastguard Workerdef _merged_txts_impl(ctx):
46*7594170eSAndroid Build Coastguard Worker    output = ctx.actions.declare_file(_get_output_name(ctx))
47*7594170eSAndroid Build Coastguard Worker    inputs = _get_inputs(ctx)
48*7594170eSAndroid Build Coastguard Worker    args = ctx.actions.args()
49*7594170eSAndroid Build Coastguard Worker    args.add_all(METALAVA_ARGS)
50*7594170eSAndroid Build Coastguard Worker    args.add_all(inputs)
51*7594170eSAndroid Build Coastguard Worker    args.add("--api", output)
52*7594170eSAndroid Build Coastguard Worker    ctx.actions.run(
53*7594170eSAndroid Build Coastguard Worker        outputs = [output],
54*7594170eSAndroid Build Coastguard Worker        inputs = inputs,
55*7594170eSAndroid Build Coastguard Worker        executable = ctx.executable._metalava,
56*7594170eSAndroid Build Coastguard Worker        arguments = [args],
57*7594170eSAndroid Build Coastguard Worker    )
58*7594170eSAndroid Build Coastguard Worker    return [DefaultInfo(files = depset([output]))]
59*7594170eSAndroid Build Coastguard Worker
60*7594170eSAndroid Build Coastguard Workermerged_txts = rule(
61*7594170eSAndroid Build Coastguard Worker    implementation = _merged_txts_impl,
62*7594170eSAndroid Build Coastguard Worker    attrs = {
63*7594170eSAndroid Build Coastguard Worker        "scope": attr.string(
64*7594170eSAndroid Build Coastguard Worker            doc = "api scope",
65*7594170eSAndroid Build Coastguard Worker        ),
66*7594170eSAndroid Build Coastguard Worker        "base": attr.label(
67*7594170eSAndroid Build Coastguard Worker            mandatory = True,
68*7594170eSAndroid Build Coastguard Worker            allow_single_file = True,
69*7594170eSAndroid Build Coastguard Worker            doc = "the target used to get the checked-in base current.txt",
70*7594170eSAndroid Build Coastguard Worker        ),
71*7594170eSAndroid Build Coastguard Worker        "deps": attr.label_list(
72*7594170eSAndroid Build Coastguard Worker            mandatory = True,
73*7594170eSAndroid Build Coastguard Worker            allow_empty = False,
74*7594170eSAndroid Build Coastguard Worker            providers = [JavaSdkLibraryInfo],
75*7594170eSAndroid Build Coastguard Worker        ),
76*7594170eSAndroid Build Coastguard Worker        "_metalava": attr.label(
77*7594170eSAndroid Build Coastguard Worker            default = "//tools/metalava/metalava:metalava",
78*7594170eSAndroid Build Coastguard Worker            executable = True,
79*7594170eSAndroid Build Coastguard Worker            cfg = "exec",
80*7594170eSAndroid Build Coastguard Worker        ),
81*7594170eSAndroid Build Coastguard Worker    },
82*7594170eSAndroid Build Coastguard Worker)
83