123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #! /bin/bash
- #
- # Sets the current directory as Android build output directory for a
- # given target by writing the "prefix script" to it. Commands prefixed
- # by this script are executed in the Android build environment. E.g.,
- # running
- # ./run <command>
- # runs <command> as if we issued
- # cd <source>
- # mount --bind <build dir> out
- # . build/envsetup.sh
- # lunch <config>
- # <command>
- # exit
- #
- # This arrangement eliminates the need to issue envsetup/lunch commands
- # manually, and allows to run multiple builds from the same shell.
- # Thus, if your source tree is in ~/aosp and you are building for
- # 'blueline' and 'cuttlefish', issuing
- # cd /sdx/blueline && \
- # ~/aosp/build/soong/scripts/setup-android-build.sh aosp_blueline-userdebug
- # cd /sdx/cuttlefish && \
- # ~/aosp/build/soong/scripts/setup-android-build.sh aosp_cf_arm64_phone-userdebug
- # sets up build directories in /sdx/blueline and /sdx/cuttlefish respectively.
- # After that, issue
- # /sdx/blueline/run m
- # to build blueline image, and issue
- # /sdx/cuttlefish atest CtsSecurityBulletinHostTestCases
- # to run CTS tests. Notice there is no need to change to a specific directory for that.
- #
- # Argument:
- # * configuration (one of those shown by `lunch` command).
- #
- set -e
- function die() { printf "$@"; exit 1; }
- # Find out where the source tree using the fact that we are in its
- # build/ subdirectory.
- [[ "$(uname)" == Linux ]] || die "This setup runs only on Linux\n"
- declare -r mydir="${0%/*}"
- declare -r source="${mydir%/build/soong/scripts}"
- [[ "/${mydir}/" =~ '/build/soong/scripts/' ]] || \
- die "$0 should be in build/soong/scripts/ subdirectory of the source tree\n"
- [[ ! -e .repo && ! -e .git ]] || \
- die "Current directory looks like source. You should be in the _target_ directory.\n"
- # Do not override old run script.
- if [[ -x ./run ]]; then
- # Set variables from config=xxx and source=xxx comments in the existing script.
- . <(sed -nr 's/^# *source=(.*)/oldsource=\1/p;s/^# *config=(.*)/oldconfig=\1/p' run)
- die "This directory has been already set up to build Android for %s from %s.\n\
- Remove 'run' file if you want to set it up afresh\n" "$oldconfig" "$oldsource"
- fi
- (($#<2)) || die "usage: %s [<config>]\n" $0
- if (($#==1)); then
- # Configuration is provided, emit run script.
- declare -r config="$1"
- declare -r target="$PWD"
- cat >./run <<EOF
- #! /bin/bash
- # source=$source
- # config=$config
- declare -r cmd=\$(printf ' %q' "\$@")
- "$source/prebuilts/build-tools/linux-x86/bin/nsjail"\
- -Mo -q -e -t 0\
- -EANDROID_QUIET_BUILD=true \
- -B / -B "$target:$source/out"\
- --cwd "$source"\
- --skip_setsid \
- --keep_caps\
- --disable_clone_newcgroup\
- --disable_clone_newnet\
- --rlimit_as soft\
- --rlimit_core soft\
- --rlimit_cpu soft\
- --rlimit_fsize soft\
- --rlimit_nofile soft\
- --proc_rw\
- --hostname $(hostname) \
- --\
- /bin/bash -i -c ". build/envsetup.sh && lunch "$config" &&\$cmd"
- EOF
- chmod +x ./run
- else
- # No configuration, show available ones.
- printf "Please specify build target. Common values:\n"
- (cd "$source"
- . build/envsetup.sh
- get_build_var COMMON_LUNCH_CHOICES | tr ' ' '\n' | pr -c4 -tT -W"$(tput cols)"
- )
- exit 1
- fi
|