On 8/26/25 16:04, marcandre.lur...@redhat.com wrote:
From: Marc-André Lureau <marcandre.lur...@redhat.com>

Hi,

qemu-api is providing bindings for various internal libraries. Instead, the
bindings requirements should match the various libraries and use the minimal set
of dependencies.

An initial Rust-only "common" crate is introduced, then "util" (for libqemuutil,
without bql), "migration" (so it doesn't depend on bql), "bql", "qom" (arguably,
bql shouldn't be required?), and "chardev", "system", "hwcore". Finally the
qemu-api crates are renamed and repurposed.

This involves a lot of code churn, so hopefully it can be reviewed and merged
early and iterated upon :)

The one comment that I would like to handle before merging, is that I'd prefer to keep the preludes and, in fact, even add more exports to them since they can now be chosen per-crate. Ideally, many of the crates you've crated would be accessed through many "use xyz::prelude::*" statements.

Also, if I understood correctly the split util/errno.rs can move to common/. While it has a dependency on libc, it doesn't need bindgen.

There's a bunch of code duplication for the various bindings.rs and build.rs files, which is not ideal but shouldn't grow much more than this. I wonder if, later, common code across build.rs could be written just once by adding a new crate (e.g. "qemu_meson") to the workspace, that can be used as a build-dependency.

Paolo

