diff mbox series

go-cross-canadian: fix binaries install and GOARCH

Message ID 20250808161533.13752-1-osama.abdelkader@gmail.com
State New
Headers show
Series go-cross-canadian: fix binaries install and GOARCH | expand

Commit Message

Osama Abdelkader Aug. 8, 2025, 4:15 p.m. UTC
Canadian cross builds produce host-side binaries (x86_64), but
GOARCH=arm was leaking in from go-${PV}.inc/go-common.inc, causing
arch mismatch and package QA errors. Explicitly set GOARCH = "${HOST_GOARCH}" to
ensure the correct host architecture is used.

Also fix do_install to correctly install all binaries from
${GO_BUILD_BINDIR} by using 'find -type f' to avoid issues when the
directory contains subdirectories (e.g. "linux_arm").

Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
---
 meta/recipes-devtools/go/go-cross-canadian.inc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Alexander Kanavin Aug. 8, 2025, 5:10 p.m. UTC | #1
On Fri, 8 Aug 2025 at 18:16, Osama Abdelkader via
lists.openembedded.org
<osama.abdelkader=gmail.com@lists.openembedded.org> wrote:
>
> Canadian cross builds produce host-side binaries (x86_64), but
> GOARCH=arm was leaking in from go-${PV}.inc/go-common.inc, causing
> arch mismatch and package QA errors. Explicitly set GOARCH = "${HOST_GOARCH}" to
> ensure the correct host architecture is used.
> +GOARCH = "${HOST_GOARCH}"

This looks like it is set to the build host architecture, you probably
need to set this to the architecture of the SDK?

Basically, if your machine is x86_64, set SDKMACHINE to arm64 and
target MACHINE to qemuriscv64. Then everything should still work
correctly.

Alex
Osama Abdelkader Aug. 8, 2025, 8:55 p.m. UTC | #2
setting SDKMACHINE and MACHINE didn't work for me.
If it did work for you, can you type the exact command(s) to try?

Osama
Alexander Kanavin Aug. 11, 2025, 8:47 a.m. UTC | #3
You need to show what you did, and what didn't work. I am unable to
commit time to come up with exact steps that I verified myself. But I
can correct your steps if you show them.

Alex

On Fri, 8 Aug 2025 at 22:55, Osama Abdelkader via
lists.openembedded.org
<osama.abdelkader=gmail.com@lists.openembedded.org> wrote:
>
> setting SDKMACHINE and MACHINE didn't work for me.
> If it did work for you, can you type the exact command(s) to try?
>
> Osama
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#221668): https://lists.openembedded.org/g/openembedded-core/message/221668
> Mute This Topic: https://lists.openembedded.org/mt/114603001/1686489
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Osama Abdelkader Aug. 11, 2025, 10:22 p.m. UTC | #4
If you set MACHINE to qemuriscv64 it will be go-cross-canadian-riscv64, the
bugs were reported for arm/arm64 not riscv64

https://bugzilla.yoctoproject.org/show_bug.cgi?id=15204
https://bugzilla.yoctoproject.org/show_bug.cgi?id=15775

Also, the majority of Yocto SDK users run on *x86_64* workstations, so
SDKMACHINE=x86_64 is the primary supported path
and go-cross-canadian-aarch64 is supposed to work for any supported
SDKMACHINE, as long as the host architecture is valid.

Currently, if SDKMACHINE=x86_64 (the default for x86 PCs) building
go-cross-canadian-aarch64 fails,
with this patch build pass for both SDKMACHINE=x86_64 or aarch64.

Osama

On Mon, Aug 11, 2025 at 10:47 AM Alexander Kanavin <alex.kanavin@gmail.com>
wrote:

> You need to show what you did, and what didn't work. I am unable to
> commit time to come up with exact steps that I verified myself. But I
> can correct your steps if you show them.
>
> Alex
>
> On Fri, 8 Aug 2025 at 22:55, Osama Abdelkader via
> lists.openembedded.org
> <osama.abdelkader=gmail.com@lists.openembedded.org> wrote:
> >
> > setting SDKMACHINE and MACHINE didn't work for me.
> > If it did work for you, can you type the exact command(s) to try?
> >
> > Osama
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#221668):
> https://lists.openembedded.org/g/openembedded-core/message/221668
> > Mute This Topic: https://lists.openembedded.org/mt/114603001/1686489
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> alex.kanavin@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
>
Alexander Kanavin Aug. 12, 2025, 7:52 p.m. UTC | #5
On Tue, 12 Aug 2025 at 00:22, Osama Ahmed <osama.abdelkader@gmail.com> wrote:
>
> If you set MACHINE to qemuriscv64 it will be go-cross-canadian-riscv64, the bugs were reported for arm/arm64 not riscv64
>
> https://bugzilla.yoctoproject.org/show_bug.cgi?id=15204
> https://bugzilla.yoctoproject.org/show_bug.cgi?id=15775
>
> Also, the majority of Yocto SDK users run on x86_64 workstations, so SDKMACHINE=x86_64 is the primary supported path
> and go-cross-canadian-aarch64 is supposed to work for any supported SDKMACHINE, as long as the host architecture is valid.
>
> Currently, if SDKMACHINE=x86_64 (the default for x86 PCs) building go-cross-canadian-aarch64 fails,
> with this patch build pass for both SDKMACHINE=x86_64 or aarch64.

The point I was trying to make is that this patch needs to work even
when all three architectures are different (e.g. the build host where
bitbake runs, the cross target (defined by MACHINE), and the sdk
target (defined by SDKMACHNE)). That was not obvious from just reading
the changes and the commit message..

Specifically, it wasn't clear from commit message why GOARCH =
"${HOST_GOARCH}" is necessary, and why it is correct. It is necessary
because GOARCH defaults to TARGET_GOARCH, which is set from MACHINE,
and it is correct because HOST_GOARCH is set from SDKMACHINE. I have
now found a bit of time to set up a build and run it, and the patch
seems to be doing the right thing, but its commit message should be
adjusted to include the above bit.

Alex
diff mbox series

Patch

diff --git a/meta/recipes-devtools/go/go-cross-canadian.inc b/meta/recipes-devtools/go/go-cross-canadian.inc
index 39330fc98b..4a6f2f4c36 100644
--- a/meta/recipes-devtools/go/go-cross-canadian.inc
+++ b/meta/recipes-devtools/go/go-cross-canadian.inc
@@ -5,6 +5,8 @@  DEPENDS = "go-native virtual/${HOST_PREFIX}go virtual/nativesdk-${HOST_PREFIX}go
            virtual/nativesdk-compilerlibs"
 PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}"
 
+GOARCH = "${HOST_GOARCH}"
+
 # it uses gcc on build machine during go-cross-canadian bootstrap, but
 # the gcc version may be old and not support option '-fmacro-prefix-map'
 # which is one of default values of DEBUG_PREFIX_MAP
@@ -51,7 +53,7 @@  do_install() {
 	install -d ${D}${libdir}/go/pkg/tool
 	cp --preserve=mode,timestamps -R ${B}/pkg/tool/${HOST_GOTUPLE} ${D}${libdir}/go/pkg/tool/
 	install -d ${D}${bindir} ${D}${libdir}/go/bin
-	for f in ${B}/${GO_BUILD_BINDIR}/*
+	for f in $(find ${B}/${GO_BUILD_BINDIR} -type f)
 	do
 		base=`basename $f`
 		install -m755 $f ${D}${libdir}/go/bin