Message ID | 20240828-rust-pl011-v9-0-35579191f17c@linaro.org |
---|---|
Headers | show |
Series | Add Rust build support, ARM PL011 device impl | expand |
Manos Pitsidianakis <manos.pitsidianakis@linaro.org> writes: > 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 [...]) OK I've finished my pass through after running aground with the bindgen problem. I shall have another go on a Trixie machine once I've caught up with my other reviews.
On Wed, Aug 28, 2024 at 6:12 AM Manos Pitsidianakis <manos.pitsidianakis@linaro.org> wrote: > - Addressed v8 review comment: removed rustfmt.toml symlink (Junjie Mao) > - Addressed v8 review comment: removed unused cstr files (Junjie Mao) > - Addressed v8 review comment: added HAVE_GLIB_WITH_ALIGNED_ALLOC config > host def to check whether glib's aligned alloc functions are available (Junjie Mao) > - qemu_api: Changed default alignment condition in allocator (alignment > is always nonzero) > - qemu_api: Enabled allocator by default in builds > - pl011: fixed invalid cast of byte buffer to u32 in pl011_receive() > leading to misaligned read Looks generally good, the main sticky issue is the clang/libclang path consistency (but good job finding LIBCLANG_PATH by the way!). As mentioned in the individual review, I would remove the allocator completely (and if you really wanted it, you should implement alloc_zeroed and realloc too because the default implementations in GlobalAlloc are inefficient). For the cross compilation patch, if you want you can include in v10 what is at https://paste.debian.net/1328408/. Paolo > - Link to v8: https://lore.kernel.org/r/20240823-rust-pl011-v8-0-b9f5746bdaf3@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 (7): > build-sys: Add rust feature option > rust: add bindgen step as a meson dependency > .gitattributes: add Rust diff and merge attributes > meson.build: add HAVE_GLIB_WITH_ALIGNED_ALLOC flag > 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 | 87 ++- > 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/src/definitions.rs | 20 + > rust/hw/char/pl011/src/device.rs | 594 +++++++++++++++++++++ > 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/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 | 24 + > rust/qemu-api/src/definitions.rs | 109 ++++ > rust/qemu-api/src/device_class.rs | 128 +++++ > rust/qemu-api/src/lib.rs | 154 ++++++ > 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 +- > 75 files changed, 2991 insertions(+), 21 deletions(-) > --- > base-commit: a733f37aef3b7d1d33bfe2716af88cdfd67ba64e > change-id: 20240814-rust-pl011-v7 > > Best regards, > -- > γαῖα πυρί μιχθήτω >
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 v9: - Addressed v8 review comment: removed rustfmt.toml symlink (Junjie Mao) - Addressed v8 review comment: removed unused cstr files (Junjie Mao) - Addressed v8 review comment: added HAVE_GLIB_WITH_ALIGNED_ALLOC config host def to check whether glib's aligned alloc functions are available (Junjie Mao) - qemu_api: Changed default alignment condition in allocator (alignment is always nonzero) - qemu_api: Enabled allocator by default in builds - pl011: fixed invalid cast of byte buffer to u32 in pl011_receive() leading to misaligned read - Link to v8: https://lore.kernel.org/r/20240823-rust-pl011-v8-0-b9f5746bdaf3@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 (7): build-sys: Add rust feature option rust: add bindgen step as a meson dependency .gitattributes: add Rust diff and merge attributes meson.build: add HAVE_GLIB_WITH_ALIGNED_ALLOC flag 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 | 87 ++- 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/src/definitions.rs | 20 + rust/hw/char/pl011/src/device.rs | 594 +++++++++++++++++++++ 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/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 | 24 + rust/qemu-api/src/definitions.rs | 109 ++++ rust/qemu-api/src/device_class.rs | 128 +++++ rust/qemu-api/src/lib.rs | 154 ++++++ 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 +- 75 files changed, 2991 insertions(+), 21 deletions(-) --- base-commit: a733f37aef3b7d1d33bfe2716af88cdfd67ba64e change-id: 20240814-rust-pl011-v7 Best regards,