1*333d2b36SAndroid Build Coastguard Worker#! /bin/bash 2*333d2b36SAndroid Build Coastguard Worker# 3*333d2b36SAndroid Build Coastguard Worker# Sets the current directory as Android build output directory for a 4*333d2b36SAndroid Build Coastguard Worker# given target by writing the "prefix script" to it. Commands prefixed 5*333d2b36SAndroid Build Coastguard Worker# by this script are executed in the Android build environment. E.g., 6*333d2b36SAndroid Build Coastguard Worker# running 7*333d2b36SAndroid Build Coastguard Worker# ./run <command> 8*333d2b36SAndroid Build Coastguard Worker# runs <command> as if we issued 9*333d2b36SAndroid Build Coastguard Worker# cd <source> 10*333d2b36SAndroid Build Coastguard Worker# mount --bind <build dir> out 11*333d2b36SAndroid Build Coastguard Worker# . build/envsetup.sh 12*333d2b36SAndroid Build Coastguard Worker# lunch <config> 13*333d2b36SAndroid Build Coastguard Worker# <command> 14*333d2b36SAndroid Build Coastguard Worker# exit 15*333d2b36SAndroid Build Coastguard Worker# 16*333d2b36SAndroid Build Coastguard Worker# This arrangement eliminates the need to issue envsetup/lunch commands 17*333d2b36SAndroid Build Coastguard Worker# manually, and allows to run multiple builds from the same shell. 18*333d2b36SAndroid Build Coastguard Worker# Thus, if your source tree is in ~/aosp and you are building for 19*333d2b36SAndroid Build Coastguard Worker# 'blueline' and 'cuttlefish', issuing 20*333d2b36SAndroid Build Coastguard Worker# cd /sdx/blueline && \ 21*333d2b36SAndroid Build Coastguard Worker# ~/aosp/build/soong/scripts/setup-android-build.sh aosp_blueline-userdebug 22*333d2b36SAndroid Build Coastguard Worker# cd /sdx/cuttlefish && \ 23*333d2b36SAndroid Build Coastguard Worker# ~/aosp/build/soong/scripts/setup-android-build.sh aosp_cf_arm64_phone-userdebug 24*333d2b36SAndroid Build Coastguard Worker# sets up build directories in /sdx/blueline and /sdx/cuttlefish respectively. 25*333d2b36SAndroid Build Coastguard Worker# After that, issue 26*333d2b36SAndroid Build Coastguard Worker# /sdx/blueline/run m 27*333d2b36SAndroid Build Coastguard Worker# to build blueline image, and issue 28*333d2b36SAndroid Build Coastguard Worker# /sdx/cuttlefish atest CtsSecurityBulletinHostTestCases 29*333d2b36SAndroid Build Coastguard Worker# to run CTS tests. Notice there is no need to change to a specific directory for that. 30*333d2b36SAndroid Build Coastguard Worker# 31*333d2b36SAndroid Build Coastguard Worker# Argument: 32*333d2b36SAndroid Build Coastguard Worker# * configuration (one of those shown by `lunch` command). 33*333d2b36SAndroid Build Coastguard Worker# 34*333d2b36SAndroid Build Coastguard Workerset -e 35*333d2b36SAndroid Build Coastguard Workerfunction die() { printf "$@"; exit 1; } 36*333d2b36SAndroid Build Coastguard Worker 37*333d2b36SAndroid Build Coastguard Worker# Find out where the source tree using the fact that we are in its 38*333d2b36SAndroid Build Coastguard Worker# build/ subdirectory. 39*333d2b36SAndroid Build Coastguard Worker[[ "$(uname)" == Linux ]] || die "This setup runs only on Linux\n" 40*333d2b36SAndroid Build Coastguard Workerdeclare -r mydir="${0%/*}" 41*333d2b36SAndroid Build Coastguard Workerdeclare -r source="${mydir%/build/soong/scripts}" 42*333d2b36SAndroid Build Coastguard Worker[[ "/${mydir}/" =~ '/build/soong/scripts/' ]] || \ 43*333d2b36SAndroid Build Coastguard Worker die "$0 should be in build/soong/scripts/ subdirectory of the source tree\n" 44*333d2b36SAndroid Build Coastguard Worker[[ ! -e .repo && ! -e .git ]] || \ 45*333d2b36SAndroid Build Coastguard Worker die "Current directory looks like source. You should be in the _target_ directory.\n" 46*333d2b36SAndroid Build Coastguard Worker# Do not override old run script. 47*333d2b36SAndroid Build Coastguard Workerif [[ -x ./run ]]; then 48*333d2b36SAndroid Build Coastguard Worker # Set variables from config=xxx and source=xxx comments in the existing script. 49*333d2b36SAndroid Build Coastguard Worker . <(sed -nr 's/^# *source=(.*)/oldsource=\1/p;s/^# *config=(.*)/oldconfig=\1/p' run) 50*333d2b36SAndroid Build Coastguard Worker die "This directory has been already set up to build Android for %s from %s.\n\ 51*333d2b36SAndroid Build Coastguard WorkerRemove 'run' file if you want to set it up afresh\n" "$oldconfig" "$oldsource" 52*333d2b36SAndroid Build Coastguard Workerfi 53*333d2b36SAndroid Build Coastguard Worker 54*333d2b36SAndroid Build Coastguard Worker(($#<2)) || die "usage: %s [<config>]\n" $0 55*333d2b36SAndroid Build Coastguard Worker 56*333d2b36SAndroid Build Coastguard Workerif (($#==1)); then 57*333d2b36SAndroid Build Coastguard Worker # Configuration is provided, emit run script. 58*333d2b36SAndroid Build Coastguard Worker declare -r config="$1" 59*333d2b36SAndroid Build Coastguard Worker declare -r target="$PWD" 60*333d2b36SAndroid Build Coastguard Worker cat >./run <<EOF 61*333d2b36SAndroid Build Coastguard Worker#! /bin/bash 62*333d2b36SAndroid Build Coastguard Worker# source=$source 63*333d2b36SAndroid Build Coastguard Worker# config=$config 64*333d2b36SAndroid Build Coastguard Workerdeclare -r cmd=\$(printf ' %q' "\$@") 65*333d2b36SAndroid Build Coastguard Worker"$source/prebuilts/build-tools/linux-x86/bin/nsjail"\ 66*333d2b36SAndroid Build Coastguard Worker -Mo -q -e -t 0\ 67*333d2b36SAndroid Build Coastguard Worker -EANDROID_QUIET_BUILD=true \ 68*333d2b36SAndroid Build Coastguard Worker -B / -B "$target:$source/out"\ 69*333d2b36SAndroid Build Coastguard Worker --cwd "$source"\ 70*333d2b36SAndroid Build Coastguard Worker --skip_setsid \ 71*333d2b36SAndroid Build Coastguard Worker --keep_caps\ 72*333d2b36SAndroid Build Coastguard Worker --disable_clone_newcgroup\ 73*333d2b36SAndroid Build Coastguard Worker --disable_clone_newnet\ 74*333d2b36SAndroid Build Coastguard Worker --rlimit_as soft\ 75*333d2b36SAndroid Build Coastguard Worker --rlimit_core soft\ 76*333d2b36SAndroid Build Coastguard Worker --rlimit_cpu soft\ 77*333d2b36SAndroid Build Coastguard Worker --rlimit_fsize soft\ 78*333d2b36SAndroid Build Coastguard Worker --rlimit_nofile soft\ 79*333d2b36SAndroid Build Coastguard Worker --proc_rw\ 80*333d2b36SAndroid Build Coastguard Worker --hostname $(hostname) \ 81*333d2b36SAndroid Build Coastguard Worker --\ 82*333d2b36SAndroid Build Coastguard Worker /bin/bash -i -c ". build/envsetup.sh && lunch "$config" &&\$cmd" 83*333d2b36SAndroid Build Coastguard WorkerEOF 84*333d2b36SAndroid Build Coastguard Worker chmod +x ./run 85*333d2b36SAndroid Build Coastguard Workerelse 86*333d2b36SAndroid Build Coastguard Worker # No configuration, show available ones. 87*333d2b36SAndroid Build Coastguard Worker printf "Please specify build target. Common values:\n" 88*333d2b36SAndroid Build Coastguard Worker (cd "$source" 89*333d2b36SAndroid Build Coastguard Worker . build/envsetup.sh 90*333d2b36SAndroid Build Coastguard Worker get_build_var COMMON_LUNCH_CHOICES | tr ' ' '\n' | pr -c4 -tT -W"$(tput cols)" 91*333d2b36SAndroid Build Coastguard Worker ) 92*333d2b36SAndroid Build Coastguard Worker exit 1 93*333d2b36SAndroid Build Coastguard Workerfi 94