Alex Bennée <alex.ben...@linaro.org> writes: > Manos Pitsidianakis <manos.pitsidiana...@linaro.org> writes: > >> Add mechanism to generate rust hw targets that depend on a custom >> bindgen target for rust bindings to C. >> >> This way bindings will be created before the rust crate is compiled. >> >> The bindings will end up in BUILDDIR/{target}-generated.rs and have the same >> name >> as a target: >> >> ninja aarch64-softmmu-generated.rs >> >> The way the bindings are generated is: >> >> 1. All required C headers are included in a single file, in our case >> rust/wrapper.h for convenience. Otherwise we'd have to provide a list >> of headers every time to the bindgen tool. >> >> 2. Meson creates a generated_rs target that runs bindgen making sure >> the architecture etc header dependencies are present. >> >> 3. The generated_rs target takes a list of files, type symbols, >> function symbols to block from being generated. This is not necessary >> for the bindings to work, but saves us time and space. >> >> 4. Meson creates rust hardware target dependencies from the rust_targets >> dictionary defined in rust/meson.build. >> >> Since we cannot declare a dependency on generated_rs before it is >> declared in meson.build, the rust crate targets must be defined after >> the generated_rs target for each target architecture is defined. This >> way meson sets up the dependency tree properly. >> >> 5. After compiling each rust crate with the cargo_wrapper.py script, >> its static library artifact is linked as a `whole-archive` with the >> final binary. >> >> Signed-off-by: Manos Pitsidianakis <manos.pitsidiana...@linaro.org> > <snip> >> + >> +msrv = { >> + 'rustc': '1.77.2', >> + 'cargo': '1.77.2', >> + 'bindgen': '0.69.4', >> +} > > This is still pretty bleeding edge (it even tripped up on the > .cargo/bin/cargo I have installed). This needs to be set to the > baseline which from: > > https://wiki.qemu.org/RustInQemu/2022 > > Looks to be 1.24.0 for rustc and I guess even lower for cargo (Debian > says 0.66.0). While it might make sense to delay merging if we are > waiting for one distro to produce a new LTS we shouldn't be needing > rustup by default.
Also bindgen, do we need such a new one? On Trixie: Message: ../../rust/meson.build:41:4: ERROR: Problem encountered: bindgen version 0.66.1 is unsupported: Please upgrade to at least 0.69.4 A full log can be found at /home/alex/lsrc/qemu.git/builds/rust/meson-logs/meson-log.txt ERROR: meson setup failed -- Alex Bennée Virtualisation Tech Lead @ Linaro