Bug 13866

Summary: host-go: not supported on arm64 hosts
Product: buildroot Reporter: Christian Stewart <christian>
Component: OtherAssignee: unassigned
Status: RESOLVED MOVED    
Severity: normal CC: buildroot, christian, yann.morin.1998
Priority: P5    
Version: unspecified   
Target Milestone: ---   
Hardware: Other   
OS: Linux   
Host: Target:
Build:
Attachments: 0001-package-go-use-host-compiler-when-go-bootstrap-unsupported.patch

Description Christian Stewart 2021-06-22 01:52:26 UTC
All Go compiler versions > 1.4.x (old) are written in Go, and require a existing compiled Go version to use to build from source.

https://golang.org/doc/install/source#bootstrapFromSource

The process for "bootstrapping" the Go compiler in Buildroot is:

1. Compile a C/C++ cross-compiler (gcc) as the host toolchain.
2. Build go-bootstrap (which is Go 1.4.x and written in C)
3. Build go 1.16.x (written in Go) using go-bootstrap.

The problem is that step 2 - build go-bootstrap - does not work on 64-bit arm. The Go compiler from 1.4.x is compatible with x86, x86_64, and arm (32 bit) only.

This means that arm64 host machines will skip building Go and all go-based packages like Docker.

Due to BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS

The best fix to this for Buildroot is to continue using go-bootstrap on x86_64 or arm32 platforms (when BR2_PACKAGE_HOST_GO_BOOTSTRAP_ARCH_SUPPORTS is set). This is the most flexible option in terms of supporting third-party toolchains to bootstrap Go.

Support for gccgo (the Go compiler built-in to GCC 5 and greater) should be added with a conditional flag for the Buildroot toolchain (which would set --enable-languages=go).

If the compiler supports gccgo (toolchain sets GCCGO_SUPPORTS) flag, and GO_BOOTSTRAP_ARCH_SUPPORTS is false, then the host-go package should use the toolchain Gccgo to compile the Go compiler.

The toolchain gccgo would install a "go" binary into the host tree provided by gcc. (This binary is drop-in compatible with the normal Go compiler).

The Go compiler can then be instructed to use gccgo by simply setting $GOROOT_BOOTSTRAP to host/usr.
Comment 1 Christian Stewart 2021-06-22 02:25:55 UTC
Created attachment 9011 [details]
0001-package-go-use-host-compiler-when-go-bootstrap-unsupported.patch
Comment 2 Christian Stewart 2021-06-22 02:27:05 UTC
Comment on attachment 9011 [details]
0001-package-go-use-host-compiler-when-go-bootstrap-unsupported.patch

The attached patch configures host-go package to use the host /usr/bin/go compiler to bootstrap Golang when go-bootstrap is not supported (i.e. arm64).
Comment 3 Yann E. MORIN 2024-06-15 14:59:00 UTC
Thank you for your report.

The issue tracker for the Buildroot project has been moved to
the Gitlab.com issue tracker:
    https://gitlab.com/buildroot.org/buildroot/-/issues

We are taking this opportunity to close old issues in this old
tracker. If you believe your issue is still relevant, please
open one in the new issue tracker.

Thank you!