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