blob: b0d98eec6ce116bd0dd507b37cbb5d086f27c55c [file] [log] [blame] [view]
# Contributing to virtio-bindings
## Dependencies
### Bindgen
The bindings are currently generated using
[bindgen](https://rust-lang.github.io/rust-bindgen/) version 0.63.0:
```bash
cargo install bindgen-cli --vers 0.63.0
```
### Linux Kernel
Generating bindings depends on the Linux kernel, so you need to have the
repository on your machine:
```bash
git clone https://github.com/torvalds/linux.git
```
## Example for updating to a new kernel version
For this example we assume that you have both linux and virtio-bindings
repositories in your root.
```bash
# linux is the repository that you cloned at the previous step.
cd linux
# Step 1: Checkout the version you want to generate the bindings for.
git checkout v5.0
# Step 2: Generate the bindings from the kernel headers. We need to generate a
# file for each one of the virtio headers. For the moment, we are only picking
# headers that we are interested in. Feel free to add additional header files if
# you need them for your project.
make headers_install INSTALL_HDR_PATH=v5_0_headers
cd v5_0_headers
for i in \
virtio_blk \
virtio_config \
virtio_gpu \
virtio_ids \
virtio_mmio \
virtio_net \
virtio_ring \
virtio_scsi \
; do \
bindgen include/linux/$i.h -o $i.rs \
--allowlist-file include/linux/$i.h \
--with-derive-default \
--with-derive-partialeq \
-- -Iinclude
done
cd ~
# Step 6: Copy the generated files to the new version module.
cp linux/v5_0_headers/*.rs vm-virtio/crates/virtio-bindings/src
mv vm-virtio/crates/virtio-bindings/src/virtio_net.rs vm-virtio/crates/virtio-bindings/src/virtio_net/generated.rs
```