[PATCH v8 0/8] Add Rust build support, ARM PL011 device impl

Manos Pitsidianakis posted 8 patches 3 months ago
There is a newer version of this series
MAINTAINERS                                        |  21 +
configure                                          |  50 +-
meson.build                                        |  83 ++-
rust/wrapper.h                                     |  39 ++
.gitattributes                                     |   3 +
Kconfig                                            |   1 +
Kconfig.host                                       |   3 +
hw/arm/Kconfig                                     |  33 +-
meson_options.txt                                  |   3 +
python/scripts/vendor.py                           |   4 +-
python/wheels/meson-1.2.3-py3-none-any.whl         | Bin 964928 -> 0 bytes
python/wheels/meson-1.5.0-py3-none-any.whl         | Bin 0 -> 959846 bytes
pythondeps.toml                                    |   2 +-
rust/.gitignore                                    |   3 +
rust/Kconfig                                       |   1 +
rust/hw/Kconfig                                    |   2 +
rust/hw/char/Kconfig                               |   3 +
rust/hw/char/meson.build                           |   1 +
rust/hw/char/pl011/.gitignore                      |   2 +
rust/hw/char/pl011/Cargo.lock                      | 134 +++++
rust/hw/char/pl011/Cargo.toml                      |  26 +
rust/hw/char/pl011/README.md                       |  31 ++
rust/hw/char/pl011/meson.build                     |  26 +
rust/hw/char/pl011/rustfmt.toml                    |   1 +
rust/hw/char/pl011/src/definitions.rs              |  20 +
rust/hw/char/pl011/src/device.rs                   | 592 +++++++++++++++++++++
rust/hw/char/pl011/src/device_class.rs             |  59 ++
rust/hw/char/pl011/src/lib.rs                      | 585 ++++++++++++++++++++
rust/hw/char/pl011/src/memory_ops.rs               |  57 ++
rust/hw/meson.build                                |   1 +
rust/meson.build                                   |   4 +
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 ++++++++
rust/qemu-api-macros/src/lib.rs                    |  43 ++
rust/qemu-api/.gitignore                           |   2 +
rust/qemu-api/Cargo.lock                           |   7 +
rust/qemu-api/Cargo.toml                           |  26 +
rust/qemu-api/README.md                            |  17 +
rust/qemu-api/build.rs                             |  14 +
rust/qemu-api/meson.build                          |  23 +
rust/qemu-api/rustfmt.toml                         |   1 +
rust/qemu-api/src/definitions.rs                   | 109 ++++
rust/qemu-api/src/device_class.rs                  | 128 +++++
rust/qemu-api/src/lib.rs                           | 102 ++++
rust/qemu-api/src/tests.rs                         |  49 ++
rust/rustfmt.toml                                  |   7 +
scripts/archive-source.sh                          |   5 +-
scripts/make-release                               |   5 +-
scripts/meson-buildoptions.sh                      |   3 +
scripts/rust/rust_root_crate.sh                    |  13 +
scripts/rust/rustc_args.py                         |  84 +++
subprojects/.gitignore                             |  11 +
subprojects/arbitrary-int-1-rs.wrap                |   7 +
subprojects/bilge-0.2-rs.wrap                      |   7 +
subprojects/bilge-impl-0.2-rs.wrap                 |   7 +
subprojects/either-1-rs.wrap                       |   7 +
subprojects/itertools-0.11-rs.wrap                 |   7 +
.../packagefiles/arbitrary-int-1-rs/meson.build    |  19 +
subprojects/packagefiles/bilge-0.2-rs/meson.build  |  29 +
.../packagefiles/bilge-impl-0.2-rs/meson.build     |  45 ++
subprojects/packagefiles/either-1-rs/meson.build   |  24 +
.../packagefiles/itertools-0.11-rs/meson.build     |  30 ++
.../packagefiles/proc-macro-error-1-rs/meson.build |  40 ++
.../proc-macro-error-attr-1-rs/meson.build         |  32 ++
.../packagefiles/proc-macro2-1-rs/meson.build      |  31 ++
subprojects/packagefiles/quote-1-rs/meson.build    |  29 +
subprojects/packagefiles/syn-2-rs/meson.build      |  40 ++
.../packagefiles/unicode-ident-1-rs/meson.build    |  20 +
subprojects/proc-macro-error-1-rs.wrap             |   7 +
subprojects/proc-macro-error-attr-1-rs.wrap        |   7 +
subprojects/proc-macro2-1-rs.wrap                  |   7 +
subprojects/quote-1-rs.wrap                        |   7 +
subprojects/syn-2-rs.wrap                          |   7 +
subprojects/unicode-ident-1-rs.wrap                |   7 +
tests/lcitool/mappings.yml                         |   2 +-
79 files changed, 3214 insertions(+), 21 deletions(-)
[PATCH v8 0/8] Add Rust build support, ARM PL011 device impl
Posted by Manos Pitsidianakis 3 months ago
Hello everyone,

