From: Bruce Ashfield <bruce.ashfield@gmail.com>
To: kraghava@qti.qualcomm.com
Cc: meta-virtualization@lists.yoctoproject.org,
vkraleti@qti.qualcomm.com, anujmitt@qti.qualcomm.com,
sbanerje@qti.qualcomm.com
Subject: Re: [PATCH v5 1/2] crosvm: add recipe for ChromeOS Virtual Machine Monitor (VMM)
Date: Fri, 12 Jun 2026 12:31:55 -0700 (PDT) [thread overview]
Message-ID: <6a2c5eab.f14b93a6.79425.b27f@mx.google.com> (raw)
In-Reply-To: <20260527191012.1125228-2-kraghava@qti.qualcomm.com>
Hi Keerthivasan,
Inline review of 1/2. Same caveat as on the cover: if any of these are
already addressed in your v1 (which I can't see), please ignore and
let me know.
On Thu, May 28, 2026 at 00:40 +0530, Keerthivasan Raghavan wrote:
> crosvm is a lightweight, Rust-based virtual
> machine monitor originally developed for ChromeOS,
> and provides an alternative to traditional VMMs such
> as QEMU.
>
> Signed-off-by: Keerthivasan Raghavan <kraghava@qti.qualcomm.com>
> ---
> recipes-devtools/crosvm/crosvm-crates.inc | 966 ++++++++++++++++++++++
> recipes-devtools/crosvm/crosvm_0.1.0.bb | 57 ++
> 2 files changed, 1023 insertions(+)
> create mode 100644 recipes-devtools/crosvm/crosvm-crates.inc
> create mode 100644 recipes-devtools/crosvm/crosvm_0.1.0.bb
>
> diff --git a/recipes-devtools/crosvm/crosvm-crates.inc b/recipes-devtools/crosvm/crosvm-crates.inc
> [... 966 lines of autogenerated crates.inc elided ...]
> diff --git a/recipes-devtools/crosvm/crosvm_0.1.0.bb b/recipes-devtools/crosvm/crosvm_0.1.0.bb
> new file mode 100644
> index 00000000..00b492b0
> --- /dev/null
> +++ b/recipes-devtools/crosvm/crosvm_0.1.0.bb
> @@ -0,0 +1,57 @@
> +SUMMARY = "crosvm is a secure, lightweight, and performant Virtual Machine Monitor (VMM) written in Rust."
> +
> +DESCRIPTION = "\
> +crosvm is a Rust-based virtual machine monitor (VMM) originally developed \
> +for ChromeOS. It uses KVM acceleration and process-level isolation to run guest VMs \
> +with sandboxed device emulation.\
> +"
> +
> +HOMEPAGE = "https://github.com/google/crosvm"
> +
> +LICENSE = "BSD-3-Clause-Clear"
> +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause-Clear;md5=7a434440b651f4a472ca93716d01033a"
> +
> +inherit cargo pkgconfig cargo-update-recipe-crates features_check
> +
> +SRC_URI = " \
> + git://chromium.googlesource.com/crosvm/crosvm.git;branch=main;protocol=https;name=crosvm \
> + git://chromium.googlesource.com/chromiumos/platform/minijail;branch=main;protocol=https;name=minijail;destsuffix=${BB_GIT_DEFAULT_DESTSUFFIX}/third_party/minijail \
> +"
> +
> +SRCREV_crosvm = "b04c13a65b93034010b20612e3566d4f9d83c4f0"
> +SRCREV_minijail = "bfd22f25fd2302fe4ae5121d80c836e0f124e742"
> +
> +SRCREV_FORMAT = "crosvm_minijail"
> +
> +PV = "0.1.0+git"
> +
> +DEPENDS += "libcap wayland wayland-native protobuf-native wayland-protocols"
> +
> +REQUIRED_DISTRO_FEATURES = "kvm"
> +
> +COMPATIBLE_HOST = "(aarch64|x86_64).*-linux.*"
> +
> +BBCLASSEXTEND = "native"
> +
> +# cargo.bbclass adds SRC_URI entries with "name" and "destsuffix" to
> +# ${CARGO_HOME}/config.toml as Cargo patches. It uses the SRC_URI path as-is
> +# and does not account for "subdir".
> +# This can make Cargo try to build a directory that has no Cargo.toml. Remove
> +# the generated entry from ${CARGO_HOME}/config.toml. The crosvm Cargo.toml
> +# already points to the correct patch path relative to the source root.
> +do_filter_minijail_cargo_config() {
> +
> + cfg="${CARGO_HOME}/config.toml"
> +
> + if [ ! -f "$cfg" ]; then
> + bbwarn "Skipping missing Cargo config: $cfg"
> + exit 0
> + fi
> +
> + bbnote "Processing Cargo config: $cfg"
> + sed -i '/minijail/d' "$cfg"
> +}
> +
> +addtask filter_minijail_cargo_config after do_configure before do_compile
> +
> +require crosvm-crates.inc
A few things:
1. recipes-devtools/ vs recipes-extended/
The other VMMs in this layer (libvirt, xen, xen-tools) all live under
recipes-extended/. recipes-devtools/ in meta-virt is mostly go-mod
tooling (go, go-distribution, etc.). crosvm fits the VMM category, so
recipes-extended/crosvm/ would match convention better.
Not strictly blocking, but worth moving in v2 (or whatever the next
spin is called).
2. do_filter_minijail_cargo_config — root cause, please
The recipe carries this workaround:
> +do_filter_minijail_cargo_config() {
> + cfg="${CARGO_HOME}/config.toml"
> + if [ ! -f "$cfg" ]; then
> + bbwarn "Skipping missing Cargo config: $cfg"
> + exit 0
> + fi
> + bbnote "Processing Cargo config: $cfg"
> + sed -i '/minijail/d' "$cfg"
> +}
> +addtask filter_minijail_cargo_config after do_configure before do_compile
The comment says cargo.bbclass writes a [patches.crates-io] entry to
${CARGO_HOME}/config.toml using the SRC_URI path as-is, without
honouring the "subdir=" in your minijail SRC_URI entry. So cargo tries
to build a path that has no Cargo.toml and fails.
This concerns me because meta-virt has a number of other cargo
recipes — netavark, aardvark-dns, podlet, fuse-overlayfs — and none
of them carry an equivalent workaround. So either:
a) they all benefit from the same problem somehow (e.g. their
SRC_URI entries don't use subdir=), or
b) they do trigger the same cargo.bbclass behaviour but happen to
not break because their secondary repos do contain a Cargo.toml
at the SRC_URI root, or
c) cargo.bbclass has been fixed in oe-core master since this recipe
was written, and the workaround is now stale.
Could you dig into the root cause and confirm which of (a/b/c) applies?
If (c), we can just drop the workaround. If (a) or (b), the fix
probably belongs in cargo.bbclass upstream — and we'd carry a
documented local workaround until that lands, rather than a sed-script
postfunc with no commentary on why it's needed only for crosvm.
3. SRC_URI source
> + git://chromium.googlesource.com/crosvm/crosvm.git;branch=main;protocol=https;name=crosvm \
chromium.googlesource.com is the canonical source. The
github.com/google/crosvm mirror is typically more reliable from a
yocto build infrastructure standpoint (the chromium.org hosts have
periodically been touchy with cgit-style fetches for me in the past).
Did you consider the github mirror? If there's a reason chromium is
preferred (e.g. it gets fixes first, or has signed tags), worth a
one-line comment in the recipe.
4. PV = "0.1.0+git"
> +PV = "0.1.0+git"
crosvm doesn't tag releases, so "0.1.0" is arbitrary. That's fine —
we have precedent in the layer (kvmtool's PV is similarly cosmetic).
Just calling it out so we don't get bug reports asking why we're
shipping a "0.1.0" of a project that has never had a 1.0.
5. BBCLASSEXTEND = "native"
> +BBCLASSEXTEND = "native"
Per offline discussion with you previously, I understand this is for
a future "runqemu"-like runner that can boot a guest from a host
build. Nothing to do today; leave it.
Bruce
next prev parent reply other threads:[~2026-06-12 19:32 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260527191012.1125228-1-kraghava@qti.qualcomm.com>
2026-06-12 19:31 ` [PATCH v5 0/2] Add crosvm recipe to meta-virtualization Bruce Ashfield
[not found] ` <20260527191012.1125228-2-kraghava@qti.qualcomm.com>
2026-06-12 19:31 ` Bruce Ashfield [this message]
2026-06-13 6:01 ` [PATCH v5 1/2] crosvm: add recipe for ChromeOS Virtual Machine Monitor (VMM) Keerthivasan Raghavan
[not found] ` <20260527191012.1125228-3-kraghava@qti.qualcomm.com>
2026-06-12 19:31 ` [PATCH v5 2/2] crosvm-image-minimal: add a reference image for crosvm demo Bruce Ashfield
2026-06-13 5:59 ` [meta-virtualization] " Keerthivasan Raghavan
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=6a2c5eab.f14b93a6.79425.b27f@mx.google.com \
--to=bruce.ashfield@gmail.com \
--cc=anujmitt@qti.qualcomm.com \
--cc=kraghava@qti.qualcomm.com \
--cc=meta-virtualization@lists.yoctoproject.org \
--cc=sbanerje@qti.qualcomm.com \
--cc=vkraleti@qti.qualcomm.com \
/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