blob: 1fbb1fc77315c7c5304f1c4dacae4a89a05cb65b [file] [log] [blame]
Colin Cross6ca8d252024-01-18 10:38:47 -08001#!/bin/bash -ex
2
3: "${OUT_DIR:?Must set OUT_DIR}"
4TOP=$(cd $(dirname $0)/../../..; pwd)
5cd ${TOP}
6
7UNAME="$(uname)"
8case "$UNAME" in
9Linux)
10 OS='linux'
11 ;;
12Darwin)
13 OS='darwin'
14 ;;
15*)
16 exit 1
17 ;;
18esac
19
20# Verify that go test and go build work on all the same projects that are parsed by
21# build/soong/build_kzip.bash
22declare -ar go_modules=(build/blueprint build/soong
23 build/make/tools/canoninja build/make/tools/compliance build/make/tools/rbcrun)
24export GOROOT=${TOP}/prebuilts/go/${OS}-x86
25export GOENV=off
26export GOPROXY=off
27abs_out_dir=$(cd ${OUT_DIR}; pwd)
28export GOPATH=${abs_out_dir}/gopath
29export GOCACHE=${abs_out_dir}/gocache
30export GOMODCACHE=${abs_out_dir}/gomodcache
31export TMPDIR=${abs_out_dir}/gotemp
32mkdir -p ${TMPDIR}
33${GOROOT}/bin/go env
34
Colin Cross84caaef2024-01-19 19:32:54 +000035if [[ ${OS} = linux ]]; then
36 # Building with the race detector enabled uses the host linker, set the
37 # path to use the hermetic one.
38 CLANG_VERSION=$(build/soong/scripts/get_clang_version.py)
39 export CC="${TOP}/prebuilts/clang/host/${OS}-x86/${CLANG_VERSION}/bin/clang"
40 export CXX="${TOP}/prebuilts/clang/host/${OS}-x86/${CLANG_VERSION}/bin/clang++"
41fi
Colin Crossec78a462024-01-18 10:44:06 -080042
Colin Cross6ca8d252024-01-18 10:38:47 -080043# androidmk_test.go gets confused if ANDROID_BUILD_TOP is set.
44unset ANDROID_BUILD_TOP
45
46network_jail=""
47if [[ ${OS} = linux ]]; then
48 # The go tools often try to fetch dependencies from the network,
49 # wrap them in an nsjail to prevent network access.
50 network_jail=${TOP}/prebuilts/build-tools/linux-x86/bin/nsjail
51 # Quiet
52 network_jail="${network_jail} -q"
53 # No timeout
54 network_jail="${network_jail} -t 0"
55 # Set working directory
56 network_jail="${network_jail} --cwd=\$PWD"
57 # Pass environment variables through
58 network_jail="${network_jail} -e"
59 # Allow read-only access to everything
60 network_jail="${network_jail} -R /"
61 # Allow write access to the out directory
62 network_jail="${network_jail} -B ${abs_out_dir}"
63 # Allow write access to the /tmp directory
64 network_jail="${network_jail} -B /tmp"
65 # Set high values, as network_jail uses low defaults.
66 network_jail="${network_jail} --rlimit_as soft"
67 network_jail="${network_jail} --rlimit_core soft"
68 network_jail="${network_jail} --rlimit_cpu soft"
69 network_jail="${network_jail} --rlimit_fsize soft"
70 network_jail="${network_jail} --rlimit_nofile soft"
71fi
72
73for dir in "${go_modules[@]}"; do
74 (cd "$dir";
75 eval ${network_jail} -- ${GOROOT}/bin/go build ./...
76 eval ${network_jail} -- ${GOROOT}/bin/go test ./...
Colin Cross55f169a2024-04-30 11:19:25 -070077 eval ${network_jail} -- ${GOROOT}/bin/go test -race -timeout 20m -short ./...
Colin Cross6ca8d252024-01-18 10:38:47 -080078 )
79done