From: Hemanth.KumarMD@windriver.com
To: openembedded-core@lists.openembedded.org
Cc: Randy.MacLeod@windriver.com, Sundeep.Kokkonda@windriver.com,
Hemanth.KumarMD@windriver.com
Subject: [PATCH v2] sanity.bbclass: warn on cargo config files outside the build tree
Date: Wed, 24 Jun 2026 23:52:13 -0700 [thread overview]
Message-ID: <20260625065213.2634586-1-Hemanth.KumarMD@windriver.com> (raw)
From: Hemanth Kumar M D <Hemanth.KumarMD@windriver.com>
Cargo walks from CWD up to the filesystem root merging every
.cargo/config[.toml] it finds. Any such file above BASE_WORKDIR is
silently picked up and can override Yocto's linker, registry or
compiler settings, leading to build failures.
Until cargo provides a proper fix upstream, add a warning so users
get a clear diagnostic instead of a build error.
Upstream meta-issue: https://github.com/rust-lang/cargo/issues/9769
[YOCTO #15637]
Signed-off-by: Hemanth Kumar M D <Hemanth.KumarMD@windriver.com>
---
meta/classes-global/sanity.bbclass | 33 ++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/meta/classes-global/sanity.bbclass b/meta/classes-global/sanity.bbclass
index bdfa7f059d..5c5cf311da 100644
--- a/meta/classes-global/sanity.bbclass
+++ b/meta/classes-global/sanity.bbclass
@@ -854,6 +854,38 @@ def sanity_check_locale(d):
except locale.Error:
raise_sanity_error("Your system needs to support the en_US.UTF-8 locale.", d)
+def check_cargo_config(d):
+ # Cargo merges .cargo/config[.toml] from every directory between CWD and
+ # the filesystem root. Warn for anything found in ancestor directories
+ # above BASE_WORKDIR that Cargo would pick up silently.
+ import os
+
+ base_workdir = d.getVar('BASE_WORKDIR')
+ ancestor = os.path.dirname(base_workdir)
+ found = []
+ last_ancestor = None
+ while True:
+ for name in ('config', 'config.toml'):
+ cfg = os.path.join(ancestor, '.cargo', name)
+ if os.path.exists(cfg):
+ found.append(cfg)
+ last_ancestor = ancestor
+ break
+ parent = os.path.dirname(ancestor)
+ if parent == ancestor:
+ break
+ ancestor = parent
+
+ if found:
+ bb.warn("Cargo config file(s) found at %s which is/are outside the build "
+ "directory. Cargo will silently apply their settings during the "
+ "rust/cargo build and can override Yocto's settings like linker, "
+ "registry or compiler settings causing build failures. You can "
+ "either remove these file(s) or move your build directory outside "
+ "of %s to fix this. "
+ "See https://bugzilla.yoctoproject.org/show_bug.cgi?id=15637 for more details."
+ % (', '.join(found), last_ancestor))
+
def check_sanity_everybuild(status, d):
import os, stat
# Sanity tests which test the users environment so need to run at each build (or are so cheap
@@ -873,6 +905,7 @@ def check_sanity_everybuild(status, d):
status.addresult('Bitbake version %s is required and version %s was found\n' % (minversion, bb.__version__))
sanity_check_locale(d)
+ check_cargo_config(d)
paths = d.getVar('PATH').split(":")
if "." in paths or "./" in paths or "" in paths:
--
2.49.0
reply other threads:[~2026-06-25 6:52 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20260625065213.2634586-1-Hemanth.KumarMD@windriver.com \
--to=hemanth.kumarmd@windriver.com \
--cc=Randy.MacLeod@windriver.com \
--cc=Sundeep.Kokkonda@windriver.com \
--cc=openembedded-core@lists.openembedded.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 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.