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