diff options
author | 2023-11-23 16:04:18 +0800 | |
---|---|---|
committer | 2023-11-24 16:26:14 +0000 | |
commit | 0061d784248dc29adc92c7881d2854deb6cc12e1 (patch) | |
tree | ef0f78ade97ff1afe26141e12689ef815e73bb49 | |
parent | dev-python/jwcrypto: Stabilize 1.5.0 arm64, #918397 (diff) | |
download | gentoo-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.eclass | 40 |
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 |