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