On 10/7/2024 2:15 PM, Paolo Bonzini wrote:


Il lun 7 ott 2024, 19:56 Brian Cain <quic_bc...@quicinc.com> ha scritto:


    On 10/7/2024 6:03 AM, Paolo Bonzini wrote:
    > The following changes since commit
    b5ab62b3c0050612c7f9b0b4baeb44ebab42775a:
    >
    >    Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu
    into staging (2024-10-04 19:28:37 +0100)
    >
    > are available in the Git repository at:
    >
    > https://gitlab.com/bonzini/qemu.git tags/for-upstream
    >
    > for you to fetch changes up to
    dec4b629fc17fedcd2172066071f99ec8dcc8d8d:
    >
    >    meson: ensure -mcx16 is passed when detecting ATOMIC128
    (2024-10-07 13:01:06 +0200)
    >
    > ----------------------------------------------------------------
    > * first commit for Rust support

    Aside: Paolo, thanks for your work here!


Thanks to Manos, I am just the shepherd. :)

    So far I think the focus for Rust support has been on device
    models.  But is there any interest in
    being able to write TCG plugins in Rust


Is there a good degree of ABI compatibility across QEMU versions? If so, plugins are external shared libraries and therefore they could be built (with Cargo) independent of any QEMU code.

I am not involved in plugins work, so I am not the best person to answer!


After watching the recording of Alex's KVM Forum presentation on the plugins, he's answered my question -- he described the rust bindings specifically as "...might require us to be a little bit more formal about specifying a proper API..." -- so maybe not a top priority for now.



