diff options
author | Thilo Fromm <thilo.alexander@gmail.com> | 2023-11-08 08:34:35 +0100 |
---|---|---|
committer | James Le Cuirot <chewi@gentoo.org> | 2023-11-20 23:25:22 +0000 |
commit | 878d04daaf34765e6224e58139a9c45921d7a0c3 (patch) | |
tree | d57d3dc8277d17faca76d92be74825005b1780fc /eclass | |
parent | app-crypt/certbot-nginx: stabilize 2.7.2 for amd64, arm64, x86 (diff) | |
download | gentoo-878d04daaf34765e6224e58139a9c45921d7a0c3.tar.gz gentoo-878d04daaf34765e6224e58139a9c45921d7a0c3.tar.bz2 gentoo-878d04daaf34765e6224e58139a9c45921d7a0c3.zip |
eclass/go-env.eclass: add helper to set compile env
This change adds a helper function to explicitly set CC, CXX, and
GOARCH, and carrying over CFLAGS, LDFLAGS and friends to CGO
equivalents, to provide a minimal sane compile environment for Go.
It enables Go builds to play nice with crossdev's wrappers for
emerge/ebuild etc. Previously, Go ebuilds emitted binaries for the host
architecture.
For example, when running on an x86_64 host:
emerge-aarch64-cross-linux-gnu foo
will now correctly emerge Go package "foo" for aarch64 instead of
x86_64.
The eclass provides a single helper function
go-env_set_compile_environment()
intended to be called by other Go eclasses in an early build stage.
Ebuilds may also explicitly call this function.
Signed-off-by: Thilo Fromm <thilo.alexander@gmail.com>
Signed-off-by: James Le Cuirot <chewi@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r-- | eclass/go-env.eclass | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/eclass/go-env.eclass b/eclass/go-env.eclass new file mode 100644 index 000000000000..ba4f6c3fbb59 --- /dev/null +++ b/eclass/go-env.eclass @@ -0,0 +1,48 @@ +# Copyright 2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +# @ECLASS: go-env.eclass +# @MAINTAINER: +# Flatcar Linux Maintainers <infra@flatcar-linux.org> +# @AUTHOR: +# 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. +# Intended to be called by other Go eclasses in an early build stage, e.g. src_unpack. + +if [[ -z ${_GO_ENV_ECLASS} ]]; then +_GO_ENV_ECLASS=1 + +inherit toolchain-funcs + +# @FUNCTION: go-env_set_compile_environment +# @DESCRIPTION: +# Set up basic compile environment: CC, CXX, and GOARCH. +# Also carry over CFLAGS, LDFLAGS and friends. +# Required for cross-compiling with crossdev. +# If not set, host defaults will be used and the resulting binaries are host arch. +# (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 CGO_CFLAGS="${CGO_CFLAGS:-$CFLAGS}" + export CGO_CPPFLAGS="${CGO_CPPFLAGS:-$CPPFLAGS}" + export CGO_CXXFLAGS="${CGO_CXXFLAGS:-$CXXFLAGS}" + export CGO_LDFLAGS="${CGO_LDFLAGS:-$LDFLAGS}" +} + +fi |