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