RustInQemu: Difference between revisions
(→TODO) |
|||
(75 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
For the old RustInQemu page, see [[RustInQemu/2022]] | For the old RustInQemu page, see [[RustInQemu/2022]] | ||
== Active | == Active effort == | ||
* [https://lore.kernel.org/qemu-devel/c2342e56-b6d8-4115-8318-d8047a46f1ad@redhat.com/T/ Current state] | |||
* [https://www.qemu.org/docs/master/devel/rust.html Documentation] | |||
* Past updates: [https://lore.kernel.org/qemu-devel/d3d1944e-2482-4aa7-b621-596246a08107@gnu.org/T/ April 2025] | [https://lore.kernel.org/qemu-devel/17ad81c3-98fc-44c2-8f65-f5e2cc07030b@gnu.org/T/ January 2025] | [https://lore.kernel.org/qemu-devel/cc40943e-dec1-4890-a1d9-579350ce296f@pbonzini.local/T/ November 2024] | |||
== Past efforts == | |||
* <code>[RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples</code><br />[https://patchew.org/QEMU/20210907121943.3498701-1-marcandre.lureau@redhat.com/ on patchew] [https://lore.kernel.org/qemu-devel/20210907121943.3498701-1-marcandre.lureau@redhat.com/ on lore] | |||
* <code>Subject: [RFC 0/6] scripts: Rewrite simpletrace printer in Rust</code><br /><code>Date: Mon, 27 May 2024 16:14:15 +0800</code><br />[https://lore.kernel.org/qemu-devel/20240527081421.2258624-1-zhao1.liu@intel.com/ RFC v1] | * <code>Subject: [RFC 0/6] scripts: Rewrite simpletrace printer in Rust</code><br /><code>Date: Mon, 27 May 2024 16:14:15 +0800</code><br />[https://lore.kernel.org/qemu-devel/20240527081421.2258624-1-zhao1.liu@intel.com/ RFC v1] | ||
== Work in progress == | |||
=== To be merged === | |||
needs const_refs_static in Rust 1.83.0: | |||
* complete vmstate bindings | |||
* first round of typesafe qdev property generation | |||
=== Paolo === | |||
* Improving Cargo support in Meson | |||
* Tracing (summer of code 2025) | |||
=== Manos === | |||
* generate qdev properties via macros | |||
=== Zhao === | |||
* vm-memory integration | |||
=== Kevin === | |||
* Executing async code, block driver implementations | |||
** https://lore.kernel.org/qemu-devel/20250211214328.640374-1-kwolf@redhat.com/ | |||
== | == Bugs == | ||
* Add BQL abstraction for tests - avoid running them with "--test-threads 1" | |||
* [https://github.com/mesonbuild/meson/issues/8828 Distros would prefer to link libstd dynamically]; Rust-enabled QEMU binaries are huge | |||
== Possible project targets == | |||
== | === Projects with some code === | ||
* visitors/QOM properties, could be interesting for <code>hw/sensor/tmp105.c</code>... | |||
** https://lore.kernel.org/qemu-devel/20250605101124.367270-1-pbonzini@redhat.com/ | |||
=== Check if distros package the dependent Rust crates === | |||
Mostly useful for distros to enable Rust when building QEMU. | |||
* Missing in Fedora: arbitrary-int, bilge, bilge-impl, foreign | |||
** Fedora does have bitfield-struct, which is a bit inferior to bilge in some respects but smaller | |||
* Debian? | |||
== | === Cleanups === | ||
* | * split qemu_api into multiple crates (each with its own prelude, too) | ||
* look into replacing pointer and BqlCell usage in HPET with [https://docs.rs/self_cell/latest/self_cell/# self_cell] (e.g. BqlRefCell<SelfCell<HPETRegisters, [HPETTimer; 8]>></tt>). | |||
* | |||
== | === Nice things to have === | ||
* | * Remove need for manual "meson subprojects update --reset" when updating packagefiles/ | ||
* Improve tool integration | |||
* | ** Run code checks a la "meson test --suite codecheck"? (clippy and rustfmt) | ||
** " | * Place rustdoc output for master somewhere? | ||
* | * distros need dynamically linked libstd | ||
* | ** Meson 1.9.0 supports -Drust_dynamic_std=true for executables | ||
** | ** Add #![no_main] to output of scripts/rust/rust_root_crate.sh, and add it to the final emulator link (needs https://github.com/mesonbuild/meson/pull/14818) | ||
** | * More bindings: I2C? | ||
* | |||
== | === New code to write=== | ||
* | * more QOM procedural macros | ||
** | ** generate qdev properties (started) | ||
** | ** generate parts of TypeInfo? | ||
** | ** monomorphization of <tt>T: IsA<Class></tt> to <tt>&T</tt> (like the momo crate) | ||
* | * safe object creation with [https://docs.rs/pinned-init/ pinned_init, originating from Linux]) | ||
** https://lore.kernel.org/qemu-devel/aCysct2L8Bosqy0N@intel.com/ | |||
* Character device flow control | |||
** | |||
* | |||
== | === Improved clippy coverage in CI? === | ||
* run clippy as part of "make check" | |||
* run clippy as part of "make check" | |||
* add to CI a fallible job that runs on nightly clippy with <tt>-Dclippy::complexity -Dclippy::perf -Dclippy::suspicious -Dclippy::style -Dunknown_lints</tt>. the job should generally pass, and if a new lint triggers it probably should be added to Cargo.toml as either "allow" (rare) or "deny" (possibly after adding #[allow()] to the source). | * add to CI a fallible job that runs on nightly clippy with <tt>-Dclippy::complexity -Dclippy::perf -Dclippy::suspicious -Dclippy::style -Dunknown_lints</tt>. the job should generally pass, and if a new lint triggers it probably should be added to Cargo.toml as either "allow" (rare) or "deny" (possibly after adding #[allow()] to the source). | ||
=== Miscellanea === | === Miscellanea === | ||
* <code>qemu-bridge-helper.c</code> Re-write SUID C executable with useful features. | |||
=== Devices === | === Devices === | ||
Line 87: | Line 84: | ||
** needs block bindings | ** needs block bindings | ||
* <code>hw/timer/i8254.c</code> (claimed, WIP) | * <code>hw/timer/i8254.c</code> (claimed, WIP) | ||
* <code>hw/mem/nvdimm.c</code> (suggested by [[User:Manos|Manos]]) | * <code>hw/mem/nvdimm.c</code> (suggested by [[User:Manos|Manos]]) | ||
[[Category:RustInQemu]] | [[Category:RustInQemu]] |
Latest revision as of 13:14, 25 July 2025
For the old RustInQemu page, see RustInQemu/2022
Active effort
- Current state
- Documentation
- Past updates: April 2025 | January 2025 | November 2024
Past efforts
[RFC v3 00/32] Rust binding for QAPI and qemu-ga QMP handler examples
on patchew on loreSubject: [RFC 0/6] scripts: Rewrite simpletrace printer in Rust
Date: Mon, 27 May 2024 16:14:15 +0800
RFC v1
Work in progress
To be merged
needs const_refs_static in Rust 1.83.0:
- complete vmstate bindings
- first round of typesafe qdev property generation
Paolo
- Improving Cargo support in Meson
- Tracing (summer of code 2025)
Manos
- generate qdev properties via macros
Zhao
- vm-memory integration
Kevin
- Executing async code, block driver implementations
Bugs
- Add BQL abstraction for tests - avoid running them with "--test-threads 1"
- Distros would prefer to link libstd dynamically; Rust-enabled QEMU binaries are huge
Possible project targets
Projects with some code
- visitors/QOM properties, could be interesting for
hw/sensor/tmp105.c
...
Check if distros package the dependent Rust crates
Mostly useful for distros to enable Rust when building QEMU.
- Missing in Fedora: arbitrary-int, bilge, bilge-impl, foreign
- Fedora does have bitfield-struct, which is a bit inferior to bilge in some respects but smaller
- Debian?
Cleanups
- split qemu_api into multiple crates (each with its own prelude, too)
- look into replacing pointer and BqlCell usage in HPET with self_cell (e.g. BqlRefCell<SelfCell<HPETRegisters, [HPETTimer; 8]>>).
Nice things to have
- Remove need for manual "meson subprojects update --reset" when updating packagefiles/
- Improve tool integration
- Run code checks a la "meson test --suite codecheck"? (clippy and rustfmt)
- Place rustdoc output for master somewhere?
- distros need dynamically linked libstd
- Meson 1.9.0 supports -Drust_dynamic_std=true for executables
- Add #![no_main] to output of scripts/rust/rust_root_crate.sh, and add it to the final emulator link (needs https://github.com/mesonbuild/meson/pull/14818)
- More bindings: I2C?
New code to write
- more QOM procedural macros
- generate qdev properties (started)
- generate parts of TypeInfo?
- monomorphization of T: IsA<Class> to &T (like the momo crate)
- safe object creation with pinned_init, originating from Linux)
- Character device flow control
Improved clippy coverage in CI?
- run clippy as part of "make check"
- add to CI a fallible job that runs on nightly clippy with -Dclippy::complexity -Dclippy::perf -Dclippy::suspicious -Dclippy::style -Dunknown_lints. the job should generally pass, and if a new lint triggers it probably should be added to Cargo.toml as either "allow" (rare) or "deny" (possibly after adding #[allow()] to the source).
Miscellanea
qemu-bridge-helper.c
Re-write SUID C executable with useful features.
Devices
hw/block/pflash_cfi01.c
,hw/block/pflash_cfi02.c
(claimed, WIP)- needs block bindings
hw/timer/i8254.c
(claimed, WIP)hw/mem/nvdimm.c
(suggested by Manos)