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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.