[RFC PATCH 02/11] rust: build: move rustc_args.py invocation to individual crates

Paolo Bonzini posted 11 patches 2 weeks, 1 day ago
There is a newer version of this series
[RFC PATCH 02/11] rust: build: move rustc_args.py invocation to individual crates
Posted by Paolo Bonzini 2 weeks, 1 day ago
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
Re: [RFC PATCH 02/11] rust: build: move rustc_args.py invocation to individual crates
Posted by Junjie Mao 1 week, 4 days ago
Paolo Bonzini <pbonzini@redhat.com> writes:

> Only qemu-api needs access to the symbols in config-host.h.

This may no longer be the case when more complex, build-time
configurable devices are added in the future.

Moving rustc_args.py calls to each crate is still helpful because of the
changes in patches 3-6 in this series. So I think every crate under
rust/ needs a run_command(rustc_args, ...) for crate-specific arguments.

--
Best Regards
Junjie Mao

> 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(-)