Browse Source

rust: use native Meson support for clippy and rustdoc

Meson has support for invoking clippy and rustdoc on all crates (1.7.0 for
clippy, 1.8.0 for rustdoc).  Use it instead of the homegrown version; this
requires disabling the multiple_crate_versions lint (the only one that was
enabled from the "cargo" group)---which was not particularly useful anyway
because all dependencies are converted by hand into Meson subprojects.

rustfmt is still not supported.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
pull/287/head
Paolo Bonzini 12 months ago
parent
commit
2409089b87
  1. 2
      clippy.toml
  2. 10
      docs/devel/rust.rst
  3. 2
      meson.build
  4. 1
      rust/Cargo.toml
  5. 12
      rust/meson.build
  6. 5
      scripts/rust/rustc_args.py

2
rust/clippy.toml → clippy.toml

@ -1,3 +1,3 @@
doc-valid-idents = ["PrimeCell", ".."]
doc-valid-idents = ["IrDA", "PrimeCell", ".."]
allow-mixed-uninlined-format-args = false
msrv = "1.77.0"

10
docs/devel/rust.rst

@ -37,12 +37,16 @@ output directory (typically ``rust/target/``). A vanilla invocation
of Cargo will complain that it cannot find the generated sources,
which can be fixed in different ways:
* by using special shorthand targets in the QEMU build directory::
* by using Makefile targets, provided by Meson, that run ``clippy`` or
``rustdoc``:
make clippy
make rustfmt
make rustdoc
A target for ``rustfmt`` is also declared in ``rust/meson.build``:
make rustfmt
* by invoking ``cargo`` through the Meson `development environment`__
feature::
@ -50,7 +54,7 @@ which can be fixed in different ways:
pyvenv/bin/meson devenv -w ../rust cargo fmt
If you are going to use ``cargo`` repeatedly, ``pyvenv/bin/meson devenv``
will enter a shell where commands like ``cargo clippy`` just work.
will enter a shell where commands like ``cargo fmt`` just work.
__ https://mesonbuild.com/Commands.html#devenv

2
meson.build

@ -4404,7 +4404,7 @@ foreach target : target_dirs
build_by_default: true,
build_always_stale: true)
rlib = static_library('rust_' + target.underscorify(),
rlib_rs,
structured_sources([], {'.': rlib_rs}),
dependencies: target_rust.dependencies(),
override_options: ['rust_std=2021', 'build.rust_std=2021'],
rust_abi: 'c')

1
rust/Cargo.toml

@ -63,7 +63,6 @@ ignored_unit_patterns = "deny"
implicit_clone = "deny"
macro_use_imports = "deny"
missing_safety_doc = "deny"
multiple_crate_versions = "deny"
mut_mut = "deny"
needless_bitwise_bool = "deny"
needless_pass_by_ref_mut = "deny"

12
rust/meson.build

@ -24,21 +24,9 @@ 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

5
scripts/rust/rustc_args.py

@ -104,10 +104,7 @@ def generate_lint_flags(cargo_toml: CargoTOML, strict_lints: bool) -> Iterable[s
else:
raise Exception(f"invalid level {level} for {prefix}{lint}")
# This may change if QEMU ever invokes clippy-driver or rustdoc by
# hand. For now, check the syntax but do not add non-rustc lints to
# the command line.
if k == "rust" and not (strict_lints and lint in STRICT_LINTS):
if not (strict_lints and lint in STRICT_LINTS):
lint_list.append(LintFlag(flags=[flag, prefix + lint], priority=priority))
if strict_lints:

Loading…
Cancel
Save