105 lines
4.3 KiB
Bash
105 lines
4.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Copyright 2023 PingCAP, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
set -xeuo pipefail
|
|
|
|
# When updating to a new Go version, update all of these variables.
|
|
GOVERS=1.20.5
|
|
GOLINK=https://go.dev/dl/go$GOVERS.src.tar.gz
|
|
SRCSHASUM=9a15c133ba2cfafe79652f4815b62e7cfc267f68df1b9454c6ab2a3ca8b96a88
|
|
|
|
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 100 \
|
|
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-10
|
|
|
|
# libtapi is required for later versions of MacOSX.
|
|
git clone https://github.com/tpoechtrager/apple-libtapi.git
|
|
cd apple-libtapi
|
|
git checkout a66284251b46d591ee4a0cb4cf561b92a0c138d8
|
|
./build.sh
|
|
./install.sh
|
|
cd ..
|
|
rm -rf apple-libtapi
|
|
|
|
# crosstool-NG 1.24.0
|
|
curl -fsSL https://storage.googleapis.com/public-bazel-artifacts/toolchains/crosstool-ng/x86_64/20220711-205918/aarch64-unknown-linux-gnu.tar.gz -o aarch64-unknown-linux-gnu.tar.gz
|
|
echo '58407f1f3ed490bd0a0a500b23b88503fbcc25f0f69a0b7f8a3e8e7b9237341b aarch64-unknown-linux-gnu.tar.gz' | sha256sum -c -
|
|
curl -fsSL https://storage.googleapis.com/public-bazel-artifacts/toolchains/osxcross/x86_64/20220317-165434/x86_64-apple-darwin21.2.tar.gz -o x86_64-apple-darwin21.2.tar.gz
|
|
echo '751365dbfb5db66fe8e9f47fcf82cbbd7d1c176b79112ab91945d1be1d160dd5 x86_64-apple-darwin21.2.tar.gz' | sha256sum -c -
|
|
curl -fsSL https://storage.googleapis.com/public-bazel-artifacts/toolchains/crosstool-ng/x86_64/20220711-205918/x86_64-unknown-linux-gnu.tar.gz -o x86_64-unknown-linux-gnu.tar.gz
|
|
echo '8b0c246c3ebd02aceeb48bb3d70c779a1503db3e99be332ac256d4f3f1c22d47 x86_64-unknown-linux-gnu.tar.gz' | sha256sum -c -
|
|
echo *.tar.gz | xargs -n1 tar -xzf
|
|
rm *.tar.gz
|
|
|
|
curl -fsSL $GOLINK -o golang.tar.gz
|
|
echo "$SRCSHASUM golang.tar.gz" | sha256sum -c -
|
|
mkdir -p /tmp/go$GOVERS
|
|
tar -C /tmp/go$GOVERS -xzf golang.tar.gz
|
|
rm golang.tar.gz
|
|
cd /tmp/go$GOVERS/go
|
|
# we apply a patch to the Go runtime to keep track of running time on a
|
|
# per-goroutine basis. See #41574
|
|
git apply /bootstrap/diff.patch
|
|
cd ..
|
|
|
|
CONFIGS="linux_amd64 linux_arm64 darwin_amd64 darwin_arm64"
|
|
|
|
for CONFIG in $CONFIGS; do
|
|
case $CONFIG in
|
|
linux_amd64)
|
|
CC_FOR_TARGET=/x-tools/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-cc
|
|
CXX_FOR_TARGET=/x-tools/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-c++
|
|
;;
|
|
linux_arm64)
|
|
CC_FOR_TARGET=/x-tools/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-cc
|
|
CXX_FOR_TARGET=/x-tools/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-c++
|
|
;;
|
|
darwin_amd64)
|
|
CC_FOR_TARGET=/x-tools/x86_64-apple-darwin21.2/bin/x86_64-apple-darwin21.2-cc
|
|
CXX_FOR_TARGET=/x-tools/x86_64-apple-darwin21.2/bin/x86_64-apple-darwin21.2-c++
|
|
;;
|
|
darwin_arm64)
|
|
CC_FOR_TARGET=/x-tools/x86_64-apple-darwin21.2/bin/aarch64-apple-darwin21.2-cc
|
|
CXX_FOR_TARGET=/x-tools/x86_64-apple-darwin21.2/bin/aarch64-apple-darwin21.2-c++
|
|
;;
|
|
esac
|
|
GOOS=$(echo $CONFIG | cut -d_ -f1)
|
|
GOARCH=$(echo $CONFIG | cut -d_ -f2)
|
|
cd go/src
|
|
if [ $GOOS == darwin ]; then
|
|
export LD_LIBRARY_PATH=/x-tools/x86_64-apple-darwin21.2/lib
|
|
fi
|
|
GOOS=$GOOS GOARCH=$GOARCH CC=clang CXX=clang++ CC_FOR_TARGET=$CC_FOR_TARGET CXX_FOR_TARGET=$CXX_FOR_TARGET \
|
|
GOROOT_BOOTSTRAP=$(go env GOROOT) CGO_ENABLED=1 ./make.bash
|
|
if [ $GOOS == darwin ]; then
|
|
unset LD_LIBRARY_PATH
|
|
fi
|
|
cd ../..
|
|
rm -rf /tmp/go$GOVERS/go/pkg/${GOOS}_$GOARCH/cmd
|
|
for OTHER_CONFIG in $CONFIGS; do
|
|
if [ $CONFIG != $OTHER_CONFIG ]; then
|
|
rm -rf /tmp/go$GOVERS/go/pkg/$OTHER_CONFIG
|
|
fi
|
|
done
|
|
if [ $CONFIG != linux_amd64 ]; then
|
|
rm go/bin/go go/bin/gofmt
|
|
mv go/bin/${GOOS}_$GOARCH/* go/bin
|
|
rm -r go/bin/${GOOS}_$GOARCH
|
|
fi
|
|
tar cf - go | gzip -9 > /artifacts/go$GOVERS.$GOOS-$GOARCH.tar.gz
|
|
rm -rf go/bin
|
|
done
|
|
|
|
sha256sum /artifacts/*.tar.gz
|