Openembedded Core Discussions
 help / color / mirror / Atom feed
From: sunilkumar.dora@windriver.com
To: openembedded-core@lists.openembedded.org
Cc: richard.purdie@linuxfoundation.org, liezhi.yang@windriver.com,
	sundeep.kokkonda@windriver.com, Randy.MacLeod@windriver.com
Subject: [PATCH] pseudo: Tell makewrappers the target architecture
Date: Thu, 29 Oct 2026 07:13:25 -0700	[thread overview]
Message-ID: <20261029141325.356259-1-sunilkumar.dora@windriver.com> (raw)

From: Sunil Dora <sunilkumar.dora@windriver.com>

makewrappers chooses the architecture specific entries in wrapfuncs.in
(e.g. the GLIBC_2.17 symbol versions for the xattr wrappers on aarch64)
based on platform.machine(), i.e. the machine running the build rather
than the machine pseudo is being built for. The result is that pseudo
built for qemux86-64 on an aarch64 autobuilder worker ends up with
GLIBC_2.17 instead of GLIBC_2.3 and the pseudo packages aren't
reproducible between the x86_64 and aarch64 workers.

Add the upstream patch which allows MAKEWRAPPERS_ARCH to override this
and set it to TARGET_ARCH. pseudo-native is unaffected since TARGET_ARCH
is BUILD_ARCH there.

