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>
---
meson.build | 56 +++++++++++++++++----------------------
rust/qemu-api/meson.build | 5 +++-
2 files changed, 29 insertions(+), 32 deletions(-)
diff --git a/meson.build b/meson.build
index 8def5f67bb5..b51add16d2f 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 3be7b7e5ced..5df6b35bf88 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']
--
2.47.0