summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWANG Xuerui <xen0n@gentoo.org>2023-11-23 16:04:18 +0800
committerSam James <sam@gentoo.org>2023-11-24 16:26:14 +0000
commit0061d784248dc29adc92c7881d2854deb6cc12e1 (patch)
treeef0f78ade97ff1afe26141e12689ef815e73bb49
parentdev-python/jwcrypto: Stabilize 1.5.0 arm64, #918397 (diff)
downloadgentoo-0061d784248dc29adc92c7881d2854deb6cc12e1.tar.gz
gentoo-0061d784248dc29adc92c7881d2854deb6cc12e1.tar.bz2
gentoo-0061d784248dc29adc92c7881d2854deb6cc12e1.zip
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@gentoo.org> Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r--eclass/go-env.eclass40
1 files 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 <infra@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