[YOCTO #16376]

Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
---
 ...ow-the-wrapper-architecture-to-be-se.patch | 88 +++++++++++++++++++
 meta/recipes-devtools/pseudo/pseudo.inc       |  5 ++
 meta/recipes-devtools/pseudo/pseudo_git.bb    |  1 +
 3 files changed, 94 insertions(+)
 create mode 100644 meta/recipes-devtools/pseudo/files/0001-makewrappers-Allow-the-wrapper-architecture-to-be-se.patch

diff --git a/meta/recipes-devtools/pseudo/files/0001-makewrappers-Allow-the-wrapper-architecture-to-be-se.patch b/meta/recipes-devtools/pseudo/files/0001-makewrappers-Allow-the-wrapper-architecture-to-be-se.patch
new file mode 100644
index 0000000000..7bc897b7e5
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/0001-makewrappers-Allow-the-wrapper-architecture-to-be-se.patch
@@ -0,0 +1,88 @@
+From 43c81997fbe3b39ca5529c1fa3a80695c48f2af6 Mon Sep 17 00:00:00 2001
+From: Sunil Dora <sunilkumar.dora@windriver.com>
+Date: Thu, 29 Oct 2026 06:55:15 -0700
+Subject: [PATCH] makewrappers: Allow the wrapper architecture to be set for
+ cross builds
+
+Architecture specific modifiers in wrapfuncs.in, such as
+version-aarch64="GLIBC_2.17" on the xattr wrappers, are selected with
+platform.machine(), so they follow the machine running the script
+rather than the one pseudo is built for. An aarch64 pseudo cross built
+on x86_64 ends up with GLIBC_2.3 and the reverse with GLIBC_2.17, which
+shows up as pseudo not being reproducible between x86_64 and aarch64
+builders.
+
+Add a MAKEWRAPPERS_ARCH variable the build can set and pass it through
+from the Makefile. Unset, the build machine is used as before.
+
+Upstream-Status: Submitted [https://lists.yoctoproject.org/g/yocto-patches/message/5183]
+
+Signed-off-by: Sunil Dora <sunilkumar.dora@windriver.com>
+---
+ Makefile.in  | 5 ++++-
+ makewrappers | 9 +++++++--
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 6640a73..bc2ab92 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -34,6 +34,9 @@ BITS=@BITS@
+ ARCH_FLAGS=@ARCH_FLAGS@
+ MARK64=@MARK64@
+ RPATH=@RPATH@
++# Architecture the wrappers are generated for, as a uname -m name.
++# Empty means the build machine; set it when cross compiling.
++MAKEWRAPPERS_ARCH ?=
+ VERSION=1.99.0
+ 
+ LIB=@LIB@
+@@ -146,7 +149,7 @@ tables: enums/*.in maketables templatefile.py $(TABLES)
+ 	./maketables enums/*.in
+ 
+ wrappers: makewrappers templatefile.py $(TEMPLATES) ports/*/wrapfuncs.in
+-	CC="$(CC) $(CFLAGS) $(CFLAGS_PSEUDO)" ./makewrappers "xattr=$(XATTR)"
++	CC="$(CC) $(CFLAGS) $(CFLAGS_PSEUDO)" MAKEWRAPPERS_ARCH="$(MAKEWRAPPERS_ARCH)" ./makewrappers "xattr=$(XATTR)"
+ 
+ .SECONDARY: tables wrappers
+ 
+diff --git a/makewrappers b/makewrappers
+index 19508fa..c90f5c7 100755
+--- a/makewrappers
++++ b/makewrappers
+@@ -15,6 +15,10 @@ import platform
+ import subprocess
+ from templatefile import TemplateFile
+ 
++def wrapper_arch():
++    """Architecture the wrappers are built for: MAKEWRAPPERS_ARCH or the build machine."""
++    return os.environ.get("MAKEWRAPPERS_ARCH", "").strip() or platform.machine()
++
+ class ArgumentList:
+     """A (possibly empty) list of arguments"""
+ 
+@@ -319,11 +323,11 @@ class Function:
+             # Strip all leading/trailing whitespace
+             modifiers = {k.strip():v.strip() for k, v in modifiers.items()}
+ 
+-            arch = "-" + platform.machine()
++            arch = "-" + wrapper_arch()
+             # Sorted so that versions-foo appear after versions, so overrides are easy
+             for key in sorted(modifiers):
+                 value = modifiers[key].replace('<equals>', '==')
+-                # If the key is version-arm64 and we're on arm64 then rename this to version
++                # If the key is version-arm64 and we're building for arm64 then rename this to version
+                 if key.endswith(arch):
+                     key = key.replace(arch, "")
+                 setattr(self, key, value)
+@@ -702,6 +706,7 @@ def main(argv):
+     port = Port('common', sources)
+ 
+     # the per-function stuff
++    print("Architecture for wrapper modifiers: %s" % wrapper_arch())
+     print("Writing functions...")
+     all_funcs = port.functions()
+     for name in sorted(all_funcs.keys()):
+-- 
+2.49.0
+
diff --git a/meta/recipes-devtools/pseudo/pseudo.inc b/meta/recipes-devtools/pseudo/pseudo.inc
index ba946ef9c9..526830207d 100644
--- a/meta/recipes-devtools/pseudo/pseudo.inc
+++ b/meta/recipes-devtools/pseudo/pseudo.inc
@@ -30,6 +30,11 @@ NO32LIBS:class-nativesdk = "1"
 
 PSEUDO_EXTRA_OPTS ?= "--enable-force-async --without-passwd-fallback --enable-epoll --enable-xattr"
 
+# makewrappers picks architecture specific wrapper modifiers from the machine
+# it runs on (platform.machine()), which is wrong when cross compiling. Tell it
+# the target instead. pseudo-native is unchanged: TARGET_ARCH is BUILD_ARCH.
+export MAKEWRAPPERS_ARCH = "${TARGET_ARCH}"
+
 # Compile for the local machine arch...
 do_compile () {
 	if [ "${SITEINFO_BITS}" = "64" ]; then
diff --git a/meta/recipes-devtools/pseudo/pseudo_git.bb b/meta/recipes-devtools/pseudo/pseudo_git.bb
index c0332dc9e2..f8903dbb63 100644
--- a/meta/recipes-devtools/pseudo/pseudo_git.bb
+++ b/meta/recipes-devtools/pseudo/pseudo_git.bb
@@ -3,6 +3,7 @@ require pseudo.inc
 SRC_URI = "git://git.yoctoproject.org/pseudo;branch=master;protocol=https \
            file://fallback-passwd \
            file://fallback-group \
+           file://0001-makewrappers-Allow-the-wrapper-architecture-to-be-se.patch \
            "
 SRC_URI:append:class-native = " \
     http://downloads.yoctoproject.org/mirror/sources/pseudo-prebuilt-2.33.tar.xz;subdir=${BB_GIT_DEFAULT_DESTSUFFIX}/prebuilt;name=prebuilt \
-- 
2.49.0


             reply	other threads:[~2026-10-29 14:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-29 14:13 sunilkumar.dora [this message]
2026-10-29 16:20 ` [PATCH] pseudo: Tell makewrappers the target architecture Dora, Sunil Kumar

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=20261029141325.356259-1-sunilkumar.dora@windriver.com \
    --to=sunilkumar.dora@windriver.com \
    --cc=Randy.MacLeod@windriver.com \
    --cc=liezhi.yang@windriver.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=richard.purdie@linuxfoundation.org \
    --cc=sundeep.kokkonda@windriver.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