Files
tidb/tools/patch-go/build.sh
2023-06-21 16:13:11 +00:00

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