From: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Gustavo Romero" <gustavo.romero@linaro.org>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Junjie Mao" <junjie.mao@intel.com>,
"Zhao Liu" <zhao1.liu@intel.com>
Subject: [PATCH v8 0/8] Add Rust build support, ARM PL011 device impl
Date: Fri, 23 Aug 2024 11:11:48 +0300 [thread overview]
Message-ID: <20240823-rust-pl011-v8-0-b9f5746bdaf3@linaro.org> (raw)
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,
--
γαῖα πυρί μιχθήτω
next reply other threads:[~2024-08-23 8:13 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-23 8:11 Manos Pitsidianakis [this message]
2024-08-23 8:11 ` [PATCH v8 1/8] Require meson version 1.5.0 Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 2/8] build-sys: Add rust feature option Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 3/8] configure, meson: detect Rust toolchain Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 4/8] rust: add bindgen step as a meson dependency Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 5/8] .gitattributes: add Rust diff and merge attributes Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 6/8] rust: add crate to expose bindings and interfaces Manos Pitsidianakis
2024-08-26 5:03 ` Junjie Mao
2024-08-26 6:12 ` Manos Pitsidianakis
2024-08-26 8:41 ` Junjie Mao
2024-08-26 5:31 ` Junjie Mao
2024-08-26 6:41 ` Manos Pitsidianakis
2024-08-26 7:45 ` Junjie Mao
2024-08-26 8:24 ` Thomas Huth
2024-08-26 11:29 ` Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 7/8] rust: add utility procedural macro crate Manos Pitsidianakis
2024-08-26 5:15 ` Junjie Mao
2024-08-26 6:02 ` Manos Pitsidianakis
2024-08-23 8:11 ` [PATCH v8 8/8] rust: add PL011 device model Manos Pitsidianakis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240823-rust-pl011-v8-0-b9f5746bdaf3@linaro.org \
--to=manos.pitsidianakis@linaro.org \
--cc=alex.bennee@linaro.org \
--cc=berrange@redhat.com \
--cc=gustavo.romero@linaro.org \
--cc=junjie.mao@intel.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=zhao1.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).