Yet another joint work between Marc-André and myself, moving raw FFI
bindings generation to separate crates and finally getting the Rust
crate organization in a more-or-less definitive shape.

This makes it possible to reuse bindgen declarations for a header file
in its dependencies (this was not the case before this change), while
keeping multiple -sys crates to avoid rebuilding all the code whenever
something changes.

Because a script is now needed to handle bindgen command line
generation, I took the occasion to move the various output tweak
arguments (--rustified-enum, etc.) to Cargo.toml's metadata section.
This removes the need to touch meson.build files for this customization.
 
Also, because the -sys crates are generated in dependency order, this
also enforces that the crates are organized in something that resembles
the dependencies between C headers.  This highlights a mismatch between
dependency ordering on the C and Rust sides, which also causes a link
failure on msys2.  The mismatch has to be fixed by the reorganization of
the -sys crates, and patch 3 applies the same change to the high-level
bindings.

While the new approach has more source code lines, IMO that's balanced
by the many advantages (extra checks on dependency orders, more clarity
from placing bindgen tweaks in Cargo.toml, correctness brought by the
shared types, and compilation speed improvements).

Paolo


Marc-André Lureau (1):
  rust: move binding generation to bindings/

Paolo Bonzini (2):
  rust: move class_init to an extension trait
  rust: move hwcore::sysbus to system crate

 docs/devel/rust.rst                           |  57 ++++++
 meson.build                                   |   3 +-
 rust/bindings/chardev-sys/wrapper.h           |  12 ++
 rust/bindings/hwcore-sys/wrapper.h            |  30 ++++
 rust/bindings/migration-sys/wrapper.h         |  10 ++
 rust/bindings/qom-sys/wrapper.h               |  17 ++
 rust/bindings/system-sys/wrapper.h            |  21 +++
 rust/bindings/util-sys/wrapper.h              |  39 +++++
 rust/bql/wrapper.h                            |  27 ---
 rust/chardev/wrapper.h                        |  28 ---
 rust/hw/core/wrapper.h                        |  32 ----
 rust/migration/wrapper.h                      |  51 ------
 rust/qom/wrapper.h                            |  27 ---
 rust/system/wrapper.h                         |  29 ----
 rust/util/wrapper.h                           |  32 ----
 rust/Cargo.lock                               |  68 ++++++++
 rust/{util => bindings}/build.rs              |  30 ++--
 rust/bindings/chardev-sys/Cargo.toml          |  28 +++
 rust/bindings/chardev-sys/build.rs            |   1 +
 .../chardev-sys/lib.rs}                       |   7 +-
 rust/bindings/chardev-sys/meson.build         |  12 ++
 rust/bindings/generate_bindgen_args.py        | 163 ++++++++++++++++++
 rust/bindings/hwcore-sys/Cargo.toml           |  32 ++++
 rust/bindings/hwcore-sys/build.rs             |   1 +
 .../hwcore-sys/lib.rs}                        |  17 +-
 rust/bindings/hwcore-sys/meson.build          |  12 ++
 rust/bindings/meson.build                     |  37 ++++
 rust/bindings/migration-sys/Cargo.toml        |  28 +++
 rust/bindings/migration-sys/build.rs          |   1 +
 rust/bindings/migration-sys/lib.rs            | 125 ++++++++++++++
 rust/bindings/migration-sys/meson.build       |  12 ++
 rust/bindings/qom-sys/Cargo.toml              |  25 +++
 rust/bindings/qom-sys/build.rs                |   1 +
 .../bindings.rs => bindings/qom-sys/lib.rs}   |   4 +
 rust/bindings/qom-sys/meson.build             |  12 ++
 rust/bindings/system-sys/Cargo.toml           |  30 ++++
 rust/bindings/system-sys/build.rs             |   1 +
 .../system-sys/lib.rs}                        |   4 +-
 rust/bindings/system-sys/meson.build          |  12 ++
 rust/bindings/util-sys/Cargo.toml             |  25 +++
 rust/bindings/util-sys/build.rs               |   1 +
 .../bindings.rs => bindings/util-sys/lib.rs}  |   2 +-
 rust/bindings/util-sys/meson.build            |  12 ++
 rust/bql/Cargo.toml                           |   1 +
 rust/bql/build.rs                             |   1 -
 rust/bql/meson.build                          |  30 +---
 rust/bql/src/bindings.rs                      |  27 ---
 rust/bql/src/lib.rs                           |   3 +-
 rust/chardev/Cargo.toml                       |   1 +
 rust/chardev/build.rs                         |   1 -
 rust/chardev/meson.build                      |  37 +---
 rust/chardev/src/lib.rs                       |   2 +-
 rust/hw/char/pl011/build.rs                   |   2 +-
 rust/hw/char/pl011/meson.build                |  21 +--
 rust/hw/char/pl011/src/bindings.rs            |   7 +-
 rust/hw/core/Cargo.toml                       |   2 +-
 rust/hw/core/build.rs                         |   1 -
 rust/hw/core/meson.build                      |  62 +------
 rust/hw/core/src/irq.rs                       |   4 +-
 rust/hw/core/src/lib.rs                       |   6 +-
 rust/hw/core/src/prelude.rs                   |   6 +-
 rust/hw/core/src/qdev.rs                      |  31 ++--
 rust/hw/core/tests/tests.rs                   |   4 +-
 rust/meson.build                              |   3 +-
 rust/migration/Cargo.toml                     |   1 +
 rust/migration/build.rs                       |   1 -
 rust/migration/meson.build                    |  40 +----
 rust/migration/src/bindings.rs                |  49 ------
 rust/migration/src/lib.rs                     |   3 +-
 rust/migration/src/vmstate.rs                 |  73 --------
 rust/qom/Cargo.toml                           |   1 +
 rust/qom/build.rs                             |   1 -
 rust/qom/meson.build                          |  29 +---
 rust/qom/src/lib.rs                           |   3 +-
 rust/qom/src/prelude.rs                       |   1 +
 rust/qom/src/qom.rs                           |   8 +-
 rust/system/Cargo.toml                        |   4 +
 rust/system/build.rs                          |   1 -
 rust/system/meson.build                       |  39 +----
 rust/system/src/lib.rs                        |   5 +-
 rust/system/src/memory.rs                     |   2 +-
 rust/system/src/prelude.rs                    |   5 +
 rust/{hw/core => system}/src/sysbus.rs        |  36 ++--
 rust/util/Cargo.toml                          |   1 +
 rust/util/meson.build                         |  42 +----
 rust/util/src/lib.rs                          |   3 +-
 86 files changed, 965 insertions(+), 753 deletions(-)
 create mode 100644 rust/bindings/chardev-sys/wrapper.h
 create mode 100644 rust/bindings/hwcore-sys/wrapper.h
 create mode 100644 rust/bindings/migration-sys/wrapper.h
 create mode 100644 rust/bindings/qom-sys/wrapper.h
 create mode 100644 rust/bindings/system-sys/wrapper.h
 create mode 100644 rust/bindings/util-sys/wrapper.h
 delete mode 100644 rust/bql/wrapper.h
 delete mode 100644 rust/chardev/wrapper.h
 delete mode 100644 rust/hw/core/wrapper.h
 delete mode 100644 rust/migration/wrapper.h
 delete mode 100644 rust/qom/wrapper.h
 delete mode 100644 rust/system/wrapper.h
 delete mode 100644 rust/util/wrapper.h
 rename rust/{util => bindings}/build.rs (55%)
 create mode 100644 rust/bindings/chardev-sys/Cargo.toml
 create mode 120000 rust/bindings/chardev-sys/build.rs
 rename rust/{chardev/src/bindings.rs => bindings/chardev-sys/lib.rs} (84%)
 create mode 100644 rust/bindings/chardev-sys/meson.build
 create mode 100644 rust/bindings/generate_bindgen_args.py
 create mode 100644 rust/bindings/hwcore-sys/Cargo.toml
 create mode 120000 rust/bindings/hwcore-sys/build.rs
 rename rust/{hw/core/src/bindings.rs => bindings/hwcore-sys/lib.rs} (71%)
 create mode 100644 rust/bindings/hwcore-sys/meson.build
 create mode 100644 rust/bindings/meson.build
 create mode 100644 rust/bindings/migration-sys/Cargo.toml
 create mode 120000 rust/bindings/migration-sys/build.rs
 create mode 100644 rust/bindings/migration-sys/lib.rs
 create mode 100644 rust/bindings/migration-sys/meson.build
 create mode 100644 rust/bindings/qom-sys/Cargo.toml
 create mode 120000 rust/bindings/qom-sys/build.rs
 rename rust/{qom/src/bindings.rs => bindings/qom-sys/lib.rs} (85%)
 create mode 100644 rust/bindings/qom-sys/meson.build
 create mode 100644 rust/bindings/system-sys/Cargo.toml
 create mode 120000 rust/bindings/system-sys/build.rs
 rename rust/{system/src/bindings.rs => bindings/system-sys/lib.rs} (88%)
 create mode 100644 rust/bindings/system-sys/meson.build
 create mode 100644 rust/bindings/util-sys/Cargo.toml
 create mode 120000 rust/bindings/util-sys/build.rs
 rename rust/{util/src/bindings.rs => bindings/util-sys/lib.rs} (88%)
 create mode 100644 rust/bindings/util-sys/meson.build
 delete mode 120000 rust/bql/build.rs
 delete mode 100644 rust/bql/src/bindings.rs
 delete mode 120000 rust/chardev/build.rs
 delete mode 120000 rust/hw/core/build.rs
 delete mode 120000 rust/migration/build.rs
 delete mode 100644 rust/migration/src/bindings.rs
 delete mode 120000 rust/qom/build.rs
 delete mode 120000 rust/system/build.rs
 rename rust/{hw/core => system}/src/sysbus.rs (76%)

-- 
2.52.0


Reply via email to