From: Paolo Bonzini <pbonzini@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: qemu-block@nongnu.org, hreitz@redhat.com,
manos.pitsidianakis@linaro.org, qemu-devel@nongnu.org,
qemu-rust@nongnu.org
Subject: Re: [PATCH 01/11] rust: Build separate qemu_api_tools and qemu_api_system
Date: Wed, 12 Feb 2025 17:59:54 +0100 [thread overview]
Message-ID: <99cf772e-984f-4b39-841a-522d9191d5e6@redhat.com> (raw)
In-Reply-To: <Z6y-bBK4ZAAcPhFm@redhat.com>
On 2/12/25 16:29, Kevin Wolf wrote:
> Am 12.02.2025 um 11:01 hat Paolo Bonzini geschrieben:
>> On 2/11/25 22:43, Kevin Wolf wrote:
>>> The existing qemu_api library can't be linked into tools because it
>>> contains a few bindings for things that only exist in the system
>>> emulator.
>>>
>>> This adds a new "system" feature to the qemu_api crate that enables the
>>> system emulator parts in it, and build the crate twice: qemu_api_tools
>>> is the core library that can be linked into tools, and qemu_api_system
>>> is the full one for the system emulator.
>>
>> As discussed on IRC, the issue here is ClassInitImpl<>, which has to be
>> defined in the same crate for qemu_api::qom and qemu_api::qdev.
>>
>> Right now, the block layer has no use for QOM, but later it will (for secret
>> management, for example), so splitting QOM into a separate crate does not
>> work long term.
>>
>> I'll try to figure out an alternative way to do the class_init bindings.
>
> There were more problems with splitting the qemu_api crate related to
> bindgen. Basically, you would want the system emulator bindings to
> contain only those things that aren't already part of the common
> bindings. But the system emulator headers will obviously include common
> headers, too, so this becomes tricky.
>
> If you don't do this, you get two bindings for the same type, but the
> binding types won't be compatible with each other etc.
That might be a good reason to move the bindings to their own crate.
Then you don't really care if the bindings crate has declarations for
things that are only for system emulation, because they're just externs.
qemu_api is currently doing "impl Foo" directly on structs defined by
bindgen, but that can/should be changed. This way a PhantomPinned field
can be added, they can be wrapped with UnsafeCell<>, etc. I need to
understand better what Linux does[1] and document it.
Anyhow this is not a blocker, this patch is easily reverted.
> This approach of just building two separate libraries was a lot easier.
> Apart from the obvious inefficiency, I just hate the need for
> rust_dependency_map everywhere to make the library show up with the
> neutral 'qemu_api' name in both cases. Maybe there is a better approach
> where this could be defined for the library itself rather than for each
> user, but I couldn't find one. meson is still black magic to me.
Yeah that's ugly. There's no way to define it for the library indeed.
I'd like to have split crates because for example we're now building the
QOM and block layer code twice as well. Ideally, I'd like to have
crates roughly matching the C static_libraries, so for example utils,
bindings, block, chardev, hw, etc.
Paolo
[1] https://rust-for-linux.github.io/docs/kernel/struct.Opaque.html
next prev parent reply other threads:[~2025-02-12 17:00 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-11 21:43 [PATCH 00/11] rust/block: Add minimal block driver bindings Kevin Wolf
2025-02-11 21:43 ` [PATCH 01/11] rust: Build separate qemu_api_tools and qemu_api_system Kevin Wolf
2025-02-12 10:01 ` Paolo Bonzini
2025-02-12 15:29 ` Kevin Wolf
2025-02-12 16:59 ` Paolo Bonzini [this message]
2025-02-11 21:43 ` [PATCH 02/11] meson: Add rust_block_ss and link tools with it Kevin Wolf
2025-02-12 7:38 ` Philippe Mathieu-Daudé
2025-02-11 21:43 ` [PATCH 03/11] rust: Add some block layer bindings Kevin Wolf
2025-02-12 9:29 ` Paolo Bonzini
2025-02-12 13:13 ` Kevin Wolf
2025-02-12 13:47 ` Paolo Bonzini
2025-02-12 15:13 ` Kevin Wolf
2025-02-12 17:16 ` Paolo Bonzini
2025-02-12 19:52 ` Kevin Wolf
2025-02-13 11:06 ` Paolo Bonzini
2025-02-11 21:43 ` [PATCH 04/11] rust/qemu-api: Add wrappers to run futures in QEMU Kevin Wolf
2025-02-12 9:28 ` Paolo Bonzini
2025-02-12 12:47 ` Kevin Wolf
2025-02-12 13:22 ` Paolo Bonzini
2025-02-18 17:25 ` Kevin Wolf
2025-02-11 21:43 ` [PATCH 05/11] rust/block: Add empty crate Kevin Wolf
2025-02-11 21:43 ` [PATCH 06/11] rust/block: Add I/O buffer traits Kevin Wolf
2025-02-12 16:48 ` Paolo Bonzini
2025-02-12 17:22 ` Kevin Wolf
2025-02-12 17:41 ` Paolo Bonzini
2025-02-11 21:43 ` [PATCH 07/11] block: Add bdrv_open_blockdev_ref_file() Kevin Wolf
2025-02-12 7:43 ` Philippe Mathieu-Daudé
2025-02-11 21:43 ` [PATCH 08/11] rust/block: Add driver module Kevin Wolf
2025-02-12 16:43 ` Paolo Bonzini
2025-02-12 17:32 ` Kevin Wolf
2025-02-12 18:17 ` Paolo Bonzini
2025-02-11 21:43 ` [PATCH 09/11] rust/block: Add read support for block drivers Kevin Wolf
2025-02-12 15:05 ` Paolo Bonzini
2025-02-12 20:52 ` Kevin Wolf
2025-02-11 21:43 ` [PATCH 10/11] bochs-rs: Add bochs block driver reimplementation in Rust Kevin Wolf
2025-02-12 7:45 ` Philippe Mathieu-Daudé
2025-02-12 12:59 ` Kevin Wolf
2025-02-12 13:52 ` Philippe Mathieu-Daudé
2025-02-12 9:14 ` Daniel P. Berrangé
2025-02-12 9:41 ` Daniel P. Berrangé
2025-02-12 12:58 ` Kevin Wolf
2025-02-12 13:07 ` Daniel P. Berrangé
2025-02-11 21:43 ` [PATCH 11/11] rust/block: Add format probing Kevin Wolf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=99cf772e-984f-4b39-841a-522d9191d5e6@redhat.com \
--to=pbonzini@redhat.com \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=manos.pitsidianakis@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-rust@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).