1*5225e6b1SAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project 2*5225e6b1SAndroid Build Coastguard Worker# 3*5225e6b1SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*5225e6b1SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*5225e6b1SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*5225e6b1SAndroid Build Coastguard Worker# 7*5225e6b1SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*5225e6b1SAndroid Build Coastguard Worker# 9*5225e6b1SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*5225e6b1SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*5225e6b1SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*5225e6b1SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*5225e6b1SAndroid Build Coastguard Worker# limitations under the License. 14*5225e6b1SAndroid Build Coastguard Worker 15*5225e6b1SAndroid Build Coastguard Workerload("@gbl//toolchain:gbl_toolchain.bzl", "link_static_cc_library") 16*5225e6b1SAndroid Build Coastguard Workerload("@gbl//toolchain:gbl_workspace_util.bzl", "ANDROID_RUST_LINTS") 17*5225e6b1SAndroid Build Coastguard Workerload("@gbl_llvm_prebuilts//:info.bzl", "LLVM_PREBUILTS_C_INCLUDE") 18*5225e6b1SAndroid Build Coastguard Workerload("@rules_rust//bindgen:defs.bzl", "rust_bindgen") 19*5225e6b1SAndroid Build Coastguard Workerload("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") 20*5225e6b1SAndroid Build Coastguard Worker 21*5225e6b1SAndroid Build Coastguard Workerpackage( 22*5225e6b1SAndroid Build Coastguard Worker default_visibility = ["//visibility:public"], 23*5225e6b1SAndroid Build Coastguard Worker) 24*5225e6b1SAndroid Build Coastguard Worker 25*5225e6b1SAndroid Build Coastguard Workerlink_static_cc_library( 26*5225e6b1SAndroid Build Coastguard Worker name = "libdttable_c_static", 27*5225e6b1SAndroid Build Coastguard Worker cc_library = "@libdttable_c", 28*5225e6b1SAndroid Build Coastguard Worker) 29*5225e6b1SAndroid Build Coastguard Worker 30*5225e6b1SAndroid Build Coastguard Workerrust_bindgen( 31*5225e6b1SAndroid Build Coastguard Worker name = "libdttable_c_bindgen", 32*5225e6b1SAndroid Build Coastguard Worker bindgen_flags = [ 33*5225e6b1SAndroid Build Coastguard Worker "--use-core", 34*5225e6b1SAndroid Build Coastguard Worker "--with-derive-custom-struct=dt_table.*=AsBytes,FromBytes,FromZeroes,PartialEq", 35*5225e6b1SAndroid Build Coastguard Worker "--allowlist-type", 36*5225e6b1SAndroid Build Coastguard Worker "(dt_table.*)", 37*5225e6b1SAndroid Build Coastguard Worker "--allowlist-var", 38*5225e6b1SAndroid Build Coastguard Worker "(DT_TABLE.*)", 39*5225e6b1SAndroid Build Coastguard Worker "--raw-line", 40*5225e6b1SAndroid Build Coastguard Worker """ 41*5225e6b1SAndroid Build Coastguard Worker# ![cfg_attr(not(test), no_std)] 42*5225e6b1SAndroid Build Coastguard Worker 43*5225e6b1SAndroid Build Coastguard Workeruse zerocopy::{AsBytes, FromBytes, FromZeroes}; 44*5225e6b1SAndroid Build Coastguard Worker""", 45*5225e6b1SAndroid Build Coastguard Worker ], 46*5225e6b1SAndroid Build Coastguard Worker cc_lib = "@libdttable_c", 47*5225e6b1SAndroid Build Coastguard Worker # For x86_32, we need to explicitly specify 32bit architecture. 48*5225e6b1SAndroid Build Coastguard Worker clang_flags = select({ 49*5225e6b1SAndroid Build Coastguard Worker "@gbl//toolchain:gbl_rust_uefi_x86_32": ["-m32"], 50*5225e6b1SAndroid Build Coastguard Worker "//conditions:default": ["-m64"], 51*5225e6b1SAndroid Build Coastguard Worker }) + [ 52*5225e6b1SAndroid Build Coastguard Worker "-I{}".format(LLVM_PREBUILTS_C_INCLUDE), 53*5225e6b1SAndroid Build Coastguard Worker "-nostdinc", 54*5225e6b1SAndroid Build Coastguard Worker ], 55*5225e6b1SAndroid Build Coastguard Worker header = "@libdttable_c//:dt_table.h", 56*5225e6b1SAndroid Build Coastguard Worker) 57*5225e6b1SAndroid Build Coastguard Worker 58*5225e6b1SAndroid Build Coastguard Workerrust_library( 59*5225e6b1SAndroid Build Coastguard Worker name = "libdttable_bindgen", 60*5225e6b1SAndroid Build Coastguard Worker srcs = [":libdttable_c_bindgen"], 61*5225e6b1SAndroid Build Coastguard Worker deps = ["@zerocopy"], 62*5225e6b1SAndroid Build Coastguard Worker) 63*5225e6b1SAndroid Build Coastguard Worker 64*5225e6b1SAndroid Build Coastguard Workerrust_library( 65*5225e6b1SAndroid Build Coastguard Worker name = "libdttable", 66*5225e6b1SAndroid Build Coastguard Worker srcs = ["src/lib.rs"], 67*5225e6b1SAndroid Build Coastguard Worker crate_name = "dttable", 68*5225e6b1SAndroid Build Coastguard Worker edition = "2021", 69*5225e6b1SAndroid Build Coastguard Worker rustc_flags = ANDROID_RUST_LINTS, 70*5225e6b1SAndroid Build Coastguard Worker deps = [ 71*5225e6b1SAndroid Build Coastguard Worker ":libdttable_bindgen", 72*5225e6b1SAndroid Build Coastguard Worker ":libdttable_c_static", 73*5225e6b1SAndroid Build Coastguard Worker "@gbl//liberror", 74*5225e6b1SAndroid Build Coastguard Worker "@gbl//libsafemath", 75*5225e6b1SAndroid Build Coastguard Worker "@zerocopy", 76*5225e6b1SAndroid Build Coastguard Worker ], 77*5225e6b1SAndroid Build Coastguard Worker) 78*5225e6b1SAndroid Build Coastguard Worker 79*5225e6b1SAndroid Build Coastguard Workerrust_test( 80*5225e6b1SAndroid Build Coastguard Worker name = "libdttable_test", 81*5225e6b1SAndroid Build Coastguard Worker compile_data = [ 82*5225e6b1SAndroid Build Coastguard Worker "@gbl//libdttable/test/data:all", 83*5225e6b1SAndroid Build Coastguard Worker ], 84*5225e6b1SAndroid Build Coastguard Worker crate = ":libdttable", 85*5225e6b1SAndroid Build Coastguard Worker rustc_flags = ANDROID_RUST_LINTS, 86*5225e6b1SAndroid Build Coastguard Worker deps = [ 87*5225e6b1SAndroid Build Coastguard Worker "@gbl//libfdt", 88*5225e6b1SAndroid Build Coastguard Worker ], 89*5225e6b1SAndroid Build Coastguard Worker) 90