94 lines
3.1 KiB
Bash
94 lines
3.1 KiB
Bash
|
#! /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
|