#!/bin/bash # Copyright © Hisilicon Technologies Co., Ltd. 2020-2021. All rights reserved. set -e usage(){ echo echo "USAGE" echo " ./build.sh [-h] [-jjobs]" echo "EXAMPLE" echo " Please do source and lunch frist! Then ./build.sh -h or ./build.sh -j8" exit 1 } check_parameter(){ if [ -z "$TARGET_PRODUCT" ]; then usage;fi if [ -n "$(echo "$1" | sed -n '/-h/p')" ];then usage;fi } set_parameter(){ command_args="$@" if [ -z "$(echo "$command_args" | sed -n '/-j/p')" ];then command_args+=" -j$(nproc)";fi build_variants=$(echo "$command_args" |awk -F ' ' '{for(i=1;i<=NF;i++){print $i;}}' |awk '/=/{print}') for variant in $build_variants do echo "$variant" declare -g $variant done } clear_intermediates(){ INTERMEDIATES=$(get_build_var TARGET_OUT_INTERMEDIATES) SUFFIX=$(echo $(get_build_var CHIP_REVISION) | tr a-z A-Z) # rm kernel config and boot if [ -f "$INTERMEDIATES/KERNEL_OBJ_$SUFFIX"/.config ]; then rm -rf "$INTERMEDIATES/KERNEL_OBJ_$SUFFIX"/.config; fi if [ -d "$INTERMEDIATES/KERNEL_OBJ_$SUFFIX"/arch/arm64/boot ]; then rm -rf "$INTERMEDIATES/KERNEL_OBJ_$SUFFIX"/arch/arm64/boot; fi if [ -d "$INTERMEDIATES/KERNEL_OBJ_$SUFFIX"/drivers ]; then find -L "$INTERMEDIATES/KERNEL_OBJ_$SUFFIX"/drivers -name "*.ko" |xargs rm -f; fi # rm recovery config and boot if [ -f "$INTERMEDIATES/RECOVERY_OBJ_$SUFFIX"/.config ]; then rm -rf "$INTERMEDIATES/RECOVERY_OBJ_$SUFFIX"/.config; fi if [ -d "$INTERMEDIATES/RECOVERY_OBJ_$SUFFIX"/arch/arm64/boot ]; then rm -rf "$INTERMEDIATES/RECOVERY_OBJ_$SUFFIX"/arch/arm64/boot; fi # rm bootloader bin if [ -f "$INTERMEDIATES/EMMC_FIRSTBOOT_OBJ_$SUFFIX"/fastboot-burn.bin ]; then rm -rf "$INTERMEDIATES/EMMC_FIRSTBOOT_OBJ_$SUFFIX"/fastboot-burn.bin; fi if [ -f "$INTERMEDIATES/EMMC_SECONDBOOT_OBJ_$SUFFIX"/sbl.bin ]; then rm -rf "$INTERMEDIATES/EMMC_SECONDBOOT_OBJ_$SUFFIX"/sbl.bin; fi if [ -f "$INTERMEDIATES/EMMC_SLAVEBOOT_OBJ_$SUFFIX"/slaveboot-burn.bin ]; then rm -rf "$INTERMEDIATES/EMMC_SLAVEBOOT_OBJ_$SUFFIX"/slaveboot-burn.bin; fi # rm preload dir if [ -d "$PRODUCT_OUT"/preload ]; then rm -rf "$PRODUCT_OUT"/preload; fi # rm bootargs bin if [ -f "$PRODUCT_OUT"/bootargs.bin ]; then rm -rf "$PRODUCT_OUT"/bootargs.bin; fi #clean bootloader build cache if [ -n "$(echo "$command_args" | sed -n '/installclean/p')" ]; then rm -rf $INTERMEDIATES/EMMC_FIRSTBOOT_OBJ* $INTERMEDIATES/EMMC_SECONDBOOT_OBJ* $INTERMEDIATES/EMMC_SLAVEBOOT_OBJ* rm -rf $INTERMEDIATES/KERNEL_OBJ* $INTERMEDIATES/RECOVERY_OBJ* $INTERMEDIATES/SECURESIGN_OBJ fi } __pre_process(){ check_parameter "$@" set_parameter "$@" # build env setup if [ -n "$HUANGLONG_LINUX_ENV" ];then source build/env.sh else source build/envsetup.sh; fi lunch $TARGET_PRODUCT-$TARGET_BUILD_VARIANT if [ -f /usr/local/bin/bep_env.sh ];then if [ "$BUILD_CURRENT_TIMESTAMP" == 'true' ];then sh /usr/local/bin/bep_env.sh -c vendor/huanglong/build/tools/bep_env.conf;fi source /usr/local/bin/bep_env.sh -s vendor/huanglong/build/tools/bep_env.conf fi if [ -f "$PRODUCT_EXT_PATH"/build/extra_process.sh ] && [ -z "$(echo "$command_args" | sed -n '/installclean/p')" ]; then source $PRODUCT_EXT_PATH/build/extra_process.sh; pre_process "$@" fi # build var PRODUCT_USE_DYNAMIC_PARTITIONS=$(get_build_var PRODUCT_USE_DYNAMIC_PARTITIONS) PRODUCT_OUT=$(get_build_var PRODUCT_OUT) IMAGES_OUT=$PRODUCT_OUT/images SANITIZE_TARGET=$(get_build_var SANITIZE_TARGET) # rm existed images if [ -d "$IMAGES_OUT" ]; then rm -rf $IMAGES_OUT; fi clear_intermediates } __do_make(){ if [ -z "$(echo "$command_args" | sed -n '/installclean/p')" ]; then make $command_args installclean; fi make $command_args SANITIZE_TARGET=$SANITIZE_TARGET } copy_img(){ for i in $@ do if [ -f "$PRODUCT_OUT"/"$i" ]; then cp $PRODUCT_OUT/$i $IMAGES_OUT/; fi done } __post_process(){ mkdir -p $IMAGES_OUT # copy aosp images copy_img super.img cache.img userdata.img product.img vbmeta_system.img vbmeta_vendor.img if [ -f "$PRODUCT_OUT"/"$TARGET_PRODUCT"-ota-*.zip ]; then cp $PRODUCT_OUT/$TARGET_PRODUCT-ota-*.zip $IMAGES_OUT/update.zip; fi if [ -f "$PRODUCT_EXT_PATH"/build/extra_process.sh ] && [ -z "$(echo "$command_args" | sed -n '/installclean/p')" ] && [[ "$TVOS_VERSION" != "TVOS-H" ]] && [[ "$TVOS_PLATFORM" != "tvos-o" ]]; then post_process; fi } build(){ start_time=$(date +%s) echo "begin to build" __pre_process "$@" __do_make __post_process end_time=$(date +%s) echo "build complete in $(expr $end_time - $start_time)s" } main(){ local result=0 if [ "$(ls $PWD/build_*.log 2> /dev/null | wc -l)" -ne 0 ]; then rm $(pwd)/build_*.log; fi build "$@" 2>&1 | tee -p build_$(date '+%Y%m%d-%H%M%S').log result=${PIPESTATUS[0]} if [ $result -ne 0 ];then exit $result; fi } main "$@"