|
| From: | Manos Pitsidianakis |
| Subject: | Re: [PATCH v8 7/8] rust: add utility procedural macro crate |
| Date: | Mon, 26 Aug 2024 09:02:37 +0300 |
| User-agent: | meli 0.8.7 |
Hello Junjie, On Mon, 26 Aug 2024 08:15, Junjie Mao <junjie.mao@intel.com> wrote:
On 8/23/2024 4:11 PM, Manos Pitsidianakis wrote:This commit adds a helper crate library, qemu-api-macros for derive (and other procedural) macros to be used along qemu-api. It needs to be a separate library because in Rust, procedural macros, or macros that can generate arbitrary code, need to be special separate compilation units. Only one macro is introduced in this patch, #[derive(Object)]. It generates a constructor to register a QOM TypeInfo on init and it must be used on types that implement qemu_api::definitions::ObjectImpl trait. Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> --- MAINTAINERS | 1 + rust/meson.build | 1 + rust/qemu-api-macros/Cargo.lock | 47 +++++++ rust/qemu-api-macros/Cargo.toml | 25 ++++ rust/qemu-api-macros/README.md | 1 + rust/qemu-api-macros/meson.build | 25 ++++ rust/qemu-api-macros/src/cstr/mod.rs | 55 ++++++++ rust/qemu-api-macros/src/cstr/parse.rs | 225 +++++++++++++++++++++++++++++++++Since Rust 1.77.0 C-string literals are stabilized [1]. I don't think we need to include this cstr crate as we require Rust >= 1.80.0.
Many thanks! I got the qemu-api-macros from my git stash, I tried to bundle cstr in a previous version before we had proper meson dependencies and I hadn't raised the Rust version. So I just forgot to remove these files (they are not even declared in lib.rs). Oops 🤦.
[1] https://crates.io/crates/cstrrust/qemu-api-macros/src/lib.rs | 43 +++++++ rust/qemu-api/meson.build | 3 + 10 files changed, 426 insertions(+)[snip]diff --git a/rust/qemu-api/meson.build b/rust/qemu-api/meson.build index 85838d31b4..a0802ad858 100644 --- a/rust/qemu-api/meson.build +++ b/rust/qemu-api/meson.build @@ -13,6 +13,9 @@ _qemu_api_rs = static_library( rust_args: [ '--cfg', 'MESON', ], + dependencies: [ + qemu_api_macros, + ], )qemu_api = declare_dependency(qemu-api does not use macros provided by qemu-api-macros, but the later generates code that uses types defined by the former. So to me qemu-api-macros should depend on qemu-api, not vice versa.
It does generate code but it does not use those types, serde_derive for example does not depend on serde but serde depends on serde_derive (because it re-exports the macros in its API):
https://crates.io/crates/serde_derive/1.0.209/dependencies https://crates.io/crates/serde/1.0.209/dependencies Manos
| [Prev in Thread] | Current Thread | [Next in Thread] |