xref: /aosp_15_r20/build/bazel/rules/aconfig/aconfig_declarations.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
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 Workerload("@bazel_skylib//lib:paths.bzl", "paths")
16*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
17*7594170eSAndroid Build Coastguard Workerload(":aconfig_value_set.bzl", "AconfigValueSetInfo")
18*7594170eSAndroid Build Coastguard Workerload(":aconfig_value_sets.bzl", "AconfigValueSetsInfo")
19*7594170eSAndroid Build Coastguard Worker
20*7594170eSAndroid Build Coastguard WorkerAconfigDeclarationsInfo = provider(fields = [
21*7594170eSAndroid Build Coastguard Worker    "package",
22*7594170eSAndroid Build Coastguard Worker    "intermediate_path",
23*7594170eSAndroid Build Coastguard Worker])
24*7594170eSAndroid Build Coastguard Worker
25*7594170eSAndroid Build Coastguard Workerdef _aconfig_declarations_rule_impl(ctx):
26*7594170eSAndroid Build Coastguard Worker    value_files = []
27*7594170eSAndroid Build Coastguard Worker    transitive = []
28*7594170eSAndroid Build Coastguard Worker    for value_set in ctx.attr._value_sets[AconfigValueSetsInfo].value_sets:
29*7594170eSAndroid Build Coastguard Worker        value_set_info = value_set[AconfigValueSetInfo].available_packages.get(ctx.attr.package)
30*7594170eSAndroid Build Coastguard Worker        if value_set_info != None:
31*7594170eSAndroid Build Coastguard Worker            value_files.extend(value_set_info.to_list())
32*7594170eSAndroid Build Coastguard Worker            transitive.append(value_set_info)
33*7594170eSAndroid Build Coastguard Worker
34*7594170eSAndroid Build Coastguard Worker    output = ctx.actions.declare_file(paths.join(ctx.label.name, "intermediate.pb"))
35*7594170eSAndroid Build Coastguard Worker
36*7594170eSAndroid Build Coastguard Worker    args = ctx.actions.args()
37*7594170eSAndroid Build Coastguard Worker    args.add("create-cache")
38*7594170eSAndroid Build Coastguard Worker    args.add_all(["--package", ctx.attr.package])
39*7594170eSAndroid Build Coastguard Worker    for src in ctx.files.srcs:
40*7594170eSAndroid Build Coastguard Worker        args.add_all(["--declarations", src.path])
41*7594170eSAndroid Build Coastguard Worker    for value in value_files:
42*7594170eSAndroid Build Coastguard Worker        args.add_all(["--values", value])
43*7594170eSAndroid Build Coastguard Worker    args.add_all(["--default-permission", ctx.attr._default_permission[BuildSettingInfo].value])
44*7594170eSAndroid Build Coastguard Worker    args.add_all(["--cache", output.path])
45*7594170eSAndroid Build Coastguard Worker
46*7594170eSAndroid Build Coastguard Worker    inputs = depset(
47*7594170eSAndroid Build Coastguard Worker        direct = ctx.files.srcs,
48*7594170eSAndroid Build Coastguard Worker        transitive = transitive,
49*7594170eSAndroid Build Coastguard Worker    )
50*7594170eSAndroid Build Coastguard Worker
51*7594170eSAndroid Build Coastguard Worker    ctx.actions.run(
52*7594170eSAndroid Build Coastguard Worker        inputs = inputs,
53*7594170eSAndroid Build Coastguard Worker        executable = ctx.executable._aconfig,
54*7594170eSAndroid Build Coastguard Worker        outputs = [output],
55*7594170eSAndroid Build Coastguard Worker        arguments = [args],
56*7594170eSAndroid Build Coastguard Worker        mnemonic = "AconfigCreateCache",
57*7594170eSAndroid Build Coastguard Worker    )
58*7594170eSAndroid Build Coastguard Worker
59*7594170eSAndroid Build Coastguard Worker    return [
60*7594170eSAndroid Build Coastguard Worker        DefaultInfo(files = depset(direct = [output])),
61*7594170eSAndroid Build Coastguard Worker        AconfigDeclarationsInfo(
62*7594170eSAndroid Build Coastguard Worker            package = ctx.attr.package,
63*7594170eSAndroid Build Coastguard Worker            intermediate_path = output,
64*7594170eSAndroid Build Coastguard Worker        ),
65*7594170eSAndroid Build Coastguard Worker    ]
66*7594170eSAndroid Build Coastguard Worker
67*7594170eSAndroid Build Coastguard Workeraconfig_declarations = rule(
68*7594170eSAndroid Build Coastguard Worker    implementation = _aconfig_declarations_rule_impl,
69*7594170eSAndroid Build Coastguard Worker    attrs = {
70*7594170eSAndroid Build Coastguard Worker        "srcs": attr.label_list(
71*7594170eSAndroid Build Coastguard Worker            mandatory = True,
72*7594170eSAndroid Build Coastguard Worker            allow_files = True,
73*7594170eSAndroid Build Coastguard Worker        ),
74*7594170eSAndroid Build Coastguard Worker        "package": attr.string(mandatory = True),
75*7594170eSAndroid Build Coastguard Worker        "_aconfig": attr.label(
76*7594170eSAndroid Build Coastguard Worker            allow_single_file = True,
77*7594170eSAndroid Build Coastguard Worker            executable = True,
78*7594170eSAndroid Build Coastguard Worker            cfg = "exec",
79*7594170eSAndroid Build Coastguard Worker            default = Label("//build/make/tools/aconfig:aconfig"),
80*7594170eSAndroid Build Coastguard Worker        ),
81*7594170eSAndroid Build Coastguard Worker        "_value_sets": attr.label(
82*7594170eSAndroid Build Coastguard Worker            default = "//build/bazel/product_config:release_aconfig_value_sets",
83*7594170eSAndroid Build Coastguard Worker            providers = [AconfigValueSetsInfo],
84*7594170eSAndroid Build Coastguard Worker        ),
85*7594170eSAndroid Build Coastguard Worker        "_release_version": attr.label(
86*7594170eSAndroid Build Coastguard Worker            default = "//build/bazel/product_config:release_version",
87*7594170eSAndroid Build Coastguard Worker        ),
88*7594170eSAndroid Build Coastguard Worker        "_default_permission": attr.label(
89*7594170eSAndroid Build Coastguard Worker            default = "//build/bazel/product_config:release_aconfig_flag_default_permission",
90*7594170eSAndroid Build Coastguard Worker        ),
91*7594170eSAndroid Build Coastguard Worker    },
92*7594170eSAndroid Build Coastguard Worker    provides = [AconfigDeclarationsInfo],
93*7594170eSAndroid Build Coastguard Worker)
94