commit:     0061d784248dc29adc92c7881d2854deb6cc12e1
Author:     WANG Xuerui <xen0n <AT> gentoo <DOT> org>
AuthorDate: Thu Nov 23 08:04:18 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Nov 24 16:26:14 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0061d784

go-env.eclass: unify GOARCH mapping logic with dev-lang/go

Previously the eclass featured its own GOARCH mapping, that took care
of less cases than the dev-lang/go ebuild did, and broke Go packages on
arches like loong (GOARCH=loong64), mips (4 GOARCHes supported in total)
or riscv (GOARCH=riscv64).

This patch adds a copy of the go_arch() helper from dev-lang/go to the
eclass and switches the go-env_set_compile_environment() function to use
that, to fix the problem at hand.

Fixes: 878d04daaf34765e6224e58139a9c45921d7a0c3
Closes: https://bugs.gentoo.org/917750
Signed-off-by: WANG Xuerui <xen0n <AT> gentoo.org>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 eclass/go-env.eclass | 40 ++++++++++++++++++++++++++--------------
 1 file changed, 26 insertions(+), 14 deletions(-)

diff --git a/eclass/go-env.eclass b/eclass/go-env.eclass
index ba4f6c3fbb59..08e3cf498a70 100644
--- a/eclass/go-env.eclass
+++ b/eclass/go-env.eclass
@@ -8,7 +8,7 @@
 # Flatcar Linux Maintainers <in...@flatcar-linux.org>
 # @BLURB: Helper eclass for setting the Go compile environment. Required for 
cross-compiling.
 # @DESCRIPTION:
-# This eclass includes a helper function for setting the compile environment 
for Go ebuilds.
+# This eclass includes helper functions for setting the compile environment 
for Go ebuilds.
 # Intended to be called by other Go eclasses in an early build stage, e.g. 
src_unpack.
 
 if [[ -z ${_GO_ENV_ECLASS} ]]; then
@@ -25,24 +25,36 @@ inherit toolchain-funcs
 # (e.g. "emerge-aarch64-cross-linux-gnu foo" run on x86_64 will emerge "foo" 
for x86_64
 #  instead of aarch64)
 go-env_set_compile_environment() {
-       local arch="$(tc-arch)"
-       case "${arch}" in
-               x86)    GOARCH="386" ;;
-               x64-*)  GOARCH="amd64" ;;
-               ppc64)  if [[ "$(tc-endian)" == "big" ]] ; then
-                                       GOARCH="ppc64"
-                               else
-                                       GOARCH="ppc64le"
-                               fi ;;
-                       *)      GOARCH="${arch}" ;;
-       esac
-
        tc-export CC CXX
-       export GOARCH
+
+       export GOARCH="$(go-env_goarch)"
        export CGO_CFLAGS="${CGO_CFLAGS:-$CFLAGS}"
        export CGO_CPPFLAGS="${CGO_CPPFLAGS:-$CPPFLAGS}"
        export CGO_CXXFLAGS="${CGO_CXXFLAGS:-$CXXFLAGS}"
        export CGO_LDFLAGS="${CGO_LDFLAGS:-$LDFLAGS}"
 }
 
+# @FUNCTION: go-env_goarch
+# @USAGE: [toolchain prefix]
+# @DESCRIPTION:
+# Returns the appropriate GOARCH setting for the target architecture.
+go-env_goarch() {
+       # By chance most portage arch names match Go
+       local tc_arch=$(tc-arch $@)
+       case "${tc_arch}" in
+               x86)    echo 386;;
+               x64-*)  echo amd64;;
+               loong)  echo loong64;;
+               mips) if use abi_mips_o32; then
+                               [[ $(tc-endian $@) = big ]] && echo mips || 
echo mipsle
+                       elif use abi_mips_n64; then
+                               [[ $(tc-endian $@) = big ]] && echo mips64 || 
echo mips64le
+                       fi ;;
+               ppc64) [[ $(tc-endian $@) = big ]] && echo ppc64 || echo 
ppc64le ;;
+               riscv) echo riscv64 ;;
+               s390) echo s390x ;;
+               *)              echo "${tc_arch}";;
+       esac
+}
+
 fi

Reply via email to