This series adds:

- build system support for the Rust compiler
- a small Rust library, qemu-api, which includes bindings to QEMU's C
  interface generated with bindgen, and qemu-api-macros, a procedural
  macro library.
- a proof of concept ARM PL011 device implementation in Rust, chosen for
  its low complexity. The device is used in the arm virt machine if qemu
  is compiled with rust enabled (./configure --enable-rust [...])

Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
---
Changes in v8:
- Allow for compilation of more than one Rust-based component in Meson
  by compiling all Rust static libraries into one "root" library before
  linking it to each target emulation executable.
- Added a qemu_api_macros procedural macro library.
- (minor) Moved generated bindings.rs to qemu_api crate using meson's
  structured_source() instead of compiling it as a standalone crate
  which was unnecessary.
- (minor) Removed unnecessary rustc optimization/debug flags (should be handled
  by meson instead).
- (minor) Moved build scripts under scripts/rust/
- (minor) Fixed license issues

Previous version was: <20240815-rust-pl011-v7-0-975135e98831@linaro.org>

https://lore.kernel.org/qemu-devel/20240815-rust-pl011-v7-0-975135e98831@linaro.org/

Outstanding issues that are not blocking for merge are:

- Cross-compilation for aarch64 is not possible out-of-the-box because of this bug:
  <https://github.com/rust-lang/rust/issues/125619> in llvm which when
  fixed, must be ported to upstream rust's llvm fork. Since the problem
  is an extraneous symbol we could strip it with objcopy -N|--strip-symbol
  Update since last version: Fix is in upstream llvm, we're awaiting for
  rust upstream to pick it up.

---
Manos Pitsidianakis (6):
      build-sys: Add rust feature option
      rust: add bindgen step as a meson dependency
      .gitattributes: add Rust diff and merge attributes
      rust: add crate to expose bindings and interfaces
      rust: add utility procedural macro crate
      rust: add PL011 device model

