diff options
Diffstat (limited to 'build-android.sh')
-rwxr-xr-x | build-android.sh | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/build-android.sh b/build-android.sh new file mode 100755 index 0000000..adc9685 --- /dev/null +++ b/build-android.sh @@ -0,0 +1,156 @@ +#!/usr/bin/env bash + +# Copyright (c) 2015, ARM Limited and Contributors. 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 ARM 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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. + +# +# This script uses the following environment variables from the variant +# +# VARIANT - build variant name +# TOP_DIR - workspace root directory +# ANDROID_BUILD_ENABLED - Flag to enable building Android +# ANDROID_SOURCE_PATH - sub-directory containing Android +# ANDROID_BINARIES_PATH - sub-directory containing Android prebuilt bins +# ANDROID_LUNCH_TARGET - Lunch target to build +# ANDROID_IMAGE_SIZE - Size of the image to generate +# UBOOT_MKIMAGE - path to uboot mkimage +# LINUX_ARCH - the arch +# UBOOT_BUILD_ENABLED - flag to indicate the need for uimages. +# ANDROID_BINS_VARIANTS - list of binary distros +# ANDROID_SOURCE_VARIANT - the output name for the build +# TARGET_{plat} - array of platform parameters, indexed by +# ramdisk - the address of the ramdisk per platform + + +do_build () +{ + if [ "$ANDROID_BUILD_ENABLED" == "1" ]; then + if [ -d "$TOP_DIR/$ANDROID_SOURCE_PATH" ]; then + pushd $TOP_DIR/$ANDROID_SOURCE_PATH + + echo "Android source build starting." + source build/envsetup.sh + lunch ${ANDROID_LUNCH_TARGET} + make -j $PARALLELISM TARGET_NO_KERNEL=true \ + BUILD_KERNEL_MODULES=false \ + TARGET_PREBUILT_KERNEL=yes \ + systemimage userdataimage ramdisk + + popd + else + echo "Android binary build. Skipping." + fi + fi +} + +do_clean () +{ + if [ "$ANDROID_BUILD_ENABLED" == "1" ]; then + if [ -d "$TOP_DIR/$ANDROID_SOURCE_PATH" ]; then + pushd $TOP_DIR/$ANDROID_SOURCE_PATH + echo "Cleaning Android source build..." + rm -rf out + popd + else + echo "Android binary build. Skipping." + fi + fi +} + +do_package () +{ + if [ "$ANDROID_BUILD_ENABLED" == "1" ]; then + echo "Packaging Android... $VARIANT"; + + mkdir -p ${PLATDIR} + + if [ -d "$TOP_DIR/$ANDROID_SOURCE_PATH" ]; then + pushd $TOP_DIR/$ANDROID_SOURCE_PATH + echo "Packaging Android source build..." + + # Setup lunch option to have access to env variables + source build/envsetup.sh + lunch ${ANDROID_LUNCH_TARGET} + + # ANDROID_PRODUCT_OUT env variable is exported by android build system, + # when 'lunch <target>' is run. + local product_out=${ANDROID_PRODUCT_OUT} + local make_ext4fs=${TOP_DIR}/${ANDROID_SOURCE_PATH}/out/host/linux-x86/bin/make_ext4fs + + pushd ${product_out} + # Create an image file + MAKE_EXT4FS=${make_ext4fs} \ + IMG=${PLATDIR}/${ANDROID_SOURCE_VARIANT}-android.img \ + $TOP_DIR/build-scripts/android-image.sh + + # Copy the ramdisk + cp ${product_out}/ramdisk.img \ + ${PLATDIR}/${ANDROID_SOURCE_VARIANT}-ramdisk-android.img + ANDROID_BINS_VARIANTS=${ANDROID_SOURCE_VARIANT} + popd + else + pushd ${TOP_DIR}/${ANDROID_BINARIES_PATH} + echo "Packaging Android binary build..." + + for item in $ANDROID_BINS_VARIANTS; do + pushd $item + # Create an image file + if [ -e "system.img" ]; then + IMG=${PLATDIR}/${item}-android.img \ + ${TOP_DIR}/build-scripts/android-image.sh + elif [ -e "${item}.img" ]; then + # platform image already created + cp ${item}.img ${PLATDIR}/${item}-android.img + else + echo "Error: no system image available for ${item}" + fi + # Copy the ramdisk + cp ramdisk.img ${PLATDIR}/${item}-ramdisk-android.img + popd + done + popd + fi + if [ "$UBOOT_BUILD_ENABLED" == "1" ]; then + # Android ramdisks for uboot + pushd ${PLATDIR} + for var in $ANDROID_BINS_VARIANTS; do + local addr=TARGET_$var[ramdisk] + ${UBOOT_MKIMG} -A $LINUX_ARCH -O linux -C none \ + -T ramdisk -n ramdisk \ + -a ${!addr} -e ${!addr} \ + -n "Android ramdisk" \ + -d ${var}-ramdisk-android.img \ + ${var}-uInitrd-android.${!addr} + done + popd + fi + fi +} + +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +source $DIR/framework.sh $1 $2 |