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

Reply via email to