aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-11-12 11:54:11 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2024-12-10 18:44:06 +0100
commitf3a6e9bc475504152e45e5fbf86c756157438d08 (patch)
treebf2b50dbc0737a3945e0a475eae106aa80f2e529
parentcb7ada5409f171dae364f206a7fe3ff30fcba7cb (diff)
downloadqemu-f3a6e9bc475504152e45e5fbf86c756157438d08.zip
qemu-f3a6e9bc475504152e45e5fbf86c756157438d08.tar.gz
qemu-f3a6e9bc475504152e45e5fbf86c756157438d08.tar.bz2
rust: build: move rustc_args.py invocation to qemu-api crate
Only qemu-api needs access to the symbols in config-host.h. Remove the temptation to use them elsewhere by limiting the --cfg arguments to the qemu-api crate. Per-crate invocation of the script will also be needed to add --check-cfg options for each crate's features (when more complex, build-time configurable devices are added in the future). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--meson.build56
-rw-r--r--rust/qemu-api/meson.build5
2 files changed, 29 insertions, 32 deletions
diff --git a/meson.build b/meson.build
index ea211c2..2f1f2ae 100644
--- a/meson.build
+++ b/meson.build
@@ -120,7 +120,30 @@ if have_rust
endif
if have_rust
+ rustc_args = find_program('scripts/rust/rustc_args.py')
rustfmt = find_program('rustfmt', required: false)
+
+ # Prohibit code that is forbidden in Rust 2024
+ rustc_lint_args = ['-D', 'unsafe_op_in_unsafe_fn']
+
+ # Occasionally, we may need to silence warnings and clippy lints that
+ # were only introduced in newer Rust compiler versions. Do not croak
+ # in that case; a CI job with rust_strict_lints == true ensures that
+ # we do not have misspelled allow() attributes.
+ if not get_option('strict_rust_lints')
+ rustc_lint_args += ['-A', 'unknown_lints']
+ endif
+
+ # Apart from procedural macros, our Rust executables will often link
+ # with C code, so include all the libraries that C code needs. This
+ # is safe; https://github.com/rust-lang/rust/pull/54675 says that
+ # passing -nodefaultlibs to the linker "was more ideological to
+ # start with than anything".
+ add_project_arguments(rustc_lint_args +
+ ['--cfg', 'MESON', '-C', 'default-linker-libraries'],
+ native: false, language: 'rust')
+ add_project_arguments(rustc_lint_args + ['--cfg', 'MESON'],
+ native: true, language: 'rust')
endif
dtrace = not_found
@@ -3399,37 +3422,8 @@ endif
# Generated sources #
#####################
-genh += configure_file(output: 'config-host.h', configuration: config_host_data)
-
-if have_rust
- rustc_args = run_command(
- find_program('scripts/rust/rustc_args.py'),
- '--config-headers', meson.project_build_root() / 'config-host.h',
- capture : true,
- check: true).stdout().strip().split()
-
- # Prohibit code that is forbidden in Rust 2024
- rustc_args += ['-D', 'unsafe_op_in_unsafe_fn']
-
- # Occasionally, we may need to silence warnings and clippy lints that
- # were only introduced in newer Rust compiler versions. Do not croak
- # in that case; a CI job with rust_strict_lints == true ensures that
- # we do not have misspelled allow() attributes.
- if not get_option('strict_rust_lints')
- rustc_args += ['-A', 'unknown_lints']
- endif
-
- # Apart from procedural macros, our Rust executables will often link
- # with C code, so include all the libraries that C code needs. This
- # is safe; https://github.com/rust-lang/rust/pull/54675 says that
- # passing -nodefaultlibs to the linker "was more ideological to
- # start with than anything".
- add_project_arguments(rustc_args +
- ['--cfg', 'MESON', '-C', 'default-linker-libraries'],
- native: false, language: 'rust')
- add_project_arguments(rustc_args + ['--cfg', 'MESON'],
- native: true, language: 'rust')
-endif
+config_host_h = configure_file(output: 'config-host.h', configuration: config_host_data)
+genh += config_host_h
hxtool = find_program('scripts/hxtool')
shaderinclude = find_program('scripts/shaderinclude.py')
diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build
index 3be7b7e..5df6b35 100644
--- a/rust/qemu-api/meson.build
+++ b/rust/qemu-api/meson.build
@@ -1,4 +1,7 @@
-_qemu_api_cfg = []
+_qemu_api_cfg = run_command(rustc_args,
+ '--config-headers', config_host_h,
+ capture: true, check: true).stdout().strip().split()
+
# _qemu_api_cfg += ['--cfg', 'feature="allocator"']
if rustc.version().version_compare('>=1.77.0')
_qemu_api_cfg += ['--cfg', 'has_offset_of']