Changes from v3->v4: - Add rust-specific files to .gitattributes - Added help text to scripts/cargo_wrapper.py arguments (thanks Stephan) - Split bindings separate crate - Add declarative macros for symbols exported to QEMU to said crate - Lowered MSRV to 1.77.2 - Removed auto-download and install of bindgen-cli - Fixed re-compilation of Rust objects in case they are missing from filesystem - Fixed optimized builds by adding #[used] (thanks Pierrick for the help debugging this)
Also, Pierrick helped confirming it works on Windows with some windows-specific changes. I confirmed it works on macos by allowing bindgen to detect system paths for clang, which is a workaround and not a solution. However this series doesn't have the windows changes integrated. Changes from v2->v3: - Addressed minor mistakes (thanks Stefan) - Setup supported version checks for cargo, rustc and bindgen (thanks everyone who pointed it out / suggested it) - Fixed problem with bindgen failing if certain system headers where needed by defining an allowlist for headers instead of a blocklist for what we don't want (thanks Alex Bennée for reporting it) - Cleaned up bindgen target/dependendy definition in meson.build by removing unnecessary bits Changes from v1->v2: - Create bindgen target first, then add commit for device (thanks Pierrick) - Create a special named generated.rs for each target as compilation would fail if more than one targets were defined. The generated.rs target names would clash. - Add more descriptive commit messages - Update MAINTAINERS - Cleanup patch order for better review, hopefully Manos Pitsidianakis (7): build-sys: Add rust feature option rust: add bindgen step as a meson dependency rust: add crate to expose bindings and interfaces rust: add PL011 device model .gitattributes: add Rust diff and merge attributes DO NOT MERGE: add rustdoc build for gitlab pages DO NOT MERGE: replace TYPE_PL011 with x-pl011-rust in arm virt machine .gitattributes | 3 + .gitlab-ci.d/buildtest.yml | 64 +++- MAINTAINERS | 20 ++ configure | 11 + hw/arm/virt.c | 4 + meson.build | 72 ++++ meson_options.txt | 5 + rust/.cargo/config.toml | 2 + rust/.gitignore | 3 + rust/meson.build | 114 ++++++ rust/pl011/.gitignore | 2 + rust/pl011/Cargo.lock | 125 +++++++ rust/pl011/Cargo.toml | 67 ++++ rust/pl011/README.md | 31 ++ rust/pl011/deny.toml | 57 +++ rust/pl011/meson.build | 7 + rust/pl011/rustfmt.toml | 1 + rust/pl011/src/definitions.rs | 39 +++ rust/pl011/src/device.rs | 509 +++++++++++++++++++++++++++ rust/pl011/src/device_class.rs | 48 +++ rust/pl011/src/lib.rs | 556 ++++++++++++++++++++++++++++++ rust/pl011/src/memory_ops.rs | 45 +++ rust/qemu-api/.gitignore | 2 + rust/qemu-api/Cargo.lock | 7 + rust/qemu-api/Cargo.toml | 59 ++++ rust/qemu-api/README.md | 17 + rust/qemu-api/build.rs | 48 +++ rust/qemu-api/deny.toml | 57 +++ rust/qemu-api/meson.build | 0 rust/qemu-api/rustfmt.toml | 1 + rust/qemu-api/src/bindings.rs | 8 + rust/qemu-api/src/definitions.rs | 112 ++++++ rust/qemu-api/src/device_class.rs | 131 +++++++ rust/qemu-api/src/lib.rs | 29 ++ rust/qemu-api/src/tests.rs | 48 +++ rust/rustfmt.toml | 7 + rust/wrapper.h | 39 +++ scripts/cargo_wrapper.py | 288 ++++++++++++++++ scripts/meson-buildoptions.sh | 6 + 39 files changed, 2625 insertions(+), 19 deletions(-) create mode 100644 rust/.cargo/config.toml create mode 100644 rust/.gitignore create mode 100644 rust/meson.build create mode 100644 rust/pl011/.gitignore create mode 100644 rust/pl011/Cargo.lock create mode 100644 rust/pl011/Cargo.toml create mode 100644 rust/pl011/README.md create mode 100644 rust/pl011/deny.toml create mode 100644 rust/pl011/meson.build create mode 120000 rust/pl011/rustfmt.toml create mode 100644 rust/pl011/src/definitions.rs create mode 100644 rust/pl011/src/device.rs create mode 100644 rust/pl011/src/device_class.rs create mode 100644 rust/pl011/src/lib.rs create mode 100644 rust/pl011/src/memory_ops.rs create mode 100644 rust/qemu-api/.gitignore create mode 100644 rust/qemu-api/Cargo.lock create mode 100644 rust/qemu-api/Cargo.toml create mode 100644 rust/qemu-api/README.md create mode 100644 rust/qemu-api/build.rs create mode 100644 rust/qemu-api/deny.toml create mode 100644 rust/qemu-api/meson.build create mode 120000 rust/qemu-api/rustfmt.toml create mode 100644 rust/qemu-api/src/bindings.rs create mode 100644 rust/qemu-api/src/definitions.rs create mode 100644 rust/qemu-api/src/device_class.rs create mode 100644 rust/qemu-api/src/lib.rs create mode 100644 rust/qemu-api/src/tests.rs create mode 100644 rust/rustfmt.toml create mode 100644 rust/wrapper.h create mode 100644 scripts/cargo_wrapper.py base-commit: 7914bda497f07965f15a91905cd7ed9eaf1c1092 -- γαῖα πυρί μιχθήτω