xref: /aosp_15_r20/bootable/libbootloader/gbl/libfdt/BUILD (revision 5225e6b173e52d2efc6bcf950c27374fd72adabc)
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