Add intermediate go-1.17.3 version needed to boottrap the latest version.

This commit is contained in:
Andrius Štikonas 2023-08-31 22:18:16 +01:00
parent b501a21240
commit 413e959bbc
4 changed files with 228 additions and 1 deletions

View File

@ -9,11 +9,12 @@ sudo emerge -a --depclean # Remove old software that was used for bootstrapping
Notes:
1. you need to do it in two steps as currently ant-core:bootstrap is not co-installable
with ant-core:0 from the Gentoo tree.
2. Last tested on GCC 11. New version of GCC are known to occasionally break builds
2. Last tested on GCC 12. New versions of GCC are known to occasionally break builds
and might need additional patches.
## Bootstrapping OpenJDK 11
```sh
sudo emerge -a1v =dev-java/openjdk-11.0.9_p11
```
@ -43,3 +44,11 @@ We use `mrustc` to build rustc-1.54 and then we build each subsequent rustc vers
we reach up to date rustc.
mrustc is ocasionally broken on some versions of GCC. Last tested with GCC 12.2.1.
## Bootstrapping go
```sh
sudo emerge -a1v =dev-lang/go-1.4
sudo emerge -a1v =dev-lang/go-1.17.13
sudo emerge -a1uv dev-lang/go
```

View File

@ -1,2 +1,5 @@
AUX go-sets.conf 313 BLAKE2B 03e94776e317d34b72bfb8385b8b0dfa6a599a6086e4d0c9214e7b49293768947c21d9afb323ffcc7fd85ba0af72d9cb243dbb571eee9eb81de9400fd5f5e79c SHA512 7d01b98bc8d1b609183682dd942bd4c9fa757a98243c7de3cf6c497c7bc20b8cdbe59dd669ce4bb11f914a0e9b6d100e65cea2dffd99f38be50b18e0ecf66315
DIST go1.17.13.src.tar.gz 22206518 BLAKE2B b227e5197c6466e7dc4594646a6b5f7e2f5e8bc0d44b8ab45b488f5249eb64ff736fccf0e0070d6685a08361e1b3dd1a2ee7050df6395bec519a7ae7dca78630 SHA512 2820bdd679fdb5e37d4c601b26c246bab23d4e8e1b226ac37c38e90a68b693e877bff944275eb25e3296ee772e7b40ef7d71dd49cca524df4cb8e721bfb50c33
DIST go1.4-bootstrap-20171003.tar.gz 11009739 BLAKE2B 44653911a8276767ba5b357c1e759d8ab3c39b964c44e0c263a4a6a4d77a7dc8f8b31a56c51386e36ae2f749f406673e89ba8f6ade1bbe015ead79eb005aa709 SHA512 2f65d5035d2b4ae8610c3337e0fcba64692c63953b54bf735f634da3532c6573ed08927865bf068b00a3885663815c5efc7dbd9a1b3d6337c9a0c62168aabca7
EBUILD go-1.17.13.ebuild 5335 BLAKE2B 1ec21e06d84fd17dadfa708a46ae2e32a34f4d29d14faa566e6619cd4438f96342c87b17bbaab8d553f82bef167ba6e3779642aea1017c04572a93d1c665000c SHA512 c83bbe82b2a7c97a8812d8133c37bbba36c76e2c0d1e1211e0844754643634b9d8a0d186ba63e87dc81c3ed0c0d67daf452540e58903aede2b3c92ce4910e8bc
EBUILD go-1.4.ebuild 3260 BLAKE2B b9135669886f4a746c98195411add53034d9b21dddc80f32f7e667f54c40888cd9eea808ec3579d8871e700708d5a8b48bd5d2f354782853b69dae1d4adea82e SHA512 b9099fa3f65e3d5e1447cfdd1bd71af76c4cf094e0c718bb72952ae372766450d3fe94df6e8eed1cd1b6638a4d4c0b7d193f76e10c1fddc0e4748353a7e6da84

View File

@ -0,0 +1,7 @@
# Installed packages that inherit from known Go related eclasses.
# This is useful after a dev-lang/go version change to rebuild all
# software written in Go.
[golang-rebuild]
class = portage.sets.dbapi.VariableSet
variable = INHERITED
includes = golang-base golang-build golang-vcs golang-vcs-snapshot go-module

View File

@ -0,0 +1,208 @@
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
export CBUILD=${CBUILD:-${CHOST}}
export CTARGET=${CTARGET:-${CHOST}}
# See "Bootstrap" in release notes
GO_BOOTSTRAP_MIN=1.4
MY_PV=${PV/_/}
inherit toolchain-funcs
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 cpu_flags_x86_sse2"
RDEPEND="
arm? ( sys-devel/binutils[gold] )
arm64? ( sys-devel/binutils[gold] )"
BDEPEND=">=dev-lang/go-${GO_BOOTSTRAP_MIN}"
# 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) ]]
}
src_compile() {
if has_version -b ">=dev-lang/go-${GO_BOOTSTRAP_MIN}"; then
export GOROOT_BOOTSTRAP="${BROOT}/usr/lib/go"
elif has_version -b ">=dev-lang/go-bootstrap-${GO_BOOTSTRAP_MIN}"; then
export GOROOT_BOOTSTRAP="${BROOT}/usr/lib/go-bootstrap"
else
eerror "Go cannot be built without go or go-bootstrap installed"
die "Should not be here, please report a bug"
fi
export GOROOT_FINAL="${EPREFIX}"/usr/lib/go
export GOROOT="${GOROOT_FINAL}"
export GOBIN="${GOROOT}/bin"
# 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')
cd src
bash -x ./make.bash || die "build failed"
}
src_test() {
go_cross_compile && return 0
cd src
# https://github.com/golang/go/issues/42005
rm cmd/link/internal/ld/fallocate_test.go || true
PATH="${GOBIN}:${PATH}" \
./run.bash -no-rebuild || die "tests failed"
cd ..
rm -fr pkg/*_race || die
rm -fr pkg/obj/go-build || die
}
src_install() {
# There is a known issue which requires the source tree to be installed [1].
# Once this is fixed, we can consider using the doc use flag to control
# installing the doc and src directories.
# The use of cp is deliberate in order to retain permissions
# [1] https://golang.org/issue/2775
dodir /usr/lib/go
cp -R api bin doc lib pkg misc src test "${ED}"/usr/lib/go
einstalldocs
# testdata directories are not needed on the installed system
rm -fr $(find "${ED}"/usr/lib/go -iname testdata -type d -print)
local bin_path
if go_cross_compile; then
bin_path="bin/$(go_tuple)"
else
bin_path=bin
fi
local f x
for x in ${bin_path}/*; do
f=${x##*/}
dosym ../lib/go/${bin_path}/${f} /usr/bin/${f}
done
# install the @golang-rebuild set for Portage
insinto /usr/share/portage/config/sets
newins "${FILESDIR}"/go-sets.conf go.conf
}
pkg_postinst() {
[[ -z ${REPLACING_VERSIONS} ]] && return
elog "After ${CATEGORY}/${PN} is updated it is recommended to rebuild"
elog "all packages compiled with previous versions of ${CATEGORY}/${PN}"
elog "due to the static linking nature of go."
elog "If this is not done, the packages compiled with the older"
elog "version of the compiler will not be updated until they are"
elog "updated individually, which could mean they will have"
elog "vulnerabilities."
elog "Run 'emerge @golang-rebuild' to rebuild all 'go' packages"
elog "See https://bugs.gentoo.org/752153 for more info"
}