xref: /aosp_15_r20/build/bazel/rules/hidl/hidl_library.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
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/hidl:hidl_package_root.bzl", "HidlPackageRoot")
16*7594170eSAndroid Build Coastguard Worker
17*7594170eSAndroid Build Coastguard WorkerHidlInfo = provider(fields = [
18*7594170eSAndroid Build Coastguard Worker    "srcs",
19*7594170eSAndroid Build Coastguard Worker    "transitive_srcs",
20*7594170eSAndroid Build Coastguard Worker    "transitive_roots",
21*7594170eSAndroid Build Coastguard Worker    "transitive_root_interface_files",
22*7594170eSAndroid Build Coastguard Worker    "fq_name",
23*7594170eSAndroid Build Coastguard Worker])
24*7594170eSAndroid Build Coastguard Worker
25*7594170eSAndroid Build Coastguard Workerdef _hidl_library_rule_impl(ctx):
26*7594170eSAndroid Build Coastguard Worker    transitive_srcs = []
27*7594170eSAndroid Build Coastguard Worker    transitive_root_interface_files = []
28*7594170eSAndroid Build Coastguard Worker    transitive_roots = []
29*7594170eSAndroid Build Coastguard Worker
30*7594170eSAndroid Build Coastguard Worker    for dep in ctx.attr.deps:
31*7594170eSAndroid Build Coastguard Worker        transitive_srcs.append(dep[HidlInfo].transitive_srcs)
32*7594170eSAndroid Build Coastguard Worker        transitive_root_interface_files.append(dep[HidlInfo].transitive_root_interface_files)
33*7594170eSAndroid Build Coastguard Worker        transitive_roots.append(dep[HidlInfo].transitive_roots)
34*7594170eSAndroid Build Coastguard Worker
35*7594170eSAndroid Build Coastguard Worker    root = ctx.attr.root[HidlPackageRoot]
36*7594170eSAndroid Build Coastguard Worker    root_interface_files = []
37*7594170eSAndroid Build Coastguard Worker    if root.root_interface_file:
38*7594170eSAndroid Build Coastguard Worker        root_interface_files.append(root.root_interface_file)
39*7594170eSAndroid Build Coastguard Worker    return [
40*7594170eSAndroid Build Coastguard Worker        DefaultInfo(files = depset(ctx.files.srcs)),
41*7594170eSAndroid Build Coastguard Worker        HidlInfo(
42*7594170eSAndroid Build Coastguard Worker            srcs = depset(ctx.files.srcs),
43*7594170eSAndroid Build Coastguard Worker            transitive_srcs = depset(
44*7594170eSAndroid Build Coastguard Worker                direct = ctx.files.srcs,
45*7594170eSAndroid Build Coastguard Worker                transitive = transitive_srcs,
46*7594170eSAndroid Build Coastguard Worker            ),
47*7594170eSAndroid Build Coastguard Worker            # These transitive roots will be used as -r arguments later when calling
48*7594170eSAndroid Build Coastguard Worker            # hidl-gen, for example, -r android.hardware:hardware/interfaces
49*7594170eSAndroid Build Coastguard Worker            transitive_roots = depset(
50*7594170eSAndroid Build Coastguard Worker                direct = [root.root + ":" + root.root_path],
51*7594170eSAndroid Build Coastguard Worker                transitive = transitive_roots,
52*7594170eSAndroid Build Coastguard Worker            ),
53*7594170eSAndroid Build Coastguard Worker            transitive_root_interface_files = depset(
54*7594170eSAndroid Build Coastguard Worker                direct = root_interface_files,
55*7594170eSAndroid Build Coastguard Worker                transitive = transitive_root_interface_files,
56*7594170eSAndroid Build Coastguard Worker            ),
57*7594170eSAndroid Build Coastguard Worker            fq_name = ctx.attr.fq_name,
58*7594170eSAndroid Build Coastguard Worker        ),
59*7594170eSAndroid Build Coastguard Worker    ]
60*7594170eSAndroid Build Coastguard Worker
61*7594170eSAndroid Build Coastguard Workerhidl_library = rule(
62*7594170eSAndroid Build Coastguard Worker    implementation = _hidl_library_rule_impl,
63*7594170eSAndroid Build Coastguard Worker    attrs = {
64*7594170eSAndroid Build Coastguard Worker        "srcs": attr.label_list(
65*7594170eSAndroid Build Coastguard Worker            allow_files = [".hal"],
66*7594170eSAndroid Build Coastguard Worker        ),
67*7594170eSAndroid Build Coastguard Worker        "deps": attr.label_list(
68*7594170eSAndroid Build Coastguard Worker            providers = [HidlInfo],
69*7594170eSAndroid Build Coastguard Worker            doc = "hidl_interface targets that this one depends on",
70*7594170eSAndroid Build Coastguard Worker        ),
71*7594170eSAndroid Build Coastguard Worker        "fq_name": attr.string(),
72*7594170eSAndroid Build Coastguard Worker        "root": attr.label(),
73*7594170eSAndroid Build Coastguard Worker    },
74*7594170eSAndroid Build Coastguard Worker    provides = [HidlInfo],
75*7594170eSAndroid Build Coastguard Worker)
76