go_1_21: install from distpack archive
Changes the build and install phases to use archives produced by
[distpack]. This allows us to drop the code that cleans GOROOT and moves
cross-compiled binaries out of bin/GOOS_GOARCH, and potentially avoid
issues like [missing GOROOT/go.env] in the future.
[distpack]: https://pkg.go.dev/cmd/distpack
[missing GOROOT/go.env]: cbc976a97c
This commit is contained in:
parent
fd0060da77
commit
1ee50a2928
|
@ -64,10 +64,6 @@ stdenv.mkDerivation rec {
|
|||
|
||||
depsTargetTarget = lib.optional stdenv.targetPlatform.isWindows threadsCross.package;
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs .
|
||||
'';
|
||||
|
||||
patches = [
|
||||
(substituteAll {
|
||||
src = ./iana-etc-1.17.patch;
|
||||
|
@ -92,8 +88,6 @@ stdenv.mkDerivation rec {
|
|||
GOOS = stdenv.targetPlatform.parsed.kernel.name;
|
||||
GOARCH = goarch stdenv.targetPlatform;
|
||||
# GOHOSTOS/GOHOSTARCH must match the building system, not the host system.
|
||||
# Go will nevertheless build a for host system that we will copy over in
|
||||
# the install phase.
|
||||
GOHOSTOS = stdenv.buildPlatform.parsed.kernel.name;
|
||||
GOHOSTARCH = goarch stdenv.buildPlatform;
|
||||
|
||||
|
@ -116,14 +110,16 @@ stdenv.mkDerivation rec {
|
|||
|
||||
GOROOT_BOOTSTRAP = if useGccGoBootstrap then goBootstrap else "${goBootstrap}/share/go";
|
||||
|
||||
# Note that we use distpack to avoid moving around cross-compiled binaries.
|
||||
# The paths are slightly different when buildPlatform != hostPlatform and
|
||||
# distpack handles assembling outputs in the right place, same as the official
|
||||
# Go binary releases. See also https://pkg.go.dev/cmd/distpack
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
export GOCACHE=$TMPDIR/go-cache
|
||||
# this is compiled into the binary
|
||||
export GOROOT_FINAL=$out/share/go
|
||||
|
||||
export PATH=$(pwd)/bin:$PATH
|
||||
|
||||
${lib.optionalString isCross ''
|
||||
# Independent from host/target, CC should produce code for the building system.
|
||||
# We only set it when cross-compiling.
|
||||
|
@ -132,34 +128,16 @@ stdenv.mkDerivation rec {
|
|||
ulimit -a
|
||||
|
||||
pushd src
|
||||
./make.bash
|
||||
bash make.bash -no-banner -distpack
|
||||
popd
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
preInstall = ''
|
||||
# Contains the wrong perl shebang when cross compiling,
|
||||
# since it is not used for anything we can deleted as well.
|
||||
rm src/regexp/syntax/make_perl_groups.pl
|
||||
'' + (if (stdenv.buildPlatform.system != stdenv.hostPlatform.system) then ''
|
||||
mv bin/*_*/* bin
|
||||
rmdir bin/*_*
|
||||
${lib.optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
|
||||
rm -rf pkg/${GOHOSTOS}_${GOHOSTARCH} pkg/tool/${GOHOSTOS}_${GOHOSTARCH}
|
||||
''}
|
||||
'' else lib.optionalString (stdenv.hostPlatform.system != stdenv.targetPlatform.system) ''
|
||||
rm -rf bin/*_*
|
||||
${lib.optionalString (!(GOHOSTARCH == GOARCH && GOOS == GOHOSTOS)) ''
|
||||
rm -rf pkg/${GOOS}_${GOARCH} pkg/tool/${GOOS}_${GOARCH}
|
||||
''}
|
||||
'');
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $GOROOT_FINAL
|
||||
cp -a bin pkg src lib misc api doc go.env $GOROOT_FINAL
|
||||
mkdir -p $out/bin
|
||||
ln -s $GOROOT_FINAL/bin/* $out/bin
|
||||
mkdir -p $out/{share,bin}
|
||||
tar -C $out/share -x -z -f "pkg/distpack/go${version}.$GOOS-$GOARCH.tar.gz"
|
||||
ln -s $out/share/go/bin/* $out/bin
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
|
|
Loading…
Reference in a new issue