2024-01-18 19:38:47 +01:00
|
|
|
#!/bin/bash -ex
|
|
|
|
|
|
|
|
: "${OUT_DIR:?Must set OUT_DIR}"
|
|
|
|
TOP=$(cd $(dirname $0)/../../..; pwd)
|
|
|
|
cd ${TOP}
|
|
|
|
|
|
|
|
UNAME="$(uname)"
|
|
|
|
case "$UNAME" in
|
|
|
|
Linux)
|
|
|
|
OS='linux'
|
|
|
|
;;
|
|
|
|
Darwin)
|
|
|
|
OS='darwin'
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# Verify that go test and go build work on all the same projects that are parsed by
|
|
|
|
# build/soong/build_kzip.bash
|
|
|
|
declare -ar go_modules=(build/blueprint build/soong
|
|
|
|
build/make/tools/canoninja build/make/tools/compliance build/make/tools/rbcrun)
|
|
|
|
export GOROOT=${TOP}/prebuilts/go/${OS}-x86
|
|
|
|
export GOENV=off
|
|
|
|
export GOPROXY=off
|
|
|
|
abs_out_dir=$(cd ${OUT_DIR}; pwd)
|
|
|
|
export GOPATH=${abs_out_dir}/gopath
|
|
|
|
export GOCACHE=${abs_out_dir}/gocache
|
|
|
|
export GOMODCACHE=${abs_out_dir}/gomodcache
|
|
|
|
export TMPDIR=${abs_out_dir}/gotemp
|
|
|
|
mkdir -p ${TMPDIR}
|
|
|
|
${GOROOT}/bin/go env
|
|
|
|
|
2024-01-19 20:32:54 +01:00
|
|
|
if [[ ${OS} = linux ]]; then
|
|
|
|
# Building with the race detector enabled uses the host linker, set the
|
|
|
|
# path to use the hermetic one.
|
|
|
|
CLANG_VERSION=$(build/soong/scripts/get_clang_version.py)
|
|
|
|
export CC="${TOP}/prebuilts/clang/host/${OS}-x86/${CLANG_VERSION}/bin/clang"
|
|
|
|
export CXX="${TOP}/prebuilts/clang/host/${OS}-x86/${CLANG_VERSION}/bin/clang++"
|
|
|
|
fi
|
2024-01-18 19:44:06 +01:00
|
|
|
|
2024-01-18 19:38:47 +01:00
|
|
|
# androidmk_test.go gets confused if ANDROID_BUILD_TOP is set.
|
|
|
|
unset ANDROID_BUILD_TOP
|
|
|
|
|
|
|
|
network_jail=""
|
|
|
|
if [[ ${OS} = linux ]]; then
|
|
|
|
# The go tools often try to fetch dependencies from the network,
|
|
|
|
# wrap them in an nsjail to prevent network access.
|
|
|
|
network_jail=${TOP}/prebuilts/build-tools/linux-x86/bin/nsjail
|
|
|
|
# Quiet
|
|
|
|
network_jail="${network_jail} -q"
|
|
|
|
# No timeout
|
|
|
|
network_jail="${network_jail} -t 0"
|
|
|
|
# Set working directory
|
|
|
|
network_jail="${network_jail} --cwd=\$PWD"
|
|
|
|
# Pass environment variables through
|
|
|
|
network_jail="${network_jail} -e"
|
|
|
|
# Allow read-only access to everything
|
|
|
|
network_jail="${network_jail} -R /"
|
|
|
|
# Allow write access to the out directory
|
|
|
|
network_jail="${network_jail} -B ${abs_out_dir}"
|
|
|
|
# Allow write access to the /tmp directory
|
|
|
|
network_jail="${network_jail} -B /tmp"
|
|
|
|
# Set high values, as network_jail uses low defaults.
|
|
|
|
network_jail="${network_jail} --rlimit_as soft"
|
|
|
|
network_jail="${network_jail} --rlimit_core soft"
|
|
|
|
network_jail="${network_jail} --rlimit_cpu soft"
|
|
|
|
network_jail="${network_jail} --rlimit_fsize soft"
|
|
|
|
network_jail="${network_jail} --rlimit_nofile soft"
|
|
|
|
fi
|
|
|
|
|
|
|
|
for dir in "${go_modules[@]}"; do
|
|
|
|
(cd "$dir";
|
|
|
|
eval ${network_jail} -- ${GOROOT}/bin/go build ./...
|
|
|
|
eval ${network_jail} -- ${GOROOT}/bin/go test ./...
|
2024-04-30 20:19:25 +02:00
|
|
|
eval ${network_jail} -- ${GOROOT}/bin/go test -race -timeout 20m -short ./...
|
2024-01-18 19:38:47 +01:00
|
|
|
)
|
|
|
|
done
|