# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 export CBUILD=${CBUILD:-${CHOST}} export CTARGET=${CTARGET:-${CHOST}} MY_PV=${PV/_/} inherit toolchain-funcs # See "Bootstrap" in release notes # GO_BV is set to the minimum version of go required to bootstrap the # current version. GO_BV=1.20.14 BOOTSTRAP_DIST="https://dev.gentoo.org/~williamh/dist" SRC_URI=" !system-bootstrap? ( amd64? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-amd64-bootstrap.tbz ) arm? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-arm-bootstrap.tbz ) arm64? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-arm64-bootstrap.tbz ) loong? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-loong64-bootstrap.tbz ) mips? ( abi_mips_o32? ( big-endian? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-mips-bootstrap.tbz ) !big-endian? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-mipsle-bootstrap.tbz ) ) abi_mips_n64? ( big-endian? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-mips64-bootstrap.tbz ) !big-endian? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-mips64le-bootstrap.tbz ) ) ) ppc64? ( big-endian? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-ppc64-bootstrap.tbz ) !big-endian? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-ppc64le-bootstrap.tbz ) ) riscv? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-riscv64-bootstrap.tbz ) s390? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-s390x-bootstrap.tbz ) x86? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-linux-386-bootstrap.tbz ) x64-macos? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-darwin-amd64-bootstrap.tbz ) arm64-macos? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-darwin-arm64-bootstrap.tbz ) x64-solaris? ( ${BOOTSTRAP_DIST}/go-${GO_BV}-solaris-amd64-bootstrap.tbz ) ) " case ${PV} in *9999*) EGIT_REPO_URI="https://github.com/golang/go.git" inherit git-r3 ;; *) SRC_URI+=" https://storage.googleapis.com/golang/go${MY_PV}.src.tar.gz " S="${WORKDIR}"/go case ${PV} in *_beta*|*_rc*) ;; *) KEYWORDS="-* ~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~s390 ~x86 ~amd64-linux ~x86-linux ~x64-macos ~x64-solaris" ;; esac esac DESCRIPTION="A concurrent garbage collected and typesafe programming language" HOMEPAGE="https://go.dev" LICENSE="BSD" SLOT="0/${PV}" IUSE="abi_mips_o32 abi_mips_n64 big-endian system-bootstrap" RDEPEND=" arm? ( sys-devel/binutils[gold] ) arm64? ( sys-devel/binutils[gold] )" # the *.syso files have writable/executable stacks QA_EXECSTACK='*.syso' # Do not complain about CFLAGS, etc, since Go doesn't use them. QA_FLAGS_IGNORED='.*' # The tools in /usr/lib/go should not cause the multilib-strict check to fail. QA_MULTILIB_PATHS="usr/lib/go/pkg/tool/.*/.*" # This package triggers "unrecognized elf file(s)" notices on riscv. # https://bugs.gentoo.org/794046 QA_PREBUILT='.*' # Do not strip this package. Stripping is unsupported upstream and may # fail. RESTRICT=" strip" DOCS=( CONTRIBUTING.md PATENTS README.md SECURITY.md ) go_arch() { # 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 } go_arm() { case "${1:-${CHOST}}" in armv5*) echo 5;; armv6*) echo 6;; armv7*) echo 7;; *) die "unknown GOARM for ${1:-${CHOST}}" ;; esac } go_os() { case "${1:-${CHOST}}" in *-linux*) echo linux;; *-darwin*) echo darwin;; *-freebsd*) echo freebsd;; *-netbsd*) echo netbsd;; *-openbsd*) echo openbsd;; *-solaris*) echo solaris;; *-cygwin*|*-interix*|*-winnt*) echo windows ;; *) die "unknown GOOS for ${1:-${CHOST}}" ;; esac } go_tuple() { echo "$(go_os $@)_$(go_arch $@)" } go_cross_compile() { [[ $(go_tuple ${CBUILD}) != $(go_tuple) ]] } PATCHES=( "${FILESDIR}"/go-never-download-newer-toolchains.patch ) src_unpack() { default [[ ${PV} == *9999* ]] && git-r3_src_unpack } src_compile() { # Go's build script does not use BUILD/HOST/TARGET consistently. :( export GOHOSTARCH=$(go_arch ${CBUILD}) export GOHOSTOS=$(go_os ${CBUILD}) export CC=$(tc-getBUILD_CC) export GOARCH=$(go_arch) export GOOS=$(go_os) export CC_FOR_TARGET=$(tc-getCC) export CXX_FOR_TARGET=$(tc-getCXX) use arm && export GOARM=$(go_arm) use x86 && export GO386=$(usex cpu_flags_x86_sse2 '' 'softfloat') export GOROOT="${PWD}" if use system-bootstrap; then if has_version