Only qemu-api needs access to the symbols in config-host.h. Remove
the temptation to use them by limiting the --cfg arguments to the
qemu-api crate.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
meson.build | 54 +++++++++++++++++----------------------
rust/qemu-api/meson.build | 4 +++
2 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/meson.build b/meson.build
index a7342c6edbd..7a9a523467b 100644
--- a/meson.build
+++ b/meson.build
@@ -120,7 +120,29 @@ 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 + ['-C', 'default-linker-libraries'],
+ native: false, language: 'rust')
+
+ add_project_arguments(rustc_lint_args, native: true, language: 'rust')
endif
dtrace = not_found
@@ -3399,36 +3421,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 + ['-C', 'default-linker-libraries'],
- native: false, language: 'rust')
-
- add_project_arguments(rustc_args, 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 e3870e901e3..f84f85b88c6 100644
--- a/rust/qemu-api/meson.build
+++ b/rust/qemu-api/meson.build
@@ -4,6 +4,10 @@ if rustc.version().version_compare('>=1.77.0')
_qemu_api_cfg += ['--cfg', 'has_offset_of']
endif
+_qemu_api_cfg += run_command(rustc_args,
+ '--config-headers', config_host_h,
+ capture: true, check: true).stdout().strip().split()
+
_qemu_api_rs = static_library(
'qemu_api',
structured_sources(
--
2.47.0