On Wed Aug 16, 2023 at 4:19 PM CEST, Bruce Ashfield wrote:
> On Wed, Aug 16, 2023 at 10:14 AM Erik Schilling
> <[email protected]> wrote:
> >
> > On Wed Aug 16, 2023 at 3:34 PM CEST, Bruce Ashfield wrote:
> > > On Wed, Aug 16, 2023 at 4:32 AM Erik Schilling
> > > <[email protected]> wrote:
> > > >
> > > > On Wed Aug 16, 2023 at 10:11 AM CEST, Mikko Rapeli wrote:
> > > > > Hi,
> > > > >
> > > > > On Mon, Aug 14, 2023 at 10:04:06AM +0200, Erik Schilling wrote:
> > > > > > This adds recipes for the first tagged release of the vhost-device
> > > > > > daemons of the rust-vmm project.
> > > > > >
> > > > > > While the initial release was done for all daemons at the same time,
> > > > > > the daemons all have indepentend version numbers and will be 
> > > > > > released
> > > > > > on their own schedules in the future. Therefore, I splitted them 
> > > > > > into
> > > > > > independent recipes.
> > > > > >
> > > > > > Signed-off-by: Erik Schilling <[email protected]>
> > > > > > ---
> > > > > > These are a bunch of daemons that implement various vhost-user 
> > > > > > virtio
> > > > > > devices. Currently, they are mostly tested with QEMU, but we are 
> > > > > > also
> > > > > > working on Xen support (most bits are upstream already).
> > > > > > ---
> > > > > > Changes in v2:
> > > > > > - Added README.md to explain generation of dependency .inc files
> > > > > > - Link to v1: 
> > > > > > https://lore.kernel.org/r/[email protected]
> > > > > > ---
> > > > > >  README.md                                          |  14 ++
> > > > > >  .../vhost-device/vhost-device-gpio-crates.inc      | 184 
> > > > > > +++++++++++++++
> > > > > >  .../vhost-device/vhost-device-gpio_0.1.0.bb        |  20 ++
> > > > > >  .../vhost-device/vhost-device-i2c-crates.inc       | 126 ++++++++++
> > > > > >  .../vhost-device/vhost-device-i2c_0.1.0.bb         |  16 ++
> > > > > >  .../vhost-device/vhost-device-rng-crates.inc       | 158 
> > > > > > +++++++++++++
> > > > > >  .../vhost-device/vhost-device-rng_0.1.0.bb         |  17 ++
> > > > > >  .../vhost-device/vhost-device-scsi-crates.inc      | 166 
> > > > > > +++++++++++++
> > > > > >  .../vhost-device/vhost-device-scsi_0.1.0.bb        |  16 ++
> > > > > >  .../vhost-device/vhost-device-vsock-crates.inc     | 258 
> > > > > > +++++++++++++++++++++
> > > > > >  .../vhost-device/vhost-device-vsock_0.1.0.bb       |  16 ++
> > > > > >  11 files changed, 991 insertions(+)
> > > > > <snip>
> > > > > > +++ b/recipes-extended/vhost-device/vhost-device-gpio_0.1.0.bb
> > > > > > @@ -0,0 +1,20 @@
> > > > > > +SUMMARY = "vhost gpio backend device"
> > > > > > +DESCRIPTION = "A vhost-user backend that emulates a VirtIO GPIO 
> > > > > > device"
> > > > > > +HOMEPAGE = "https://github.com/rust-vmm/vhost-device";
> > > > > > +LICENSE = "Apache-2.0 | BSD-3-Clause"
> > > > > > +LIC_FILES_CHKSUM = "\
> > > > > > +    file://LICENSE-APACHE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
> > > > > > +    
> > > > > > file://LICENSE-BSD-3-Clause;md5=2489db1359f496fff34bd393df63947e \
> > > > > > +"
> > > > > > +DEPENDS += "libgpiod"
> > > > > > +# libgpiod-sys generates bindings using bindgen, which depends on 
> > > > > > clang
> > > > > > +DEPENDS += "clang-native"
> > > > >
> > > > > As Richard mentioned on #yocto, this recipe adds a new layer 
> > > > > dependency from
> > > > > meta-virtualization to meta-clang. This could be documented and test 
> > > > > build jobs
> > > > > changed to include meta-clang, or these recipes could be moved to 
> > > > > build conditionally
> > > > > only when meta-clang is available by moving the recipes to directory
> > > > > dynamic-layers/meta-clang/recipes-extended
> > > > >
> > > > > https://autobuilder.yoctoproject.org/typhoon/#/builders/121/builds/1528/steps/23/logs/stdio
> > > >
> > > > Hm... I guess moving vhost-device-gpio to dynamic-layers/ is the least
> > > > invasive option?
> > > >
> > > > @Bruce: Which option do you prefer? I can draft a patch.
> > >
> > > Definitely not a dynamic layer :)
> > >
> > > Can you expand on the dependency a bit more for me ? I find it odd that 
> > > libgpiod
> > > is in meta-oe, but there's no mention (that I can see) about any clang
> > > dependencies.
> > >
> > > I know very little about the way rust is stitching the bits together.
> > >
> > > Should libgpod really be in the DEPENDS ? Is libgpiod-sys a clang thing ? 
> > > And
> > > libgpiod is somehow conditionally using it ?
> >
> > Yeah, this is a bit confusing...
> >
> > Here is a (hopefully) better attempt at explaining what is going on:
> >
> > vhost-device-gpio depends on libgpiod (the Rust crate, not the C lib).
> > which in its turn depends on libgpiod-sys - a helper crate that provides
> > binding to the libgpiod (C) lib.
> >
> > Now, libgpiod-sys does not really consist of any _real_ code. Instead,
> > it is a recipe to generate the bindings at build time. This happens
> > by reading the pkg-config info from libgpiod (the C lib), parsing the
> > headers and linking to it.
> >
> > So: libgpiod (the C lib) - as it is in meta-oe - does not depend on
> > clang-native, only libgpiod-sys (the Rust lib) does.
> >
> > The final result is two dependencies being required for building
> > libgpiod-sys: libclang (for bindgen) and libgpiod (the C lib) (for
> > pkg-config, the headers and linking).
> >
> > In Rust - in contrast to how C libs are typically packaged - libgpiod
> > (the Rust lib) and libgpiod-sys (Rust lib again) are built and linked
> > into vhost-device-gpio all during the build of this recipe. So the
> > dependencies are required here.
> >
> > The final result is:
> >
> > ┌──────────────────────────────────────┐
> > │          vhost-device-gpio           │
> > │                                      │
> > │ libgpiod (Rust), libgpiod-sys (Rust) │ ─────────────►  libgpiod (C)
> > │           (static linking)           │ (dynamic link)      ▲
> > └──────────────────────────────────────┘                     │
> >                    ▲                           the usual libgpiod recipe
> >                    │
> >    this is the build result of this recipe
> >
>
> Aha. Yes, I see why my dependency investigation got tangled up
> in the "normal" libgpiod in meta-openembedded.
>
> >
> > Overall, the generation of bindings at build time is fairly common in
> > the Rust ecosystem. parsec in meta-security, for example, also does the
> > same thing. There the situation seems to be solved by putting parsec
> > into it's own layer within the meta-security repo.
>
> Layers with a single or few recipes are a pet peeve of mine :)
>
> >
> > > Either way, we used to do this same dance with meta-security, and we did 
> > > that
> > > via SKIP_RECIPE. So that's how I'd solve this. But obviously none of the 
> > > core
> > > packagesgroups, etc,  in meta-virt can have the vhost* packages if that 
> > > is the
> > > case. Barring that, we add the dependency, if it becomes a widespread use 
> > > case,
> > > it'll end up in core anyway.
> >
> > This would require users of the layer to undo the SKIP_RECIPE? Or am I
> > misunderstanding what you mean? Just trying to understand the proposal,
> > I got no opinions on the best solution to resolve this. I am happy with
> > what seems best for the greater world.
>
> It is similar to a layer, but it keeps everything centralized. It'll
> automatically
> be undone if meta-clang is available (with the appropriate changes of
> course).
>
> We used to have this for selinux and security:
>
> SKIP_RECIPE[cri-o] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS',
> 'security', bb.utils.contains('BBFILE_COLLECTIONS', 'selinux', '',
> 'Depends on libselinux from meta-selinux which is not included', d),
> 'Depends on libseccomp from meta-security which is not included', d)}"
>
> SKIP_RECIPE[cri-o] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS',
> 'selinux', '', 'Depends on libselinux from meta-selinux which is not
> included', d)}"

Ah. Did not know this works within a recipe! Patch posted:

https://lore.kernel.org/r/[email protected]

Thanks!

- Erik

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#8204): 
https://lists.yoctoproject.org/g/meta-virtualization/message/8204
Mute This Topic: https://lists.yoctoproject.org/mt/100732863/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/meta-virtualization/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to