#!/bin/bash
usage()
{
   echo "USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME]  "
    echo "No ARGS means use default build option                  "
    echo "WHERE: -U = build uboot                                 "
    echo "       -C = build kernel with Clang                     "
    echo "       -K = build kernel                                "
    echo "       -A = build android                               "
    echo "       -p = will build packaging in IMAGE      "
    echo "       -o = build OTA package                           "
    echo "       -u = build update.img                            "
    echo "       -v = build android with 'user' or 'userdebug'    "
    echo "       -d = huild kernel dts name    "
    echo "       -V = build version    "
    echo "       -J = build jobs    "
    echo "       init = init rp board config"
    echo "       batch = batch compilation image"
    echo "       all = batch compile all images on the current platform"
    exit 1
}


function select_platform()
{
    echo "Please choose platform:"

    PLATFPRM_PATH=device/rockchip
    PLATFORMS=( $(cd $PLATFPRM_PATH && ls -d rk* | sort) )
    echo "${PLATFORMS[@]}" |xargs -n 1 | sed "=" | sed "N;s/\n/. /"

    read -p "Please input num: " INDEX
    INDEX=$((${INDEX:-0} - 1))
    
    if echo $INDEX | grep -vq [^0-9]; then
        if ((INDEX >= 0 && INDEX < ${#PLATFORMS[@]})); then
        
            TARGET_PLATFORM="${PLATFORMS[$INDEX]}"
            echo "build target platform : $TARGET_PLATFORM"
            echo $TARGET_PLATFORM > $PLATFPRM_PATH/.targe_platform
            
        else
            echo "Invalid selection"
            select_platform
        fi
    else
        echo "Invalid input, please retry!!"
        select_platform
    fi
}

function select_board()
{
    echo "Please choose board:"
    BOARD_DIR=$PLATFPRM_PATH/$TARGET_PLATFORM/rp_boards
    if [ ! -d $BOARD_DIR ];then
        echo "Not yet adapted to this platform. exit!!!"
        exit -1
    fi

    BOARDS=( $(cd $BOARD_DIR && ls *.mk | sort) )
    echo "${BOARDS[@]}" |xargs -n 1 | sed "=" | sed "N;s/\n/. /"

    read -p "Please input num: " INDEX
    INDEX=$((${INDEX:-0} - 1))
    
    if echo $INDEX | grep -vq [^0-9]; then
        if ((INDEX >= 0 && INDEX < ${#BOARDS[@]})); then
        
            TARGET_BOARD="${BOARDS[$INDEX]}"
            echo "build target board : $TARGET_BOARD"
	    echo $TARGET_BOARD >> $PLATFPRM_PATH/.targe_platform
            ln -sf rp_boards/$TARGET_BOARD  $BOARD_DIR/../BoardConfig.mk
        else
            echo "Invalid selection"
            select_board
        fi
    else
        echo "Invalid input"
        select_board
    fi
}

function build_init()
{
    select_platform
    select_board
    
    echo
    echo "========================================================="
    echo "build platform: ${TARGET_PLATFORM}, board: $TARGET_BOARD"
    echo "========================================================="
}

function lunch_platform()
{
    TARGET_PLATFORM_PATH=device/rockchip/.targe_platform
    
    if [ ! -e $TARGET_PLATFORM_PATH ];then
        build_init
    fi
    
    TARGET_PLATFORM=$(sed -n '1p' device/rockchip/.targe_platform)
    TARGET_BOARD=$(sed -n '2p' device/rockchip/.targe_platform)
    source build/envsetup.sh >/dev/null

    case $TARGET_PLATFORM in
        rk3588)
        lunch rk3588_t-user
            ;;
        rk356x)
            if [[ "$TARGET_BOARD" =~ "rk3566" ]];then
                lunch rk3566_t-userdebug
            else
                lunch rk3568_t-userdebug
            fi
            ;;
        rk3399)
            lunch rk3399_t-userdebug
            ;;
	rk3562)
            lunch rk3562_t-userdebug
            ;;
        *)
            echo "$TARGET_PLATFORM 平台暂未适配!"
            ;;
    esac
}


function batch_compile() {
    if [ ! -d release_dir ];then
        mkdir release_dir
    fi
    # choose board
    build_init
    TARGET_BOARD_T=${TARGET_BOARD//.mk/}
    DTS_DIR=kernel-5.10/arch/arm64/boot/dts/rockchip/$TARGET_PLATFORM/$TARGET_BOARD_T.dts
    IMAGE_PATH_T="rockdev/Image-rk$(echo $TARGET_BOARD_T | grep -oP 'rk\K\d+')_t"

    IMAGE_OUT_PATH=$(mkdir -p "release_dir/$TARGET_BOARD_T" && echo "release_dir/$TARGET_BOARD_T")
    # get all lcd.dtsi
    i=0
    IFS=$'\n'
    for line in `grep -r "rp-lcd" $DTS_DIR | sed 's/\///g'`
    do
            if [[ "$TARGET_PLATFORM" == "rk3588" || "$TARGET_PLATFORM" == "rk3399" ]]; then
                if [[ ${line} != *'rp-lcd-multi-hdmi0-hdmi1-dp0.dtsi'* && ${line} != *'rp-lcd-hdmi.dtsi'* && ${line} != *'rp-lcd-typec-dp0.dtsi'* && ${line} != *'rp-lcd-hdmi0.dtsi'* && ${line} != *'rp-lcd-hdmi1.dtsi'* ]]; then
                    DTSI_ARRAY1[${i}]=$line
                    let i=${i}+1
                fi
            else
                DTSI_ARRAY1[${i}]=$line
                let i=${i}+1
            fi
    done
    unset IFS

    # print lcd.dtsi
    echo -n "------------ ready build image num is "
    echo -n ${#DTSI_ARRAY1[@]}
    echo " -------------"
    for ((i=0; i<${#DTSI_ARRAY1[@]}; i++))
    do
        echo ${DTSI_ARRAY1[$i]} #| sed 's/include/& /'
    done

    # find null line in dts
    DTS_LINE=`grep -rn "rp-lcd" $DTS_DIR | awk 'END {print}' | cut -d ":" -f 1`
    sed -i "${DTS_LINE}a //nullLine" $DTS_DIR    # add null line after last lcd dtsi
    NULL_LINE=`expr $DTS_LINE + 1`
    STRING=`cat $DTS_DIR | tail -n +$NULL_LINE | head -1`
    if [ -z $STRING ] ; then
        echo -n $TARGET_BOARD_T 
        echo -n " +"
        echo -n $NULL_LINE
        echo " is NULL"
    fi

    # start build
    DTSI_LENGTH=${#DTSI_ARRAY1[*]}
    sed -i '/^#include "rp-lcd/ s/^/\/\//' $DTS_DIR        # comment lcd dtsi that have included
    # Uncomment the specific dtsi if they are commented
        if [ "$TARGET_PLATFORM" == "rk3588" ]; then
	    sed -i 's/^\/\/#include "rp-lcd-multi-hdmi0-hdmi1-dp0.dtsi"/#include "rp-lcd-multi-hdmi0-hdmi1-dp0.dtsi"/' $DTS_DIR
            sed -i 's/^\/\/#include "rp-lcd-hdmi0.dtsi"/#include "rp-lcd-hdmi0.dtsi"/' $DTS_DIR
            sed -i 's/^\/\/#include "rp-lcd-typec-dp0.dtsi"/#include "rp-lcd-typec-dp0.dtsi"/' $DTS_DIR
        elif [ "$TARGET_PLATFORM" == "rk3399" ]; then
            sed -i 's/^\/\/#include "rp-lcd-hdmi.dtsi"/#include "rp-lcd-hdmi.dtsi"/' $DTS_DIR
        fi


    for((i=0;i<$DTSI_LENGTH;i++));
    do
        echo -e "\n\t====> now, screen board and dtsi is $TARGET_BOARD_T:${DTSI_ARRAY1[$i]}\n"
        sed -i -e "${NULL_LINE}s/.*$/${DTSI_ARRAY1[$i]}/" ${DTS_DIR}
        ./build.sh
        if [ $? -ne 0 ];then
            echo -e "\n\t====> build.sh fail!\n"
            exit -3
        else
            screen=${DTSI_ARRAY1[$i]}
            screen=${screen#*lcd-} && screen=${screen%.*}
            if [[ $screen =~ "ai" ]];then
                screen=${screen#*ai-}
            fi

            TIME=`date +%Y%m%d-%H%M%S`
            TARGET_IMAGE_NAME=update-$TARGET_BOARD_T-android13-$screen-$TIME
            
	    mv $IMAGE_PATH_T/update-*.img $IMAGE_OUT_PATH/$TARGET_IMAGE_NAME.img
        fi
    done
    echo -e "\e[32m finish batch pack\e[0m"
    sed -i -e "${NULL_LINE}d" $DTS_DIR    # pack finished, remove null line
}

function batch_compile_all() {
    if [ ! -d release_dir ];then
        mkdir release_dir
    fi

    # choose platform
    select_platform

    # choose board
    BOARD_DIR=$PLATFPRM_PATH/$TARGET_PLATFORM/rp_boards
    BOARDS=( $(cd $BOARD_DIR && ls *.mk | sort) )

    for TARGET_BOARD in "${BOARDS[@]}"; do
        echo "build target board : $TARGET_BOARD"
	    echo $TARGET_BOARD >> $PLATFPRM_PATH/.targe_platform
        ln -sf rp_boards/$TARGET_BOARD  $BOARD_DIR/../BoardConfig.mk

        TARGET_BOARD_T=${TARGET_BOARD//.mk/}
        DTS_DIR=kernel-5.10/arch/arm64/boot/dts/rockchip/$TARGET_PLATFORM/$TARGET_BOARD_T.dts
        IMAGE_PATH_T="rockdev/Image-rk$(echo $TARGET_BOARD_T | grep -oP 'rk\K\d+')_t"

        IMAGE_OUT_PATH=$(mkdir -p "release_dir/$TARGET_BOARD_T" && echo "release_dir/$TARGET_BOARD_T")
        # get all lcd.dtsi
        i=0
        IFS=$'\n'
        for line in `grep -r "rp-lcd" $DTS_DIR | sed 's/\///g'`
        do
            if [[ "$TARGET_PLATFORM" == "rk3588" || "$TARGET_PLATFORM" == "rk3399" ]]; then
                if [[ ${line} != *'rp-lcd-multi-hdmi0-hdmi1-dp0.dtsi'* && ${line} != *'rp-lcd-hdmi.dtsi'* && ${line} != *'rp-lcd-typec-dp0.dtsi'* && ${line} != *'rp-lcd-hdmi0.dtsi'* && ${line} != *'rp-lcd-hdmi1.dtsi'* ]]; then
                    DTSI_ARRAY1[${i}]=$line
                    let i=${i}+1
                fi
            else
                DTSI_ARRAY1[${i}]=$line
                let i=${i}+1
            fi
        done
        unset IFS

        # print lcd.dtsi
        echo -n "------------ ready build image num is "
        echo -n ${#DTSI_ARRAY1[@]}
        echo " -------------"
        for ((i=0; i<${#DTSI_ARRAY1[@]}; i++))
        do
            echo ${DTSI_ARRAY1[$i]} #| sed 's/include/& /'
        done

        # find null line in dts
        DTS_LINE=`grep -rn "rp-lcd" $DTS_DIR | awk 'END {print}' | cut -d ":" -f 1`
        sed -i "${DTS_LINE}a //nullLine" $DTS_DIR    # add null line after last lcd dtsi
        NULL_LINE=`expr $DTS_LINE + 1`
        STRING=`cat $DTS_DIR | tail -n +$NULL_LINE | head -1`
        if [ -z $STRING ] ; then
            echo -n $TARGET_BOARD_T 
            echo -n " +"
            echo -n $NULL_LINE
            echo " is NULL"
        fi

        # start build
        DTSI_LENGTH=${#DTSI_ARRAY1[*]}
        # Comment all the dtsi files that have included
        sed -i '/^#include "rp-lcd/ s/^/\/\//' $DTS_DIR

        # Uncomment the specific dtsi if they are commented
        if [ "$TARGET_PLATFORM" == "rk3588" ]; then
	    sed -i 's/^\/\/#include "rp-lcd-multi-hdmi0-hdmi1-dp0.dtsi"/#include "rp-lcd-multi-hdmi0-hdmi1-dp0.dtsi"/' $DTS_DIR
            sed -i 's/^\/\/#include "rp-lcd-hdmi0.dtsi"/#include "rp-lcd-hdmi0.dtsi"/' $DTS_DIR
            sed -i 's/^\/\/#include "rp-lcd-typec-dp0.dtsi"/#include "rp-lcd-typec-dp0.dtsi"/' $DTS_DIR
        elif [ "$TARGET_PLATFORM" == "rk3399" ]; then
            sed -i 's/^\/\/#include "rp-lcd-hdmi.dtsi"/#include "rp-lcd-hdmi.dtsi"/' $DTS_DIR
        fi

        for((i=0;i<$DTSI_LENGTH;i++));
        do
            echo -e "\n\t====> now, screen board and dtsi is $TARGET_BOARD_T:${DTSI_ARRAY1[$i]}\n"
            sed -i -e "${NULL_LINE}s/.*$/${DTSI_ARRAY1[$i]}/" ${DTS_DIR}
            ./build.sh
            if [ $? -ne 0 ];then
                echo -e "\n\t====> build.sh fail!\n"
                exit -3
            else
                screen=${DTSI_ARRAY1[$i]}
                screen=${screen#*lcd-} && screen=${screen%.*}
                if [[ $screen =~ "ai" ]];then
                    screen=${screen#*ai-}
                fi

                TIME=`date +%Y%m%d-%H%M%S`
                TARGET_IMAGE_NAME=update-$TARGET_BOARD_T-android13-$screen-$TIME
                
                mv $IMAGE_PATH_T/update-*.img $IMAGE_OUT_PATH/$TARGET_IMAGE_NAME.img
            fi
        done
        echo -e "\e[32m finish batch pack\e[0m"
        sed -i -e "${NULL_LINE}d" $DTS_DIR    # pack finished, remove null line
    done
}

if [ "$1" == "init" ];then
    build_init
    exit 0
elif [ "$1" == "batch" ]; then
    batch_compile
    exit 0
elif [ "$1" == "all" ]; then
    batch_compile_all
	exit 0
fi

lunch_platform
#source build/envsetup.sh >/dev/null
BUILD_UBOOT=false
BUILD_KERNEL_WITH_CLANG=false
BUILD_KERNEL=false
BUILD_ANDROID=false
BUILD_AB_IMAGE=`get_build_var BOARD_USES_AB_IMAGE`
BUILD_UPDATE_IMG=false
BUILD_OTA=false
BUILD_PACKING=false
BUILD_VARIANT=`get_build_var TARGET_BUILD_VARIANT`
KERNEL_DTS=""
BUILD_VERSION=""
BUILD_JOBS=16

if [ $# -eq 0 ]; then
    echo "Not input any arg, will build all images"
    # build all images
    BUILD_ANDROID=true
    BUILD_UBOOT=true
    BUILD_KERNEL=true
    BUILD_KERNEL_WITH_CLANG=true
    BUILD_KERNEL=true
    BUILD_UPDATE_IMG=true
fi

# check pass argument
while getopts "UCKABpouv:d:V:J:" arg
do
    case $arg in
        U)
            echo "will build u-boot"
            BUILD_UBOOT=true
            ;;
        C)
            echo "will build kernel with Clang"
            BUILD_KERNEL=true
            BUILD_KERNEL_WITH_CLANG=true
            ;;
        K)
            echo "will build kernel"
            BUILD_KERNEL=true
            ;;
        A)
            echo "will build android"
            BUILD_ANDROID=true
            ;;
        B)
            echo "will build AB Image"
            BUILD_AB_IMAGE=true
            ;;
        p)
            echo "will build packaging in IMAGE"
            BUILD_PACKING=true
            ;;
        o)
            echo "will build ota package"
            BUILD_OTA=true
            ;;
        u)
            echo "will build update.img"
            BUILD_UPDATE_IMG=true
            ;;
        v)
            BUILD_VARIANT=$OPTARG
            ;;
        V)
            BUILD_VERSION=$OPTARG
            ;;
        d)
            KERNEL_DTS=$OPTARG
            ;;
        J)
            BUILD_JOBS=$OPTARG
            ;;
        ?)
            usage ;;
    esac
done

TARGET_PRODUCT=`get_build_var TARGET_PRODUCT`
TARGET_BOARD_PLATFORM=`get_build_var TARGET_BOARD_PLATFORM`

#set jdk version
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$ANDROID_BUILD_TOP/prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

# source environment and chose target product
BUILD_NUMBER=`get_build_var BUILD_NUMBER`
BUILD_ID=`get_build_var BUILD_ID`
# only save the version code
SDK_VERSION=`get_build_var CURRENT_SDK_VERSION`
UBOOT_DEFCONFIG=`get_build_var PRODUCT_UBOOT_CONFIG`
KERNEL_VERSION=`get_build_var PRODUCT_KERNEL_VERSION`
KERNEL_ARCH=`get_build_var PRODUCT_KERNEL_ARCH`
KERNEL_DEFCONFIG=`get_build_var PRODUCT_KERNEL_CONFIG`
if [ "$KERNEL_DTS" = "" ] ; then
KERNEL_DTS=`get_build_var PRODUCT_KERNEL_DTS`
fi
LOCAL_KERNEL_PATH=kernel-$KERNEL_VERSION
echo "-------------------KERNEL_VERSION:$KERNEL_VERSION"
echo "-------------------KERNEL_DTS:$KERNEL_DTS"

if [ "$KERNEL_VERSION" = "5.10" ] ; then
echo "Force use clang and llvm to build kernel-$KERNEL_VERSION"
BUILD_KERNEL_WITH_CLANG=true
fi

PACK_TOOL_DIR=RKTools/linux/Linux_Pack_Firmware
IMAGE_PATH=rockdev/Image-$TARGET_PRODUCT
export PROJECT_TOP=`gettop`

lunch $TARGET_PRODUCT-$BUILD_VARIANT

DATE=$(date  +%Y%m%d.%H%M)
STUB_PATH=Image/"$TARGET_PRODUCT"_"$BUILD_VARIANT"_"$KERNEL_DTS"_"$BUILD_VERSION"_"$DATE"
STUB_PATH="$(echo $STUB_PATH | tr '[:lower:]' '[:upper:]')"
export STUB_PATH=$PROJECT_TOP/$STUB_PATH
export STUB_PATCH_PATH=$STUB_PATH/PATCHES

# build uboot
if [ "$BUILD_UBOOT" = true ] ; then
echo "start build uboot"
cd u-boot && make clean &&  make mrproper &&  make distclean && ./make.sh $UBOOT_DEFCONFIG && cd -
if [ $? -eq 0 ]; then
    echo "Build uboot ok!"
else
    echo "Build uboot failed!"
    exit 1
fi
fi

if [ "$BUILD_KERNEL_WITH_CLANG" = true ] ; then
if [ "$KERNEL_ARCH" = "arm64" ]; then
    ADDON_ARGS="CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1"
else
    ADDON_ARGS="CC=clang LD=ld.lld"
fi
fi
# build kernel
if [ "$BUILD_KERNEL" = true ] ; then
echo "Start build kernel"
cd $LOCAL_KERNEL_PATH && make clean && make $ADDON_ARGS ARCH=$KERNEL_ARCH $KERNEL_DEFCONFIG && make $ADDON_ARGS ARCH=$KERNEL_ARCH $KERNEL_DTS.img -j$BUILD_JOBS && cd -
if [ $? -eq 0 ]; then
    echo "Build kernel ok!"
else
    echo "Build kernel failed!"
    exit 1
fi
# build exteranl wifi driver
LOCAL_EXT_WIFI_DRIVER_PATH=external/wifi_driver
if [ -d $LOCAL_EXT_WIFI_DRIVER_PATH ]; then
source $LOCAL_EXT_WIFI_DRIVER_PATH/set_android_version.sh $LOCAL_EXT_WIFI_DRIVER_PATH
echo "Start build exteranl wifi driver"
cd $LOCAL_EXT_WIFI_DRIVER_PATH && make $ADDON_ARGS ARCH=$KERNEL_ARCH -C ../../$LOCAL_KERNEL_PATH M=$PWD clean && cd -
cd $LOCAL_EXT_WIFI_DRIVER_PATH && make $ADDON_ARGS ARCH=$KERNEL_ARCH -C ../../$LOCAL_KERNEL_PATH M=$PWD -j$BUILD_JOBS && cd -
if [ $? -eq 0 ]; then
    echo "Build exteranl wifi driver ok!"
else
    echo "Build exteranl wifi driver failed!"
    exit 1
fi
fi

if [ "$KERNEL_ARCH" = "arm64" ]; then
    KERNEL_DEBUG=$LOCAL_KERNEL_PATH/arch/arm64/boot/Image
else
    KERNEL_DEBUG=$LOCAL_KERNEL_PATH/arch/arm/boot/zImage
fi
cp -rf $KERNEL_DEBUG $OUT/kernel
fi

echo "package resoure.img with charger images"
cd u-boot && ./scripts/pack_resource.sh ../$LOCAL_KERNEL_PATH/resource.img && cp resource.img ../$LOCAL_KERNEL_PATH/resource.img && cd -

# build android
if [ "$BUILD_ANDROID" = true ] ; then
    # build OTA
    if [ "$BUILD_OTA" = true ] ; then
        INTERNAL_OTA_PACKAGE_OBJ_TARGET=obj/PACKAGING/target_files_intermediates/$TARGET_PRODUCT-target_files-*.zip
        INTERNAL_OTA_PACKAGE_TARGET=$TARGET_PRODUCT-ota-*.zip
        if [ "$BUILD_AB_IMAGE" = true ] ; then
            echo "make ab image and generate ota package"
            make installclean
            make -j$BUILD_JOBS
            # check the result of make
            if [ $? -eq 0 ]; then
                echo "Build android ok!"
            else
                echo "Build android failed!"
                exit 1
            fi

            make dist -j$BUILD_JOBS
            # check the result of make
            if [ $? -eq 0 ]; then
                echo "Build android ok!"
            else
                echo "Build android failed!"
                exit 1
            fi
            ./mkimage_ab.sh ota
            # check the result of make
            if [ $? -eq 0 ]; then
                echo "Build android ok!"
            else
                echo "Build android failed!"
                exit 1
            fi
        else
            echo "generate ota package"
	    make installclean
	    make -j$BUILD_JOBS
            # check the result of make
            if [ $? -eq 0 ]; then
                echo "Build android ok!"
            else
                echo "Build android failed!"
                exit 1
            fi
	    make dist -j$BUILD_JOBS
            # check the result of make
            if [ $? -eq 0 ]; then
                echo "Build android ok!"
            else
                echo "Build android failed!"
                exit 1
            fi
            ./mkimage.sh ota
            # check the result of make
            if [ $? -eq 0 ]; then
                echo "Build android ok!"
            else
                echo "Build android failed!"
                exit 1
            fi
        fi
        cp $OUT/$INTERNAL_OTA_PACKAGE_TARGET $IMAGE_PATH/
        cp $OUT/$INTERNAL_OTA_PACKAGE_OBJ_TARGET $IMAGE_PATH/
    else # regular build without OTA
        echo "start build android"
        make installclean
        make -j$BUILD_JOBS
        # check the result of make
        if [ $? -eq 0 ]; then
            echo "Build android ok!"
        else
            echo "Build android failed!"
            exit 1
        fi
    fi
else # repack v2 boot
    echo "Repacking header 2 boot..."
    BOOT_CMDLINE=`get_build_var BOARD_KERNEL_CMDLINE`
    SECURITY_LEVEL=`get_build_var PLATFORM_SECURITY_PATCH`
    mkbootfs -d $OUT/system $OUT/ramdisk | minigzip > $OUT/ramdisk.img
    mkbootimg --kernel $OUT/kernel --ramdisk $OUT/ramdisk.img --dtb $OUT/dtb.img --cmdline "$BOOT_CMDLINE" --os_version 12 --os_patch_level $SECURITY_LEVEL --second $LOCAL_KERNEL_PATH/resource.img --header_version 2 --output $OUT/boot.img
fi

if [ "$BUILD_OTA" != true ] ; then
	# mkimage.sh
	echo "make and copy android images"
	./mkimage.sh
	if [ $? -eq 0 ]; then
		echo "Make image ok!"
	else
		echo "Make image failed!"
		exit 1
	fi
fi

if [ "$BUILD_UPDATE_IMG" = true ] ; then
    mkdir -p $PACK_TOOL_DIR/rockdev/Image/
    cp -f $IMAGE_PATH/* $PACK_TOOL_DIR/rockdev/Image/

    echo "Make update.img"
    if [[ $TARGET_PRODUCT =~ "PX30" ]]; then
	cd $PACK_TOOL_DIR/rockdev && ./mkupdate.sh px30 Image
    elif [[ $TARGET_PRODUCT =~ "rk356x_box" ]]; then
	if [ "$BUILD_AB_IMAGE" = true ] ; then
		cd $PACK_TOOL_DIR/rockdev && ./mkupdate_ab_$TARGET_PRODUCT.sh
	else
		cd $PACK_TOOL_DIR/rockdev && ./mkupdate_$TARGET_PRODUCT.sh
	fi
    else
		cd $PACK_TOOL_DIR/rockdev && ./mkupdate.sh $TARGET_BOARD_PLATFORM Image
    fi

    if [ $? -eq 0 ]; then
        echo "Make update image ok!"
    else
        echo "Make update image failed!"
        exit 1
    fi
    cd -
    
    #rpdzkj add
    PRODUCT_KERNEL_DTS=`get_build_var PRODUCT_KERNEL_DTS`
    if echo "$PRODUCT_KERNEL_DTS" | grep -q '/'; then
	    TARGET_BUILD_DTB=$(echo "$PRODUCT_KERNEL_DTS" | cut -d'/' -f2)
    else
	    TARGET_BUILD_DTB="$PRODUCT_KERNEL_DTS"
    fi
    TARGET_BUILD_DTB=${TARGET_BUILD_DTB:-$TARGET_PRODUCT}
    BOARD_PREBUILT_DTBIMAGE_DIR=`get_build_var BOARD_PREBUILT_DTBIMAGE_DIR`
    RK_ANDROID13_DTS_DIR=$BOARD_PREBUILT_DTBIMAGE_DIR/$TARGET_BUILD_DTB.dts
    LCD_NAME=`grep '^#include.*rp.*lcd-[^g][^p]' $RK_ANDROID13_DTS_DIR | grep -v hdmi | grep -v typec| sed 's/^#include.*-lcd-//g' | sed 's/.dts.*//g'`
    LCD_NAME=${LCD_NAME:-lcd}
    TIME=`date +%Y%m%d-%H%M%S`

    mv $PACK_TOOL_DIR/rockdev/update.img $IMAGE_PATH/update-$TARGET_BUILD_DTB-android13-$LCD_NAME-$TIME.img -f
    rm $PACK_TOOL_DIR/rockdev/Image -rf
fi

if [ "$BUILD_PACKING" = true ] ; then
echo "make and copy packaging in IMAGE "

mkdir -p $STUB_PATH
mkdir -p $STUB_PATH/IMAGES/
cp $IMAGE_PATH/* $STUB_PATH/IMAGES/

#Generate patches

.repo/repo/repo forall  -c "$PROJECT_TOP/device/rockchip/common/gen_patches_body.sh"
.repo/repo/repo manifest -r -o out/commit_id.xml
#Copy stubs
cp out/commit_id.xml $STUB_PATH/manifest_${DATE}.xml

mkdir -p $STUB_PATCH_PATH/kernel
cp $LOCAL_KERNEL_PATH/.config $STUB_PATCH_PATH/kernel
cp $LOCAL_KERNEL_PATH/vmlinux $STUB_PATCH_PATH/kernel

cp build.sh $STUB_PATH/build.sh
#Save build command info
echo "Build as $LOCAL_KERNEL_PATH"                                                                   >> $STUB_PATH/build_cmd_info.txt
echo "uboot:   ./make.sh $UBOOT_DEFCONFIG"                                                           >> $STUB_PATH/build_cmd_info.txt
echo "kernel:  make ARCH=$KERNEL_ARCH $KERNEL_DEFCONFIG && make ARCH=$KERNEL_ARCH $KERNEL_DTS.img"   >> $STUB_PATH/build_cmd_info.txt
echo "android: lunch $TARGET_PRODUCT-$BUILD_VARIANT && make installclean && make"                    >> $STUB_PATH/build_cmd_info.txt
echo "version: $SDK_VERSION"                                                                         >> $STUB_PATH/build_cmd_info.txt
echo "finger:  $BUILD_ID/$BUILD_NUMBER/$BUILD_VARIANT"                                               >> $STUB_PATH/build_cmd_info.txt
fi