1*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker# Helper functions for bindgen scripts sourced by tools/bindgen-all-the-things. 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Workerexport BINDGEN_LINUX="${PWD}/../../third_party/kernel/v6.6" 8*bb4ee6a4SAndroid Build Coastguard Worker 9*bb4ee6a4SAndroid Build Coastguard Workerexport BINDGEN_PLATFORM2="${PWD}/../../platform2" 10*bb4ee6a4SAndroid Build Coastguard Worker 11*bb4ee6a4SAndroid Build Coastguard Workerexport BINDGEN_OPTS=( 12*bb4ee6a4SAndroid Build Coastguard Worker '--disable-header-comment' 13*bb4ee6a4SAndroid Build Coastguard Worker '--no-layout-tests' 14*bb4ee6a4SAndroid Build Coastguard Worker '--no-doc-comments' 15*bb4ee6a4SAndroid Build Coastguard Worker '--with-derive-default' 16*bb4ee6a4SAndroid Build Coastguard Worker) 17*bb4ee6a4SAndroid Build Coastguard Worker 18*bb4ee6a4SAndroid Build Coastguard Workerexport BINDGEN_HEADER="/* automatically generated by tools/bindgen-all-the-things */ 19*bb4ee6a4SAndroid Build Coastguard Worker 20*bb4ee6a4SAndroid Build Coastguard Worker#![allow(clippy::missing_safety_doc)] 21*bb4ee6a4SAndroid Build Coastguard Worker#![allow(clippy::undocumented_unsafe_blocks)] 22*bb4ee6a4SAndroid Build Coastguard Worker#![allow(clippy::upper_case_acronyms)] 23*bb4ee6a4SAndroid Build Coastguard Worker#![allow(non_upper_case_globals)] 24*bb4ee6a4SAndroid Build Coastguard Worker#![allow(non_camel_case_types)] 25*bb4ee6a4SAndroid Build Coastguard Worker#![allow(non_snake_case)] 26*bb4ee6a4SAndroid Build Coastguard Worker#![allow(dead_code)] 27*bb4ee6a4SAndroid Build Coastguard Worker" 28*bb4ee6a4SAndroid Build Coastguard Worker 29*bb4ee6a4SAndroid Build Coastguard Worker# Delete definitions of types like __u32 and replace their uses with the equivalent native Rust 30*bb4ee6a4SAndroid Build Coastguard Worker# type, like u32. This ensures that the types are correctly sized on all platforms, unlike the 31*bb4ee6a4SAndroid Build Coastguard Worker# definitions from the system headers, which resolve to C types like short/int/long that may vary 32*bb4ee6a4SAndroid Build Coastguard Worker# across architectures. 33*bb4ee6a4SAndroid Build Coastguard Workerreplace_linux_int_types() { 34*bb4ee6a4SAndroid Build Coastguard Worker sed -E -e '/^pub type __(u|s)(8|16|32|64) =/d' -e 's/__u(8|16|32|64)/u\1/g' -e 's/__s(8|16|32|64)/i\1/g' 35*bb4ee6a4SAndroid Build Coastguard Worker cat 36*bb4ee6a4SAndroid Build Coastguard Worker} 37*bb4ee6a4SAndroid Build Coastguard Worker 38*bb4ee6a4SAndroid Build Coastguard Worker# Delete definitions of types like __le32 and __be32 and replace their uses with the equivalent 39*bb4ee6a4SAndroid Build Coastguard Worker# data_model types. 40*bb4ee6a4SAndroid Build Coastguard Workerreplace_linux_endian_types() { 41*bb4ee6a4SAndroid Build Coastguard Worker sed -E -e '/^pub type __(l|b)e(16|32|64) =/d' -e 's/__le(16|32|64)/Le\1/g' -e 's/__be(16|32|64)/Be\1/g' 42*bb4ee6a4SAndroid Build Coastguard Worker} 43*bb4ee6a4SAndroid Build Coastguard Worker 44*bb4ee6a4SAndroid Build Coastguard Worker# Wrapper for bindgen used by the various bindgen.sh scripts. 45*bb4ee6a4SAndroid Build Coastguard Worker# Pass extra bindgen options and the .h filename as parameters. 46*bb4ee6a4SAndroid Build Coastguard Worker# Output is produced on stdout and should be redirected to a file. 47*bb4ee6a4SAndroid Build Coastguard Workerbindgen_generate() { 48*bb4ee6a4SAndroid Build Coastguard Worker echo "${BINDGEN_HEADER}" 49*bb4ee6a4SAndroid Build Coastguard Worker bindgen "${BINDGEN_OPTS[@]}" "$@" 50*bb4ee6a4SAndroid Build Coastguard Worker} 51*bb4ee6a4SAndroid Build Coastguard Worker 52*bb4ee6a4SAndroid Build Coastguard Workerbindgen_cleanup() { 53*bb4ee6a4SAndroid Build Coastguard Worker rm -rf "${BINDGEN_LINUX_X86_HEADERS}" "${BINDGEN_LINUX_ARM64_HEADERS}" "${BINDGEN_LINUX_RISCV_HEADERS}" 54*bb4ee6a4SAndroid Build Coastguard Worker} 55*bb4ee6a4SAndroid Build Coastguard Worker 56*bb4ee6a4SAndroid Build Coastguard Worker# Install Linux kernel headers for each architecture into temporary locations. These are used for KVM bindings. 57*bb4ee6a4SAndroid Build Coastguard Worker 58*bb4ee6a4SAndroid Build Coastguard Workerif [[ -z "${BINDGEN_LINUX_X86_HEADERS+x}" || ! -d "${BINDGEN_LINUX_X86_HEADERS}" || 59*bb4ee6a4SAndroid Build Coastguard Worker -z "${BINDGEN_LINUX_ARM64_HEADERS+x}" || ! -d "${BINDGEN_LINUX_ARM64_HEADERS}" || 60*bb4ee6a4SAndroid Build Coastguard Worker -z "${BINDGEN_LINUX_RISCV_HEADERS+x}" || ! -d "${BINDGEN_LINUX_RISCV_HEADERS}" ]]; then 61*bb4ee6a4SAndroid Build Coastguard Worker export BINDGEN_LINUX_X86_HEADERS='/tmp/bindgen_linux_x86_headers' 62*bb4ee6a4SAndroid Build Coastguard Worker export BINDGEN_LINUX_ARM64_HEADERS='/tmp/bindgen_linux_arm64_headers' 63*bb4ee6a4SAndroid Build Coastguard Worker export BINDGEN_LINUX_RISCV_HEADERS='/tmp/bindgen_linux_riscv_headers' 64*bb4ee6a4SAndroid Build Coastguard Worker 65*bb4ee6a4SAndroid Build Coastguard Worker trap bindgen_cleanup EXIT 66*bb4ee6a4SAndroid Build Coastguard Worker 67*bb4ee6a4SAndroid Build Coastguard Worker echo -n "Installing Linux headers for x86, arm64, and riscv..." 68*bb4ee6a4SAndroid Build Coastguard Worker ( 69*bb4ee6a4SAndroid Build Coastguard Worker cd "${BINDGEN_LINUX}" 70*bb4ee6a4SAndroid Build Coastguard Worker nproc=$(nproc) 71*bb4ee6a4SAndroid Build Coastguard Worker make -s headers_install ARCH=x86 INSTALL_HDR_PATH="${BINDGEN_LINUX_X86_HEADERS}" -j "${nproc}" 72*bb4ee6a4SAndroid Build Coastguard Worker make -s headers_install ARCH=arm64 INSTALL_HDR_PATH="${BINDGEN_LINUX_ARM64_HEADERS}" -j "${nproc}" 73*bb4ee6a4SAndroid Build Coastguard Worker make -s headers_install ARCH=riscv INSTALL_HDR_PATH="${BINDGEN_LINUX_RISCV_HEADERS}" -j "${nproc}" 74*bb4ee6a4SAndroid Build Coastguard Worker make -s mrproper 75*bb4ee6a4SAndroid Build Coastguard Worker ) 76*bb4ee6a4SAndroid Build Coastguard Worker echo " done." 77*bb4ee6a4SAndroid Build Coastguard Workerfi 78