1*5225e6b1SAndroid Build Coastguard Worker# Copyright (C) 2023 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 Workerexports_files(glob(["**/*"])) 26*5225e6b1SAndroid Build Coastguard Worker 27*5225e6b1SAndroid Build Coastguard Workerrust_bindgen( 28*5225e6b1SAndroid Build Coastguard Worker name = "libfdt_c_bindgen", 29*5225e6b1SAndroid Build Coastguard Worker bindgen_flags = [ 30*5225e6b1SAndroid Build Coastguard Worker "--ctypes-prefix", 31*5225e6b1SAndroid Build Coastguard Worker "core::ffi", 32*5225e6b1SAndroid Build Coastguard Worker "--use-core", 33*5225e6b1SAndroid Build Coastguard Worker "--with-derive-custom-struct=fdt_header=AsBytes,FromBytes,FromZeroes,PartialEq", 34*5225e6b1SAndroid Build Coastguard Worker "--allowlist-function", 35*5225e6b1SAndroid Build Coastguard Worker "(fdt_.*)", 36*5225e6b1SAndroid Build Coastguard Worker "--allowlist-type", 37*5225e6b1SAndroid Build Coastguard Worker "(fdt_.*)", 38*5225e6b1SAndroid Build Coastguard Worker "--raw-line", 39*5225e6b1SAndroid Build Coastguard Worker """ 40*5225e6b1SAndroid Build Coastguard Worker#![allow(non_camel_case_types)] 41*5225e6b1SAndroid Build Coastguard Worker#![allow(non_snake_case)] 42*5225e6b1SAndroid Build Coastguard Worker#![allow(dead_code)] 43*5225e6b1SAndroid Build Coastguard Worker#![allow(unsafe_op_in_unsafe_fn)] 44*5225e6b1SAndroid Build Coastguard Worker#![cfg_attr(not(test), no_std)] 45*5225e6b1SAndroid Build Coastguard Worker 46*5225e6b1SAndroid Build Coastguard Workeruse zerocopy::{AsBytes, FromBytes, FromZeroes}; 47*5225e6b1SAndroid Build Coastguard Worker""", 48*5225e6b1SAndroid Build Coastguard Worker ], 49*5225e6b1SAndroid Build Coastguard Worker cc_lib = "@libfdt_c", 50*5225e6b1SAndroid Build Coastguard Worker # For x86_32, we need to explicitly specify 32bit architecture. 51*5225e6b1SAndroid Build Coastguard Worker clang_flags = select({ 52*5225e6b1SAndroid Build Coastguard Worker "@gbl//toolchain:gbl_rust_uefi_x86_32": ["-m32"], 53*5225e6b1SAndroid Build Coastguard Worker "//conditions:default": ["-m64"], 54*5225e6b1SAndroid Build Coastguard Worker }) + [ 55*5225e6b1SAndroid Build Coastguard Worker "-I{}".format(LLVM_PREBUILTS_C_INCLUDE), 56*5225e6b1SAndroid Build Coastguard Worker "-nostdinc", 57*5225e6b1SAndroid Build Coastguard Worker ], 58*5225e6b1SAndroid Build Coastguard Worker header = "@libfdt_c//:libfdt.h", 59*5225e6b1SAndroid Build Coastguard Worker) 60*5225e6b1SAndroid Build Coastguard Worker 61*5225e6b1SAndroid Build Coastguard Workerrust_bindgen( 62*5225e6b1SAndroid Build Coastguard Worker name = "libufdt_c_bindgen", 63*5225e6b1SAndroid Build Coastguard Worker bindgen_flags = [ 64*5225e6b1SAndroid Build Coastguard Worker "--ctypes-prefix", 65*5225e6b1SAndroid Build Coastguard Worker "core::ffi", 66*5225e6b1SAndroid Build Coastguard Worker "--use-core", 67*5225e6b1SAndroid Build Coastguard Worker "--opaque-type", 68*5225e6b1SAndroid Build Coastguard Worker "fdt_header", 69*5225e6b1SAndroid Build Coastguard Worker "--allowlist-function", 70*5225e6b1SAndroid Build Coastguard Worker "ufdt_apply_multioverlay", 71*5225e6b1SAndroid Build Coastguard Worker "--raw-line", 72*5225e6b1SAndroid Build Coastguard Worker """ 73*5225e6b1SAndroid Build Coastguard Worker# ![cfg_attr(not(test), no_std)] 74*5225e6b1SAndroid Build Coastguard Worker""", 75*5225e6b1SAndroid Build Coastguard Worker ], 76*5225e6b1SAndroid Build Coastguard Worker cc_lib = "@libufdt_c", 77*5225e6b1SAndroid Build Coastguard Worker # For x86_32, we need to explicitly specify 32bit architecture. 78*5225e6b1SAndroid Build Coastguard Worker clang_flags = select({ 79*5225e6b1SAndroid Build Coastguard Worker "@gbl//toolchain:gbl_rust_uefi_x86_32": ["-m32"], 80*5225e6b1SAndroid Build Coastguard Worker "//conditions:default": ["-m64"], 81*5225e6b1SAndroid Build Coastguard Worker }) + [ 82*5225e6b1SAndroid Build Coastguard Worker "-I{}".format(LLVM_PREBUILTS_C_INCLUDE), 83*5225e6b1SAndroid Build Coastguard Worker "-nostdinc", 84*5225e6b1SAndroid Build Coastguard Worker ], 85*5225e6b1SAndroid Build Coastguard Worker header = "@libufdt_c//:include/ufdt_overlay.h", 86*5225e6b1SAndroid Build Coastguard Worker) 87*5225e6b1SAndroid Build Coastguard Worker 88*5225e6b1SAndroid Build Coastguard Workerrust_library( 89*5225e6b1SAndroid Build Coastguard Worker name = "libfdt_bindgen", 90*5225e6b1SAndroid Build Coastguard Worker srcs = [":libfdt_c_bindgen"], 91*5225e6b1SAndroid Build Coastguard Worker deps = ["@zerocopy"], 92*5225e6b1SAndroid Build Coastguard Worker) 93*5225e6b1SAndroid Build Coastguard Worker 94*5225e6b1SAndroid Build Coastguard Workerrust_library( 95*5225e6b1SAndroid Build Coastguard Worker name = "libufdt_bindgen", 96*5225e6b1SAndroid Build Coastguard Worker srcs = [":libufdt_c_bindgen"], 97*5225e6b1SAndroid Build Coastguard Worker) 98*5225e6b1SAndroid Build Coastguard Worker 99*5225e6b1SAndroid Build Coastguard Workerrust_library( 100*5225e6b1SAndroid Build Coastguard Worker name = "libfdt_sysdeps", 101*5225e6b1SAndroid Build Coastguard Worker srcs = ["deps/lib.rs"], 102*5225e6b1SAndroid Build Coastguard Worker rustc_flags = ANDROID_RUST_LINTS, 103*5225e6b1SAndroid Build Coastguard Worker deps = [ 104*5225e6b1SAndroid Build Coastguard Worker "@gbl//libc", 105*5225e6b1SAndroid Build Coastguard Worker ], 106*5225e6b1SAndroid Build Coastguard Worker) 107*5225e6b1SAndroid Build Coastguard Worker 108*5225e6b1SAndroid Build Coastguard Workerlink_static_cc_library( 109*5225e6b1SAndroid Build Coastguard Worker name = "libfdt_sysdeps_static", 110*5225e6b1SAndroid Build Coastguard Worker cc_library = ":libfdt_sysdeps", 111*5225e6b1SAndroid Build Coastguard Worker) 112*5225e6b1SAndroid Build Coastguard Worker 113*5225e6b1SAndroid Build Coastguard Workerrust_library( 114*5225e6b1SAndroid Build Coastguard Worker name = "libfdt", 115*5225e6b1SAndroid Build Coastguard Worker srcs = ["src/lib.rs"], 116*5225e6b1SAndroid Build Coastguard Worker crate_name = "fdt", 117*5225e6b1SAndroid Build Coastguard Worker edition = "2021", 118*5225e6b1SAndroid Build Coastguard Worker rustc_flags = ANDROID_RUST_LINTS, 119*5225e6b1SAndroid Build Coastguard Worker deps = [ 120*5225e6b1SAndroid Build Coastguard Worker ":libfdt_bindgen", 121*5225e6b1SAndroid Build Coastguard Worker ":libfdt_c_static", 122*5225e6b1SAndroid Build Coastguard Worker ":libfdt_sysdeps_static", 123*5225e6b1SAndroid Build Coastguard Worker ":libufdt_bindgen", 124*5225e6b1SAndroid Build Coastguard Worker ":libufdt_c_static", 125*5225e6b1SAndroid Build Coastguard Worker "@arrayvec", 126*5225e6b1SAndroid Build Coastguard Worker "@gbl//libc", 127*5225e6b1SAndroid Build Coastguard Worker "@gbl//liberror", 128*5225e6b1SAndroid Build Coastguard Worker "@gbl//libsafemath", 129*5225e6b1SAndroid Build Coastguard Worker "@zerocopy", 130*5225e6b1SAndroid Build Coastguard Worker ], 131*5225e6b1SAndroid Build Coastguard Worker) 132*5225e6b1SAndroid Build Coastguard Worker 133*5225e6b1SAndroid Build Coastguard Workerrust_test( 134*5225e6b1SAndroid Build Coastguard Worker name = "libfdt_test", 135*5225e6b1SAndroid Build Coastguard Worker compile_data = [ 136*5225e6b1SAndroid Build Coastguard Worker "@gbl//libfdt/test/data:all", 137*5225e6b1SAndroid Build Coastguard Worker ], 138*5225e6b1SAndroid Build Coastguard Worker crate = ":libfdt", 139*5225e6b1SAndroid Build Coastguard Worker rustc_flags = ANDROID_RUST_LINTS, 140*5225e6b1SAndroid Build Coastguard Worker) 141*5225e6b1SAndroid Build Coastguard Worker 142*5225e6b1SAndroid Build Coastguard Workerlink_static_cc_library( 143*5225e6b1SAndroid Build Coastguard Worker name = "libfdt_c_static", 144*5225e6b1SAndroid Build Coastguard Worker cc_library = "@libfdt_c", 145*5225e6b1SAndroid Build Coastguard Worker) 146*5225e6b1SAndroid Build Coastguard Worker 147*5225e6b1SAndroid Build Coastguard Workerlink_static_cc_library( 148*5225e6b1SAndroid Build Coastguard Worker name = "libufdt_c_static", 149*5225e6b1SAndroid Build Coastguard Worker cc_library = "@libufdt_c", 150*5225e6b1SAndroid Build Coastguard Worker) 151