Skip to content

Commit

Permalink
rust: build: add "make clippy", "make rustfmt", "make rustdoc"
Browse files Browse the repository at this point in the history
Abstract common invocations of "cargo", that do not require copying
the generated bindgen file or setting up MESON_BUILD_ROOT.

In the future these could also do completely without cargo and invoke
the underlying programs directly.

Reviewed-by: Junjie Mao <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
  • Loading branch information
bonzini committed Dec 10, 2024
1 parent 2f9eec8 commit cab1d0b
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
22 changes: 22 additions & 0 deletions rust/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,25 @@ subdir('qemu-api-macros')
subdir('qemu-api')

subdir('hw')

cargo = find_program('cargo', required: false)

if cargo.found()
run_target('clippy',
command: [config_host['MESON'], 'devenv',
'--workdir', '@CURRENT_SOURCE_DIR@',
cargo, 'clippy', '--tests'],
depends: bindings_rs)

run_target('rustfmt',
command: [config_host['MESON'], 'devenv',
'--workdir', '@CURRENT_SOURCE_DIR@',
cargo, 'fmt'],
depends: bindings_rs)

run_target('rustdoc',
command: [config_host['MESON'], 'devenv',
'--workdir', '@CURRENT_SOURCE_DIR@',
cargo, 'doc', '--no-deps', '--document-private-items'],
depends: bindings_rs)
endif
10 changes: 6 additions & 4 deletions rust/qemu-api/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ This library exports helper Rust types, Rust macros and C FFI bindings for inter
The C bindings can be generated with `bindgen`, using this build target:

```console
$ ninja bindings.inc.rs
$ make bindings.inc.rs
```

## Generate Rust documentation

To generate docs for this crate, including private items:
Common Cargo tasks can be performed from the QEMU build directory

```sh
pyvenv/bin/meson devenv -w ../rust cargo doc --no-deps --document-private-items
```console
$ make clippy
$ make rustfmt
$ make rustdoc
```
9 changes: 7 additions & 2 deletions rust/qemu-api/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,13 @@ fn main() -> Result<()> {
let file = Path::new(&file);
if !Path::new(&file).exists() {
panic!(concat!(
"No generated C bindings found! If you want to run `cargo`, start a subshell\n",
"with `meson devenv`, or point MESON_BUILD_ROOT to the top of the build tree."
"\n",
" No generated C bindings found! Maybe you wanted one of\n",
" `make clippy`, `make rustfmt`, `make rustdoc`?\n",
"\n",
" For other uses of `cargo`, start a subshell with\n",
" `pyvenv/bin/meson devenv`, or point MESON_BUILD_ROOT to\n",
" the top of the build tree."
));
}

Expand Down

0 comments on commit cab1d0b

Please sign in to comment.