Since Manos helpfully posted his vmstate patches, this series is all that is needed in order to enable Rust for at least the Debian, Fedora and Ubuntu jobs. I took his patches and isolated them from the procedural macro experiment.
There are quite a few changes from the previous posting: - new patches to bring pl011 mostly up to date with the C code (1-7) - remove unnecessary .gitattributes file (8) - apply rustfmt throughout - add "rust: create a cargo workspace" to ensure a single version of the dependencies is used for all cargo commands (14, based on a suggestion by Junjie) - add Junjie's syntax checks to the offset_of! macro. I added a small struct with a From<> implementation, to make compile errors even easier to report (15). - add final patch to enable rust in the Debian and Ubuntu system build jobs (23) Note that this requires "meson subprojects update --reset" in order to do an incremental build if you have already downloaded the Rust subprojects. While I have a solution for that (modeled after scripts/git-submodule.sh), I first need to check with the Meson folks whether my script is using only stable interfaces. This series can be found at branch rust-next of my git repository (https://gitlab.com/bonzini/qemu.git), which also helps with the problems in applying patch 8. Everything up to commit f6a46d2a4eb ("rust: do not use TYPE_CHARDEV unnecessarily", 2024-10-25) will be my next pull request, which I will send early next week (to give people some more days to complain). Paolo Supersedes: <20241022100956.196657-1-pbonz...@redhat.com> CI: https://gitlab.com/bonzini/qemu/-/pipelines/1512732399 Manos Pitsidianakis (6): rust: add definitions for vmstate rust/pl011: add support for migration rust/pl011: move CLK_NAME static to function scope rust/pl011: add TYPE_PL011_LUMINARY device rust/pl011: remove commented out C code rust/pl011: Use correct masks for IBRD and FBRD Paolo Bonzini (17): rust/pl011: fix default value for migrate-clock rust: patch bilge-impl to allow compilation with 1.63.0 rust: fix cfgs of proc-macro2 for 1.63.0 rust: use std::os::raw instead of core::ffi rust: introduce a c_str macro rust: silence unknown warnings for the sake of old compilers rust: synchronize dependencies between subprojects and Cargo.lock rust: create a cargo workspace rust: introduce alternative implementation of offset_of! rust: do not use MaybeUninit::zeroed() rust: clean up detection of the language rust: allow version 1.63.0 of rustc rust: do not use --generate-cstr rust: allow older version of bindgen rust: make rustfmt optional dockerfiles: install bindgen from cargo on Ubuntu 22.04 ci: enable rust in the Debian and Ubuntu system build job docs/about/build-platforms.rst | 12 + meson.build | 102 +++-- .gitattributes | 2 + .gitlab-ci.d/buildtest.yml | 6 +- meson_options.txt | 2 + rust/{hw/char/pl011 => }/Cargo.lock | 4 + rust/Cargo.toml | 7 + rust/hw/char/pl011/Cargo.toml | 3 - rust/hw/char/pl011/src/device.rs | 158 ++++++-- rust/hw/char/pl011/src/device_class.rs | 71 +++- rust/hw/char/pl011/src/lib.rs | 5 +- rust/hw/char/pl011/src/memory_ops.rs | 14 +- rust/qemu-api-macros/Cargo.lock | 47 --- rust/qemu-api-macros/Cargo.toml | 5 +- rust/qemu-api-macros/src/lib.rs | 81 +++- rust/qemu-api/Cargo.lock | 7 - rust/qemu-api/Cargo.toml | 10 +- rust/qemu-api/build.rs | 9 + rust/qemu-api/meson.build | 17 +- rust/qemu-api/src/c_str.rs | 53 +++ rust/qemu-api/src/definitions.rs | 2 +- rust/qemu-api/src/device_class.rs | 43 +-- rust/qemu-api/src/lib.rs | 19 +- rust/qemu-api/src/offset_of.rs | 161 ++++++++ rust/qemu-api/src/vmstate.rs | 358 ++++++++++++++++++ rust/qemu-api/src/zeroable.rs | 91 ++++- rust/qemu-api/tests/tests.rs | 29 +- scripts/meson-buildoptions.sh | 4 + subprojects/bilge-impl-0.2-rs.wrap | 1 + .../packagefiles/bilge-impl-1.63.0.patch | 45 +++ .../packagefiles/proc-macro2-1-rs/meson.build | 4 +- subprojects/packagefiles/syn-2-rs/meson.build | 1 + tests/docker/dockerfiles/ubuntu2204.docker | 5 + tests/lcitool/mappings.yml | 4 + tests/lcitool/refresh | 11 +- 35 files changed, 1166 insertions(+), 227 deletions(-) rename rust/{hw/char/pl011 => }/Cargo.lock (98%) create mode 100644 rust/Cargo.toml delete mode 100644 rust/qemu-api-macros/Cargo.lock delete mode 100644 rust/qemu-api/Cargo.lock create mode 100644 rust/qemu-api/src/c_str.rs create mode 100644 rust/qemu-api/src/offset_of.rs create mode 100644 rust/qemu-api/src/vmstate.rs create mode 100644 subprojects/packagefiles/bilge-impl-1.63.0.patch -- 2.47.0