Marc-André Lureau (18):
   rust: remove unused global qemu "allocator"
   rust: add workspace authors
   rust: split Rust-only "common" crate
   rust: split "util" crate
   rust: move vmstate_clock!() to qdev module
   rust: move VMState handling to QOM module
   rust: move Cell vmstate impl
   rust: split "migration" crate
   rust: split "bql" crate
   rust: split "qom" crate
   rust: split "chardev" crate
   rust: split "system" crate
   rust: split "hwcore" crate
   rust: rename qemu_api_macros -> qemu_macros
   rust/hpet: drop now unneeded qemu_api dep
   rust/pl011: drop dependency on qemu_api
   rust: repurpose qemu_api -> tests
   docs: update rust.rst

  MAINTAINERS                                   |  12 +-
  docs/devel/rust.rst                           |  51 +--
  meson.build                                   |   4 -
  rust/bql/wrapper.h                            |  27 ++
  rust/chardev/wrapper.h                        |  28 ++
  rust/hw/char/pl011/wrapper.h                  |  51 +++
  rust/hw/core/wrapper.h                        |  32 ++
  rust/{qemu-api => migration}/wrapper.h        |  20 --
  rust/qom/wrapper.h                            |  27 ++
  rust/system/wrapper.h                         |  29 ++
  rust/util/wrapper.h                           |  32 ++
  rust/Cargo.lock                               | 127 ++++++-
  rust/Cargo.toml                               |  16 +-
  rust/bits/Cargo.toml                          |   2 +-
  rust/bits/meson.build                         |   2 +-
  rust/bits/src/lib.rs                          |   4 +-
  rust/{qemu-api => bql}/Cargo.toml             |  13 +-
  rust/{qemu-api => bql}/build.rs               |   2 +-
  rust/bql/meson.build                          |  52 +++
  rust/bql/src/bindings.rs                      |  25 ++
  rust/{qemu-api => bql}/src/cell.rs            | 333 +++---------------
  rust/bql/src/lib.rs                           |  29 ++
  rust/chardev/Cargo.toml                       |  24 ++
  rust/chardev/build.rs                         |  43 +++
  rust/chardev/meson.build                      |  54 +++
  rust/chardev/src/bindings.rs                  |  36 ++
  rust/{qemu-api => chardev}/src/chardev.rs     |  35 +-
  rust/chardev/src/lib.rs                       |   4 +
  rust/common/Cargo.toml                        |  16 +
  rust/common/meson.build                       |  32 ++
  rust/{qemu-api => common}/src/assertions.rs   |  16 +-
  rust/{qemu-api => common}/src/bitops.rs       |   1 -
  rust/{qemu-api => common}/src/callbacks.rs    |  12 +-
  rust/common/src/lib.rs                        |  17 +
  rust/common/src/opaque.rs                     | 240 +++++++++++++
  rust/{qemu-api => common}/src/uninit.rs       |   2 +-
  rust/common/src/zeroable.rs                   |  18 +
  rust/hw/char/pl011/Cargo.toml                 |  11 +-
  rust/hw/char/pl011/build.rs                   |  43 +++
  rust/hw/char/pl011/meson.build                |  39 +-
  rust/hw/char/pl011/src/bindings.rs            |  27 ++
  rust/hw/char/pl011/src/device.rs              |  49 +--
  rust/hw/char/pl011/src/lib.rs                 |   1 +
  rust/hw/char/pl011/src/registers.rs           |   4 +-
  rust/hw/core/Cargo.toml                       |  26 ++
  rust/hw/core/build.rs                         |  43 +++
  rust/{qemu-api => hw/core}/meson.build        |  86 ++---
  rust/hw/core/src/bindings.rs                  |  41 +++
  rust/{qemu-api => hw/core}/src/irq.rs         |  18 +-
  rust/hw/core/src/lib.rs                       |  12 +
  rust/{qemu-api => hw/core}/src/qdev.rs        |  81 +++--
  rust/{qemu-api => hw/core}/src/sysbus.rs      |  28 +-
  rust/{qemu-api => hw/core}/tests/tests.rs     |  29 +-
  rust/hw/timer/hpet/Cargo.toml                 |  10 +-
  rust/hw/timer/hpet/meson.build                |  12 +-
  rust/hw/timer/hpet/src/device.rs              |  56 ++-
  rust/hw/timer/hpet/src/fw_cfg.rs              |   6 +-
  rust/meson.build                              |  12 +-
  rust/migration/Cargo.toml                     |  21 ++
  rust/migration/build.rs                       |  43 +++
  rust/migration/meson.build                    |  57 +++
  rust/migration/src/bindings.rs                |  48 +++
  rust/migration/src/lib.rs                     |   4 +
  rust/{qemu-api => migration}/src/vmstate.rs   | 166 ++++-----
  rust/qemu-api/.gitignore                      |   2 -
  rust/qemu-api/README.md                       |  19 -
  rust/qemu-api/src/lib.rs                      | 170 ---------
  rust/qemu-api/src/prelude.rs                  |  31 --
  rust/qemu-api/src/zeroable.rs                 |  37 --
  .../Cargo.toml                                |   2 +-
  .../meson.build                               |  10 +-
  .../src/bits.rs                               |   0
  .../src/lib.rs                                |  20 +-
  .../src/tests.rs                              |   8 +-
  rust/qom/Cargo.toml                           |  23 ++
  rust/qom/build.rs                             |  43 +++
  rust/qom/meson.build                          |  61 ++++
  rust/qom/src/bindings.rs                      |  25 ++
  rust/qom/src/lib.rs                           |   4 +
  rust/{qemu-api => qom}/src/qom.rs             |  27 +-
  rust/qom/tests/tests.rs                       |  47 +++
  rust/system/Cargo.toml                        |  22 ++
  rust/system/build.rs                          |  43 +++
  rust/system/meson.build                       |  57 +++
  rust/{qemu-api => system}/src/bindings.rs     |  33 +-
  rust/system/src/lib.rs                        |   4 +
  rust/{qemu-api => system}/src/memory.rs       |  20 +-
  rust/tests/Cargo.toml                         |  30 ++
  rust/tests/meson.build                        |  14 +
  .../tests/vmstate_tests.rs                    |  18 +-
  rust/util/Cargo.toml                          |  23 ++
  rust/util/build.rs                            |  43 +++
  rust/util/meson.build                         |  61 ++++
  rust/util/src/bindings.rs                     |  25 ++
  rust/{qemu-api => util}/src/errno.rs          |  11 +-
  rust/{qemu-api => util}/src/error.rs          |   6 +-
  rust/util/src/lib.rs                          |  10 +
  rust/{qemu-api => util}/src/log.rs            |  12 +-
  rust/{qemu-api => util}/src/module.rs         |   2 +-
  rust/{qemu-api => util}/src/timer.rs          |  12 +-
  100 files changed, 2372 insertions(+), 1044 deletions(-)
  create mode 100644 rust/bql/wrapper.h
  create mode 100644 rust/chardev/wrapper.h
  create mode 100644 rust/hw/char/pl011/wrapper.h
  create mode 100644 rust/hw/core/wrapper.h
  rename rust/{qemu-api => migration}/wrapper.h (77%)
  create mode 100644 rust/qom/wrapper.h
  create mode 100644 rust/system/wrapper.h
  create mode 100644 rust/util/wrapper.h
  rename rust/{qemu-api => bql}/Cargo.toml (52%)
  rename rust/{qemu-api => bql}/build.rs (96%)
  create mode 100644 rust/bql/meson.build
  create mode 100644 rust/bql/src/bindings.rs
  rename rust/{qemu-api => bql}/src/cell.rs (70%)
  create mode 100644 rust/bql/src/lib.rs
  create mode 100644 rust/chardev/Cargo.toml
  create mode 100644 rust/chardev/build.rs
  create mode 100644 rust/chardev/meson.build
  create mode 100644 rust/chardev/src/bindings.rs
  rename rust/{qemu-api => chardev}/src/chardev.rs (91%)
  create mode 100644 rust/chardev/src/lib.rs
  create mode 100644 rust/common/Cargo.toml
  create mode 100644 rust/common/meson.build
  rename rust/{qemu-api => common}/src/assertions.rs (92%)
  rename rust/{qemu-api => common}/src/bitops.rs (98%)
  rename rust/{qemu-api => common}/src/callbacks.rs (97%)
  create mode 100644 rust/common/src/lib.rs
  create mode 100644 rust/common/src/opaque.rs
  rename rust/{qemu-api => common}/src/uninit.rs (98%)
  create mode 100644 rust/common/src/zeroable.rs
  create mode 100644 rust/hw/char/pl011/build.rs
  create mode 100644 rust/hw/char/pl011/src/bindings.rs
  create mode 100644 rust/hw/core/Cargo.toml
  create mode 100644 rust/hw/core/build.rs
  rename rust/{qemu-api => hw/core}/meson.build (52%)
  create mode 100644 rust/hw/core/src/bindings.rs
  rename rust/{qemu-api => hw/core}/src/irq.rs (92%)
  create mode 100644 rust/hw/core/src/lib.rs
  rename rust/{qemu-api => hw/core}/src/qdev.rs (86%)
  rename rust/{qemu-api => hw/core}/src/sysbus.rs (87%)
  rename rust/{qemu-api => hw/core}/tests/tests.rs (88%)
  create mode 100644 rust/migration/Cargo.toml
  create mode 100644 rust/migration/build.rs
  create mode 100644 rust/migration/meson.build
  create mode 100644 rust/migration/src/bindings.rs
  create mode 100644 rust/migration/src/lib.rs
  rename rust/{qemu-api => migration}/src/vmstate.rs (80%)
  delete mode 100644 rust/qemu-api/.gitignore
  delete mode 100644 rust/qemu-api/README.md
  delete mode 100644 rust/qemu-api/src/lib.rs
  delete mode 100644 rust/qemu-api/src/prelude.rs
  delete mode 100644 rust/qemu-api/src/zeroable.rs
  rename rust/{qemu-api-macros => qemu-macros}/Cargo.toml (94%)
  rename rust/{qemu-api-macros => qemu-macros}/meson.build (63%)
  rename rust/{qemu-api-macros => qemu-macros}/src/bits.rs (100%)
  rename rust/{qemu-api-macros => qemu-macros}/src/lib.rs (91%)
  rename rust/{qemu-api-macros => qemu-macros}/src/tests.rs (93%)
  create mode 100644 rust/qom/Cargo.toml
  create mode 100644 rust/qom/build.rs
  create mode 100644 rust/qom/meson.build
  create mode 100644 rust/qom/src/bindings.rs
  create mode 100644 rust/qom/src/lib.rs
  rename rust/{qemu-api => qom}/src/qom.rs (98%)
  create mode 100644 rust/qom/tests/tests.rs
  create mode 100644 rust/system/Cargo.toml
  create mode 100644 rust/system/build.rs
  create mode 100644 rust/system/meson.build
  rename rust/{qemu-api => system}/src/bindings.rs (56%)
  create mode 100644 rust/system/src/lib.rs
  rename rust/{qemu-api => system}/src/memory.rs (95%)
  create mode 100644 rust/tests/Cargo.toml
  create mode 100644 rust/tests/meson.build
  rename rust/{qemu-api => tests}/tests/vmstate_tests.rs (96%)
  create mode 100644 rust/util/Cargo.toml
  create mode 100644 rust/util/build.rs
  create mode 100644 rust/util/meson.build
  create mode 100644 rust/util/src/bindings.rs
  rename rust/{qemu-api => util}/src/errno.rs (98%)
  rename rust/{qemu-api => util}/src/error.rs (98%)
  create mode 100644 rust/util/src/lib.rs
  rename rust/{qemu-api => util}/src/log.rs (93%)
  rename rust/{qemu-api => util}/src/module.rs (97%)
  rename rust/{qemu-api => util}/src/timer.rs (93%)



Reply via email to