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.pitsidiana...@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.
[1] https://crates.io/crates/cstr
rust/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.
---
Best Regards
Junjie Mao