On Tue, Jun 11, 2024 at 09:22:44AM +0100, Daniel P. Berrangé wrote:
On Mon, Jun 10, 2024 at 09:22:35PM +0300, Manos Pitsidianakis wrote:
> Hello everyone,
>
> This is an early draft of my work on implementing a very simple device,
> in this case the ARM PL011 (which in C code resides in hw/char/pl011.c
> and is used in hw/arm/virt.c).
looking at the diffstat:
> .gitignore | 2 +
> .gitlab-ci.d/buildtest.yml | 64 ++--
> configure | 12 +
> hw/arm/virt.c | 2 +-
> meson.build | 99 ++++++
> meson_options.txt | 4 +
> rust/meson.build | 93 ++++++
> rust/pl011/.cargo/config.toml | 2 +
> rust/pl011/.gitignore | 2 +
> rust/pl011/Cargo.lock | 120 +++++++
> rust/pl011/Cargo.toml | 26 ++
> rust/pl011/README.md | 42 +++
> rust/pl011/build.rs | 44 +++
> rust/pl011/meson.build | 7 +
> rust/pl011/rustfmt.toml | 10 +
> rust/pl011/src/definitions.rs | 95 ++++++
> rust/pl011/src/device.rs | 531 ++++++++++++++++++++++++++++++
> rust/pl011/src/device_class.rs | 95 ++++++
> rust/pl011/src/generated.rs | 5 +
> rust/pl011/src/lib.rs | 575 +++++++++++++++++++++++++++++++++
> rust/pl011/src/memory_ops.rs | 38 +++
My thought is that if we're going to start implementing devices
or other parts of QEMU, in Rust, then I do not want to see it
placed in a completely separate directory sub-tree.
In this example, I would expect to have hw/arm/pl011.rs, or hw/arm/pl011/*.rs
so that the device is part of the normal Arm hardware directory structure
and maintainer assignments.
It has its advantages. Otherwise, as the number of Rust implementations
grows, the same mirror directory as QEMU will have to be rebuilt again
in the Rust directory.
Further, putting C implementations in the same directory, there is again
the question of why it needs to be duplicated :-) . This topic is
probably also beyond the scope of this RFC, but it's nice to have a Rust
example to start with.
Under a unified Rust directory, using a workspace to manage multiple
packages looks as if it would be easier to maintain. Decentralized to an
existing directory, they're all separate cargos, and external dependencies
tend to become fragmented?