xref: /aosp_15_r20/build/soong/scripts/run-soong-tests-with-go-tools.sh (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker#!/bin/bash -ex
2*333d2b36SAndroid Build Coastguard Worker
3*333d2b36SAndroid Build Coastguard Worker: "${OUT_DIR:?Must set OUT_DIR}"
4*333d2b36SAndroid Build Coastguard WorkerTOP=$(cd $(dirname $0)/../../..; pwd)
5*333d2b36SAndroid Build Coastguard Workercd ${TOP}
6*333d2b36SAndroid Build Coastguard Worker
7*333d2b36SAndroid Build Coastguard WorkerUNAME="$(uname)"
8*333d2b36SAndroid Build Coastguard Workercase "$UNAME" in
9*333d2b36SAndroid Build Coastguard WorkerLinux)
10*333d2b36SAndroid Build Coastguard Worker    OS='linux'
11*333d2b36SAndroid Build Coastguard Worker    ;;
12*333d2b36SAndroid Build Coastguard WorkerDarwin)
13*333d2b36SAndroid Build Coastguard Worker    OS='darwin'
14*333d2b36SAndroid Build Coastguard Worker    ;;
15*333d2b36SAndroid Build Coastguard Worker*)
16*333d2b36SAndroid Build Coastguard Worker    exit 1
17*333d2b36SAndroid Build Coastguard Worker    ;;
18*333d2b36SAndroid Build Coastguard Workeresac
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker# Verify that go test and go build work on all the same projects that are parsed by
21*333d2b36SAndroid Build Coastguard Worker# build/soong/build_kzip.bash
22*333d2b36SAndroid Build Coastguard Workerdeclare -ar go_modules=(build/blueprint build/soong
23*333d2b36SAndroid Build Coastguard Worker      build/make/tools/canoninja build/make/tools/compliance build/make/tools/rbcrun)
24*333d2b36SAndroid Build Coastguard Workerexport GOROOT=${TOP}/prebuilts/go/${OS}-x86
25*333d2b36SAndroid Build Coastguard Workerexport GOENV=off
26*333d2b36SAndroid Build Coastguard Workerexport GOPROXY=off
27*333d2b36SAndroid Build Coastguard Workerabs_out_dir=$(cd ${OUT_DIR}; pwd)
28*333d2b36SAndroid Build Coastguard Workerexport GOPATH=${abs_out_dir}/gopath
29*333d2b36SAndroid Build Coastguard Workerexport GOCACHE=${abs_out_dir}/gocache
30*333d2b36SAndroid Build Coastguard Workerexport GOMODCACHE=${abs_out_dir}/gomodcache
31*333d2b36SAndroid Build Coastguard Workerexport TMPDIR=${abs_out_dir}/gotemp
32*333d2b36SAndroid Build Coastguard Workermkdir -p ${TMPDIR}
33*333d2b36SAndroid Build Coastguard Worker${GOROOT}/bin/go env
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Workerif [[ ${OS} = linux ]]; then
36*333d2b36SAndroid Build Coastguard Worker    # Building with the race detector enabled uses the host linker, set the
37*333d2b36SAndroid Build Coastguard Worker    # path to use the hermetic one.
38*333d2b36SAndroid Build Coastguard Worker    CLANG_VERSION=$(build/soong/scripts/get_clang_version.py)
39*333d2b36SAndroid Build Coastguard Worker    export CC="${TOP}/prebuilts/clang/host/${OS}-x86/${CLANG_VERSION}/bin/clang"
40*333d2b36SAndroid Build Coastguard Worker    export CXX="${TOP}/prebuilts/clang/host/${OS}-x86/${CLANG_VERSION}/bin/clang++"
41*333d2b36SAndroid Build Coastguard Workerfi
42*333d2b36SAndroid Build Coastguard Worker
43*333d2b36SAndroid Build Coastguard Worker# androidmk_test.go gets confused if ANDROID_BUILD_TOP is set.
44*333d2b36SAndroid Build Coastguard Workerunset ANDROID_BUILD_TOP
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Workernetwork_jail=""
47*333d2b36SAndroid Build Coastguard Workerif [[ ${OS} = linux ]]; then
48*333d2b36SAndroid Build Coastguard Worker    # The go tools often try to fetch dependencies from the network,
49*333d2b36SAndroid Build Coastguard Worker    # wrap them in an nsjail to prevent network access.
50*333d2b36SAndroid Build Coastguard Worker    network_jail=${TOP}/prebuilts/build-tools/linux-x86/bin/nsjail
51*333d2b36SAndroid Build Coastguard Worker    # Quiet
52*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} -q"
53*333d2b36SAndroid Build Coastguard Worker    # No timeout
54*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} -t 0"
55*333d2b36SAndroid Build Coastguard Worker    # Set working directory
56*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} --cwd=\$PWD"
57*333d2b36SAndroid Build Coastguard Worker    # Pass environment variables through
58*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} -e"
59*333d2b36SAndroid Build Coastguard Worker    # Allow read-only access to everything
60*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} -R /"
61*333d2b36SAndroid Build Coastguard Worker    # Allow write access to the out directory
62*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} -B ${abs_out_dir}"
63*333d2b36SAndroid Build Coastguard Worker    # Allow write access to the /tmp directory
64*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} -B /tmp"
65*333d2b36SAndroid Build Coastguard Worker    # Set high values, as network_jail uses low defaults.
66*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} --rlimit_as soft"
67*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} --rlimit_core soft"
68*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} --rlimit_cpu soft"
69*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} --rlimit_fsize soft"
70*333d2b36SAndroid Build Coastguard Worker    network_jail="${network_jail} --rlimit_nofile soft"
71*333d2b36SAndroid Build Coastguard Workerfi
72*333d2b36SAndroid Build Coastguard Worker
73*333d2b36SAndroid Build Coastguard Workerfor dir in "${go_modules[@]}"; do
74*333d2b36SAndroid Build Coastguard Worker    (cd "$dir";
75*333d2b36SAndroid Build Coastguard Worker     eval ${network_jail} -- ${GOROOT}/bin/go build ./...
76*333d2b36SAndroid Build Coastguard Worker     eval ${network_jail} -- ${GOROOT}/bin/go test ./...
77*333d2b36SAndroid Build Coastguard Worker     eval ${network_jail} -- ${GOROOT}/bin/go test -race -timeout 20m -short ./...
78*333d2b36SAndroid Build Coastguard Worker    )
79*333d2b36SAndroid Build Coastguard Workerdone
80