crosvm/virtio_sys/bindgen.sh
Daniel Verkamp 8948174ef3 bindgen: use upstream Linux headers
Move the ChromeOS-specific kernel header modifications into the
corresponding bindgen.sh patch sections.

This also downloads the Linux source rather than relying on the ChromeOS
kernel source tree, so it should work without having a chromiumos
checkout.

BUG=b:402466294
TEST=tools/bindgen-all-the-things

Change-Id: I8cb00cdaf847a0a9442722ec9e69e8c6b47cf437
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/6345302
Reviewed-by: Frederick Mayle <fmayle@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2025-03-12 12:32:22 -07:00

161 lines
5.7 KiB
Bash
Executable file

#!/usr/bin/env bash
# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Regenerate virtio_sys bindgen bindings.
set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
source tools/impl/bindgen-common.sh
bindgen_generate \
--allowlist-type='vhost_.*' \
--allowlist-var='VHOST_.*' \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/vhost.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
> virtio_sys/src/vhost.rs
VIRTIO_CONFIG_EXTRA="// Added by virtio_sys/bindgen.sh
pub const VIRTIO_CONFIG_S_SUSPEND: u32 = 16;
pub const VIRTIO_F_SUSPEND: u32 = 42;"
bindgen_generate \
--raw-line "${VIRTIO_CONFIG_EXTRA}" \
--allowlist-var='VIRTIO_.*' \
--allowlist-type='virtio_.*' \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_config.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
> virtio_sys/src/virtio_config.rs
VIRTIO_FS_EXTRA="// Added by virtio_sys/bindgen.sh
use data_model::Le32;
use zerocopy::FromBytes;
use zerocopy::Immutable;
use zerocopy::IntoBytes;
use zerocopy::KnownLayout;"
bindgen_generate \
--raw-line "${VIRTIO_FS_EXTRA}" \
--allowlist-var='VIRTIO_FS_.*' \
--allowlist-type='virtio_fs_.*' \
--with-derive-custom "virtio_fs_config=FromBytes,Immutable,IntoBytes,KnownLayout" \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_fs.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
| replace_linux_endian_types \
> virtio_sys/src/virtio_fs.rs
VIRTIO_IDS_EXTRAS="
//! This file defines virtio device IDs. IDs with large values (counting down
//! from 63) are nonstandard and not defined by the virtio specification.
// Added by virtio_sys/bindgen.sh - do not edit the generated file.
pub const VIRTIO_ID_WL: u32 = 63;
pub const VIRTIO_ID_TPM: u32 = 62;
// TODO(b/236144983): Fix this id when an official virtio-id is assigned to this device.
pub const VIRTIO_ID_PVCLOCK: u32 = 61;
// TODO: Remove this once the ID is included in the Linux headers.
pub const VIRTIO_ID_MEDIA: u32 = 48;
"
bindgen_generate \
--raw-line "${VIRTIO_IDS_EXTRAS}" \
--allowlist-var='VIRTIO_ID_.*' \
--allowlist-type='virtio_.*' \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_ids.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
| rustfmt \
> virtio_sys/src/virtio_ids.rs
VIRTIO_NET_EXTRA="// Added by virtio_sys/bindgen.sh
use zerocopy::FromBytes;
use zerocopy::Immutable;
use zerocopy::IntoBytes;
use zerocopy::KnownLayout;"
bindgen_generate \
--raw-line "${VIRTIO_NET_EXTRA}" \
--allowlist-var='VIRTIO_NET_.*' \
--allowlist-type='virtio_net_.*' \
--blocklist-type='virtio_net_ctrl_mac' \
--with-derive-custom "virtio_net_hdr=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_net_hdr_mrg_rxbuf=FromBytes,Immutable,IntoBytes,KnownLayout" \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_net.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
> virtio_sys/src/virtio_net.rs
bindgen_generate \
--allowlist-var='VRING_.*' \
--allowlist-var='VIRTIO_RING_.*' \
--allowlist-type='vring.*' \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_ring.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
> virtio_sys/src/virtio_ring.rs
bindgen_generate \
--allowlist-var='VIRTIO_.*' \
--allowlist-type='virtio_.*' \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_mmio.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
> virtio_sys/src/virtio_mmio.rs
VIRTIO_VSOCK_EXTRA="// Added by virtio_sys/bindgen.sh
use data_model::Le16;
use data_model::Le32;
use data_model::Le64;
use zerocopy::FromBytes;
use zerocopy::Immutable;
use zerocopy::IntoBytes;
use zerocopy::KnownLayout;"
bindgen_generate \
--raw-line "${VIRTIO_VSOCK_EXTRA}" \
--allowlist-var='VIRTIO_VSOCK_.*' \
--allowlist-type='virtio_vsock_.*' \
--with-derive-custom "virtio_vsock_event=FromBytes,Immutable,IntoBytes,KnownLayout" \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_vsock.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
| replace_linux_endian_types \
> virtio_sys/src/virtio_vsock.rs
VIRTIO_SCSI_EXTRA="// Added by virtio_sys/bindgen.sh
use zerocopy::FromBytes;
use zerocopy::Immutable;
use zerocopy::IntoBytes;
use zerocopy::KnownLayout;"
bindgen_generate \
--raw-line "${VIRTIO_SCSI_EXTRA}" \
--allowlist-var='VIRTIO_SCSI_.*' \
--allowlist-type='virtio_scsi_.*' \
--blocklist-type='virtio_scsi_cmd_req_pi' \
--with-derive-custom "virtio_scsi_config=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_scsi_cmd_req=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_scsi_cmd_resp=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_scsi_ctrl_tmf_req=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_scsi_ctrl_an_req=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_scsi_ctrl_tmf_resp=FromBytes,Immutable,IntoBytes,KnownLayout" \
--with-derive-custom "virtio_scsi_ctrl_an_resp=FromBytes,Immutable,IntoBytes,KnownLayout" \
"${BINDGEN_LINUX_X86_HEADERS}/include/linux/virtio_scsi.h" \
-- \
-isystem "${BINDGEN_LINUX_X86_HEADERS}/include" \
| replace_linux_int_types \
| replace_linux_endian_types \
> virtio_sys/src/virtio_scsi.rs