228 lines
5.6 KiB
Bash
228 lines
5.6 KiB
Bash
|
#!/bin/bash
|
||
|
#
|
||
|
# Copyright (c) 2012, The Linux Foundation. All rights reserved.
|
||
|
#
|
||
|
# Redistribution and use in source and binary forms, with or without
|
||
|
# modification, are permitted provided that the following conditions are
|
||
|
# met:
|
||
|
# * Redistributions of source code must retain the above copyright
|
||
|
# notice, this list of conditions and the following disclaimer.
|
||
|
# * Redistributions in binary form must reproduce the above
|
||
|
# copyright notice, this list of conditions and the following
|
||
|
# disclaimer in the documentation and/or other materials provided
|
||
|
# with the distribution.
|
||
|
# * Neither the name of The Linux Foundation nor the names of its
|
||
|
# contributors may be used to endorse or promote products derived
|
||
|
# from this software without specific prior written permission.
|
||
|
#
|
||
|
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||
|
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||
|
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||
|
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||
|
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
#
|
||
|
|
||
|
set -o errexit
|
||
|
|
||
|
usage() {
|
||
|
cat <<USAGE
|
||
|
|
||
|
Usage:
|
||
|
bash $0 <TARGET_PRODUCT> [OPTIONS]
|
||
|
|
||
|
Description:
|
||
|
Builds Android tree for given TARGET_PRODUCT
|
||
|
|
||
|
OPTIONS:
|
||
|
-c, --clean_build
|
||
|
Clean build - build from scratch by removing entire out dir
|
||
|
|
||
|
-d, --debug
|
||
|
Enable debugging - captures all commands while doing the build
|
||
|
|
||
|
-h, --help
|
||
|
Display this help message
|
||
|
|
||
|
-i, --image
|
||
|
Specify image to be build/re-build (bootimg/sysimg/usrimg)
|
||
|
|
||
|
-j, --jobs
|
||
|
Specifies the number of jobs to run simultaneously (Default: 8)
|
||
|
|
||
|
-k, --kernel_defconf
|
||
|
Specify defconf file to be used for compiling Kernel
|
||
|
|
||
|
-l, --log_file
|
||
|
Log file to store build logs (Default: <TARGET_PRODUCT>.log)
|
||
|
|
||
|
-m, --module
|
||
|
Module to be build
|
||
|
|
||
|
-p, --project
|
||
|
Project to be build
|
||
|
|
||
|
-s, --setup_ccache
|
||
|
Set CCACHE for faster incremental builds (true/false - Default: true)
|
||
|
|
||
|
-u, --update-api
|
||
|
Update APIs
|
||
|
|
||
|
-v, --build_variant
|
||
|
Build variant (Default: userdebug)
|
||
|
|
||
|
USAGE
|
||
|
}
|
||
|
|
||
|
clean_build() {
|
||
|
echo -e "\nINFO: Removing entire out dir. . .\n"
|
||
|
make clobber
|
||
|
}
|
||
|
|
||
|
build_android() {
|
||
|
echo -e "\nINFO: Build Android tree for $TARGET\n"
|
||
|
make $@ | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
build_bootimg() {
|
||
|
echo -e "\nINFO: Build bootimage for $TARGET\n"
|
||
|
make bootimage $@ | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
build_sysimg() {
|
||
|
echo -e "\nINFO: Build systemimage for $TARGET\n"
|
||
|
make systemimage $@ | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
build_usrimg() {
|
||
|
echo -e "\nINFO: Build userdataimage for $TARGET\n"
|
||
|
make userdataimage $@ | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
build_module() {
|
||
|
echo -e "\nINFO: Build $MODULE for $TARGET\n"
|
||
|
make $MODULE $@ | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
build_project() {
|
||
|
echo -e "\nINFO: Build $PROJECT for $TARGET\n"
|
||
|
mmm $PROJECT | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
update_api() {
|
||
|
echo -e "\nINFO: Updating APIs\n"
|
||
|
make update-api | tee $LOG_FILE.log
|
||
|
}
|
||
|
|
||
|
setup_ccache() {
|
||
|
export CCACHE_DIR=../.ccache
|
||
|
export USE_CCACHE=1
|
||
|
}
|
||
|
|
||
|
delete_ccache() {
|
||
|
prebuilts/misc/linux-x86/ccache/ccache -C
|
||
|
rm -rf $CCACHE_DIR
|
||
|
}
|
||
|
|
||
|
create_ccache() {
|
||
|
echo -e "\nINFO: Setting CCACHE with 10 GB\n"
|
||
|
setup_ccache
|
||
|
delete_ccache
|
||
|
prebuilts/misc/linux-x86/ccache/ccache -M 10G
|
||
|
}
|
||
|
|
||
|
# Set defaults
|
||
|
VARIANT="userdebug"
|
||
|
JOBS=8
|
||
|
CCACHE="true"
|
||
|
|
||
|
# Setup getopt.
|
||
|
long_opts="clean_build,debug,help,image:,jobs:,kernel_defconf:,log_file:,module:,"
|
||
|
long_opts+="project:,setup_ccache:,update-api,build_variant:"
|
||
|
getopt_cmd=$(getopt -o cdhi:j:k:l:m:p:s:uv: --long "$long_opts" \
|
||
|
-n $(basename $0) -- "$@") || \
|
||
|
{ echo -e "\nERROR: Getopt failed. Extra args\n"; usage; exit 1;}
|
||
|
|
||
|
eval set -- "$getopt_cmd"
|
||
|
|
||
|
while true; do
|
||
|
case "$1" in
|
||
|
-c|--clean_build) CLEAN_BUILD="true";;
|
||
|
-d|--debug) DEBUG="true";;
|
||
|
-h|--help) usage; exit 0;;
|
||
|
-i|--image) IMAGE="$2"; shift;;
|
||
|
-j|--jobs) JOBS="$2"; shift;;
|
||
|
-k|--kernel_defconf) DEFCONFIG="$2"; shift;;
|
||
|
-l|--log_file) LOG_FILE="$2"; shift;;
|
||
|
-m|--module) MODULE="$2"; shift;;
|
||
|
-p|--project) PROJECT="$2"; shift;;
|
||
|
-u|--update-api) UPDATE_API="true";;
|
||
|
-s|--setup_ccache) CCACHE="$2"; shift;;
|
||
|
-v|--build_variant) VARIANT="$2"; shift;;
|
||
|
--) shift; break;;
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
# Mandatory argument
|
||
|
if [ $# -eq 0 ]; then
|
||
|
echo -e "\nERROR: Missing mandatory argument: TARGET_PRODUCT\n"
|
||
|
usage
|
||
|
exit 1
|
||
|
fi
|
||
|
if [ $# -gt 1 ]; then
|
||
|
echo -e "\nERROR: Extra inputs. Need TARGET_PRODUCT only\n"
|
||
|
usage
|
||
|
exit 1
|
||
|
fi
|
||
|
TARGET="$1"; shift
|
||
|
|
||
|
if [ -z $LOG_FILE ]; then
|
||
|
LOG_FILE=$TARGET
|
||
|
fi
|
||
|
|
||
|
CMD="-j $JOBS"
|
||
|
if [ "$DEBUG" = "true" ]; then
|
||
|
CMD+=" showcommands"
|
||
|
fi
|
||
|
if [ -n "$DEFCONFIG" ]; then
|
||
|
CMD+=" KERNEL_DEFCONFIG=$DEFCONFIG"
|
||
|
fi
|
||
|
|
||
|
if [ "$CCACHE" = "true" ]; then
|
||
|
setup_ccache
|
||
|
fi
|
||
|
|
||
|
source build/envsetup.sh
|
||
|
lunch $TARGET-$VARIANT
|
||
|
|
||
|
if [ "$CLEAN_BUILD" = "true" ]; then
|
||
|
clean_build
|
||
|
if [ "$CCACHE" = "true" ]; then
|
||
|
create_ccache
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ "$UPDATE_API" = "true" ]; then
|
||
|
update_api
|
||
|
fi
|
||
|
|
||
|
if [ -n "$MODULE" ]; then
|
||
|
build_module "$CMD"
|
||
|
fi
|
||
|
|
||
|
if [ -n "$PROJECT" ]; then
|
||
|
build_project
|
||
|
fi
|
||
|
|
||
|
if [ -n "$IMAGE" ]; then
|
||
|
build_$IMAGE "$CMD"
|
||
|
fi
|
||
|
|
||
|
build_android "$CMD"
|