Paolo Bonzini (2):
      Require meson version 1.5.0
      configure, meson: detect Rust toolchain

 MAINTAINERS                                        |  21 +
 configure                                          |  50 +-
 meson.build                                        |  83 ++-
 rust/wrapper.h                                     |  39 ++
 .gitattributes                                     |   3 +
 Kconfig                                            |   1 +
 Kconfig.host                                       |   3 +
 hw/arm/Kconfig                                     |  33 +-
 meson_options.txt                                  |   3 +
 python/scripts/vendor.py                           |   4 +-
 python/wheels/meson-1.2.3-py3-none-any.whl         | Bin 964928 -> 0 bytes
 python/wheels/meson-1.5.0-py3-none-any.whl         | Bin 0 -> 959846 bytes
 pythondeps.toml                                    |   2 +-
 rust/.gitignore                                    |   3 +
 rust/Kconfig                                       |   1 +
 rust/hw/Kconfig                                    |   2 +
 rust/hw/char/Kconfig                               |   3 +
 rust/hw/char/meson.build                           |   1 +
 rust/hw/char/pl011/.gitignore                      |   2 +
 rust/hw/char/pl011/Cargo.lock                      | 134 +++++
 rust/hw/char/pl011/Cargo.toml                      |  26 +
 rust/hw/char/pl011/README.md                       |  31 ++
 rust/hw/char/pl011/meson.build                     |  26 +
 rust/hw/char/pl011/rustfmt.toml                    |   1 +
 rust/hw/char/pl011/src/definitions.rs              |  20 +
 rust/hw/char/pl011/src/device.rs                   | 592 +++++++++++++++++++++
 rust/hw/char/pl011/src/device_class.rs             |  59 ++
 rust/hw/char/pl011/src/lib.rs                      | 585 ++++++++++++++++++++
 rust/hw/char/pl011/src/memory_ops.rs               |  57 ++
 rust/hw/meson.build                                |   1 +
 rust/meson.build                                   |   4 +
 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 ++++++++
 rust/qemu-api-macros/src/lib.rs                    |  43 ++
 rust/qemu-api/.gitignore                           |   2 +
 rust/qemu-api/Cargo.lock                           |   7 +
 rust/qemu-api/Cargo.toml                           |  26 +
 rust/qemu-api/README.md                            |  17 +
 rust/qemu-api/build.rs                             |  14 +
 rust/qemu-api/meson.build                          |  23 +
 rust/qemu-api/rustfmt.toml                         |   1 +
 rust/qemu-api/src/definitions.rs                   | 109 ++++
 rust/qemu-api/src/device_class.rs                  | 128 +++++
 rust/qemu-api/src/lib.rs                           | 102 ++++
 rust/qemu-api/src/tests.rs                         |  49 ++
 rust/rustfmt.toml                                  |   7 +
 scripts/archive-source.sh                          |   5 +-
 scripts/make-release                               |   5 +-
 scripts/meson-buildoptions.sh                      |   3 +
 scripts/rust/rust_root_crate.sh                    |  13 +
 scripts/rust/rustc_args.py                         |  84 +++
 subprojects/.gitignore                             |  11 +
 subprojects/arbitrary-int-1-rs.wrap                |   7 +
 subprojects/bilge-0.2-rs.wrap                      |   7 +
 subprojects/bilge-impl-0.2-rs.wrap                 |   7 +
 subprojects/either-1-rs.wrap                       |   7 +
 subprojects/itertools-0.11-rs.wrap                 |   7 +
 .../packagefiles/arbitrary-int-1-rs/meson.build    |  19 +
 subprojects/packagefiles/bilge-0.2-rs/meson.build  |  29 +
 .../packagefiles/bilge-impl-0.2-rs/meson.build     |  45 ++
 subprojects/packagefiles/either-1-rs/meson.build   |  24 +
 .../packagefiles/itertools-0.11-rs/meson.build     |  30 ++
 .../packagefiles/proc-macro-error-1-rs/meson.build |  40 ++
 .../proc-macro-error-attr-1-rs/meson.build         |  32 ++
 .../packagefiles/proc-macro2-1-rs/meson.build      |  31 ++
 subprojects/packagefiles/quote-1-rs/meson.build    |  29 +
 subprojects/packagefiles/syn-2-rs/meson.build      |  40 ++
 .../packagefiles/unicode-ident-1-rs/meson.build    |  20 +
 subprojects/proc-macro-error-1-rs.wrap             |   7 +
 subprojects/proc-macro-error-attr-1-rs.wrap        |   7 +
 subprojects/proc-macro2-1-rs.wrap                  |   7 +
 subprojects/quote-1-rs.wrap                        |   7 +
 subprojects/syn-2-rs.wrap                          |   7 +
 subprojects/unicode-ident-1-rs.wrap                |   7 +
 tests/lcitool/mappings.yml                         |   2 +-
 79 files changed, 3214 insertions(+), 21 deletions(-)
---
base-commit: a733f37aef3b7d1d33bfe2716af88cdfd67ba64e
change-id: 20240814-rust-pl011-v7

Best regards,
-- 
γαῖα πυρί μιχθήτω