Paolo



    This project https://github.com/novafacing/qemu-rs seems to
    explore this
    space - maybe it would be good to incorporate something like this
    inside
    of QEMU?

    > * fix detection of ATOMIC128 on x86_64
    >
    > ----------------------------------------------------------------
    > Manos Pitsidianakis (7):
    >        build-sys: Add rust feature option
    >        rust: add bindgen step as a meson dependency
    >        .gitattributes: add Rust diff and merge attributes
    >        meson.build: add HAVE_GLIB_WITH_ALIGNED_ALLOC flag
    >        rust: add crate to expose bindings and interfaces
    >        rust: add utility procedural macro crate
    >        rust: add PL011 device model
    >
    > Paolo Bonzini (4):
    >        Require meson version 1.5.0
    >        configure, meson: detect Rust toolchain
    >        meson: define qemu_isa_flags
    >        meson: ensure -mcx16 is passed when detecting ATOMIC128
    >
    > Pierrick Bouvier (1):
    >        meson: fix machine option for x86_version
    >
    >   MAINTAINERS |  21 +
    >   configure | 170 +++++-
    >   meson.build | 158 +++++-
    >   rust/wrapper.h  |  47 ++
    >   .gitattributes  |   3 +
    >   Kconfig |   1 +
    >   Kconfig.host  |   3 +
    >   hw/arm/Kconfig  |  30 +-
    >   meson_options.txt |   3 +
    >   python/scripts/vendor.py  |   4 +-
    >   python/wheels/meson-1.2.3-py3-none-any.whl  | Bin 964928 -> 0
    bytes
    >   python/wheels/meson-1.5.0-py3-none-any.whl  | Bin 0 -> 959846
    bytes
    >   pythondeps.toml |   2 +-
    >   rust/.gitignore |   3 +
    >   rust/Kconfig  |   1 +
    >   rust/hw/Kconfig |   2 +
    >   rust/hw/char/Kconfig  |   3 +
    >   rust/hw/char/meson.build  |   1 +
    >   rust/hw/char/pl011/.gitignore |   2 +
    >   rust/hw/char/pl011/Cargo.lock | 134 +++++
    >   rust/hw/char/pl011/Cargo.toml |  26 +
    >   rust/hw/char/pl011/README.md  |  31 ++
    >   rust/hw/char/pl011/meson.build  |  26 +
    >   rust/hw/char/pl011/src/device.rs <http://device.rs>           
           | 599 +++++++++++++++++++++
    >   rust/hw/char/pl011/src/device_class.rs
    <http://device_class.rs>  |  70 +++
    >   rust/hw/char/pl011/src/lib.rs <http://lib.rs>                 
        | 586 ++++++++++++++++++++
    >   rust/hw/char/pl011/src/memory_ops.rs <http://memory_ops.rs>  
               |  59 ++
    >   rust/hw/meson.build |   1 +
    >   rust/meson.build  |   4 +
    >   rust/qemu-api-macros/Cargo.lock |  47 ++
    >   rust/qemu-api-macros/Cargo.toml |  25 +
    >   rust/qemu-api-macros/README.md  |   1 +
    >   rust/qemu-api-macros/meson.build  |  25 +
    >   rust/qemu-api-macros/src/lib.rs <http://lib.rs>               
        | 43 ++
    >   rust/qemu-api/.gitignore  |   2 +
    >   rust/qemu-api/Cargo.lock  |   7 +
    >   rust/qemu-api/Cargo.toml  |  26 +
    >   rust/qemu-api/README.md |  17 +
    >   rust/qemu-api/build.rs <http://build.rs>        |  14 +
    >   rust/qemu-api/meson.build |  24 +
    >   rust/qemu-api/src/definitions.rs <http://definitions.rs>    | 
    97 ++++
    >   rust/qemu-api/src/device_class.rs <http://device_class.rs>    
    | 128 +++++
    >   rust/qemu-api/src/lib.rs <http://lib.rs>    | 166 ++++++
    >   rust/qemu-api/src/tests.rs <http://tests.rs>    |  49 ++
    >   rust/rustfmt.toml |   7 +
    >   scripts/archive-source.sh |   6 +-
    >   scripts/make-release  |   5 +-
    >   scripts/meson-buildoptions.sh |   3 +
    >   scripts/rust/rust_root_crate.sh |  13 +
    >   scripts/rust/rustc_args.py  |  84 +++
    >   subprojects/.gitignore  |  11 +
    >   subprojects/arbitrary-int-1-rs.wrap |   7 +
    >   subprojects/bilge-0.2-rs.wrap |   7 +
    >   subprojects/bilge-impl-0.2-rs.wrap  |   7 +
    >   subprojects/either-1-rs.wrap  |   7 +
    >   subprojects/itertools-0.11-rs.wrap  |   7 +
    >   .../packagefiles/arbitrary-int-1-rs/meson.build |  19 +
    >   subprojects/packagefiles/bilge-0.2-rs/meson.build |  29 +
    >   .../packagefiles/bilge-impl-0.2-rs/meson.build  |  45 ++
    >   subprojects/packagefiles/either-1-rs/meson.build  |  24 +
    >   .../packagefiles/itertools-0.11-rs/meson.build  |  30 ++
    >   .../packagefiles/proc-macro-error-1-rs/meson.build |  40 ++
    >   .../proc-macro-error-attr-1-rs/meson.build  |  32 ++
    >   .../packagefiles/proc-macro2-1-rs/meson.build |  31 ++
    >   subprojects/packagefiles/quote-1-rs/meson.build |  29 +
    >   subprojects/packagefiles/syn-2-rs/meson.build |  40 ++
    >   .../packagefiles/unicode-ident-1-rs/meson.build |  20 +
    >   subprojects/proc-macro-error-1-rs.wrap  |   7 +
    >   subprojects/proc-macro-error-attr-1-rs.wrap |   7 +
    >   subprojects/proc-macro2-1-rs.wrap |   7 +
    >   subprojects/quote-1-rs.wrap |   7 +
    >   subprojects/syn-2-rs.wrap |   7 +
    >   subprojects/unicode-ident-1-rs.wrap |   7 +
    >   subprojects/unicode-ident-1-rs/meson.build  |  20 +
    >   tests/lcitool/mappings.yml  |   2 +-
    >   75 files changed, 3194 insertions(+), 34 deletions(-)
    >   create mode 100644 rust/wrapper.h
    >   delete mode 100644 python/wheels/meson-1.2.3-py3-none-any.whl
    >   create mode 100644 python/wheels/meson-1.5.0-py3-none-any.whl
    >   create mode 100644 rust/.gitignore
    >   create mode 100644 rust/Kconfig
    >   create mode 100644 rust/hw/Kconfig
    >   create mode 100644 rust/hw/char/Kconfig
    >   create mode 100644 rust/hw/char/meson.build
    >   create mode 100644 rust/hw/char/pl011/.gitignore
    >   create mode 100644 rust/hw/char/pl011/Cargo.lock
    >   create mode 100644 rust/hw/char/pl011/Cargo.toml
    >   create mode 100644 rust/hw/char/pl011/README.md
    >   create mode 100644 rust/hw/char/pl011/meson.build
    >   create mode 100644 rust/hw/char/pl011/src/device.rs
    <http://device.rs>
    >   create mode 100644 rust/hw/char/pl011/src/device_class.rs
    <http://device_class.rs>
    >   create mode 100644 rust/hw/char/pl011/src/lib.rs <http://lib.rs>
    >   create mode 100644 rust/hw/char/pl011/src/memory_ops.rs
    <http://memory_ops.rs>
    >   create mode 100644 rust/hw/meson.build
    >   create mode 100644 rust/meson.build
    >   create mode 100644 rust/qemu-api-macros/Cargo.lock
    >   create mode 100644 rust/qemu-api-macros/Cargo.toml
    >   create mode 100644 rust/qemu-api-macros/README.md
    >   create mode 100644 rust/qemu-api-macros/meson.build
    >   create mode 100644 rust/qemu-api-macros/src/lib.rs <http://lib.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 <http://build.rs>
    >   create mode 100644 rust/qemu-api/meson.build
    >   create mode 100644 rust/qemu-api/src/definitions.rs
    <http://definitions.rs>
    >   create mode 100644 rust/qemu-api/src/device_class.rs
    <http://device_class.rs>
    >   create mode 100644 rust/qemu-api/src/lib.rs <http://lib.rs>
    >   create mode 100644 rust/qemu-api/src/tests.rs <http://tests.rs>
    >   create mode 100644 rust/rustfmt.toml
    >   create mode 100755 scripts/rust/rust_root_crate.sh
    >   create mode 100644 scripts/rust/rustc_args.py
    >   create mode 100644 subprojects/arbitrary-int-1-rs.wrap
    >   create mode 100644 subprojects/bilge-0.2-rs.wrap
    >   create mode 100644 subprojects/bilge-impl-0.2-rs.wrap
    >   create mode 100644 subprojects/either-1-rs.wrap
    >   create mode 100644 subprojects/itertools-0.11-rs.wrap
    >   create mode 100644
    subprojects/packagefiles/arbitrary-int-1-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/bilge-0.2-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/bilge-impl-0.2-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/either-1-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/itertools-0.11-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/proc-macro-error-1-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/proc-macro-error-attr-1-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/proc-macro2-1-rs/meson.build
    >   create mode 100644 subprojects/packagefiles/quote-1-rs/meson.build
    >   create mode 100644 subprojects/packagefiles/syn-2-rs/meson.build
    >   create mode 100644
    subprojects/packagefiles/unicode-ident-1-rs/meson.build
    >   create mode 100644 subprojects/proc-macro-error-1-rs.wrap
    >   create mode 100644 subprojects/proc-macro-error-attr-1-rs.wrap
    >   create mode 100644 subprojects/proc-macro2-1-rs.wrap
    >   create mode 100644 subprojects/quote-1-rs.wrap
    >   create mode 100644 subprojects/syn-2-rs.wrap
    >   create mode 100644 subprojects/unicode-ident-1-rs.wrap
    >   create mode 100644 subprojects/unicode-ident-1-rs/meson.build

Reply via email to