scripts: Adapt to new compilation requirements [1/2]

PD#SWPL-91612

Problem:
update compilation process

Solution:
fix

Verify:
N/A

Change-Id: I1232a97b092f82958a516a198d9659e2513ea983
Signed-off-by: shijie.xiong <shijie.xiong@amlogic.com>
diff --git a/package.sh b/package.sh
index 90960a7..ed40abe 100755
--- a/package.sh
+++ b/package.sh
@@ -6,10 +6,16 @@
 #
 
 RTOS_BUILD_DIR=$(realpath $(dirname $(readlink -f ${BASH_SOURCE[0]:-$0}))/..)
+BUILD_SYSTEM_DIR=$RTOS_BUILD_DIR/build_system
 
-#Package target check
+export RTOS_BUILD_DIR
+
+# Parsing large package combination information
 function package_target_verify() {
 
+    ARCH_PREFIX=""
+    PRODUCT_SUFFIX=""
+
     #Get the packed sequence selected by the user
     j=0
     while IFS= read -r LINE; do
@@ -26,218 +32,172 @@
     fi
 
     #parameter check
+    j=0
     for ((loop = 0; loop < ${#PACKAGE_ARRY[@]}; loop += 4)); do
-        arch=${PACKAGE_ARRY[loop]}
-        soc=${PACKAGE_ARRY[loop + 1]}
-        board=${PACKAGE_ARRY[loop + 2]}
-        product=${PACKAGE_ARRY[loop + 3]}
-
-        echo $arch $soc $board $product
-
-        case ${product} in
-        'hifi_dsp')
-            BUILD_DSP=1
-            DSP_ARCH=$arch
-            DSP_SOC=$soc
-            DSP_BOARD=$board
-            DSP_PRODUCT=$product
-            ;;
-        'speaker')
-            BUILD_RTOS=1
-            RTOS_ARCH=$arch
-            RTOS_SOC=$soc
-            RTOS_BOARD=$board
-            RTOS_PRODUCT=$product
-            ;;
-        *)
-            echo "Unsupported product type:${product}"
-            exit 1
-            ;;
-        esac
-
+        pkg_arch[j]=${PACKAGE_ARRY[loop]}
+        pkg_soc[j]=${PACKAGE_ARRY[loop + 1]}
+        pkg_board[j]=${PACKAGE_ARRY[loop + 2]}
+        pkg_product[j]=${PACKAGE_ARRY[loop + 3]}
+        ARCH_PREFIX="$ARCH_PREFIX""${pkg_arch[j]}""-"
+        PRODUCT_SUFFIX="$PRODUCT_SUFFIX""-""${pkg_product[j]}"
+        j+=1
     done
 
-    #Set the board configuration path
-    IMAGE_BOARD_CONFIG_DIR="image_packer/$RTOS_SOC/"
+    # set the board configuration path
+    IMAGE_BOARD_CONFIG_DIR="$RTOS_BUILD_DIR/image_packer/${pkg_soc[0]}/"
 
-    #Set up the build project
-    BUILD_CLEAN=1
-    BUILD_IMAGE=1
-    BUILD_UBOOT=1
+    # mirror storage path
+    AML_IMAGE_STORAGE_PATH=$RTOS_BUILD_DIR/output/packages/"${ARCH_PREFIX}""${pkg_soc[0]}"-"${pkg_board[0]}"
+
+    # create mirror file directory
+    rm -fr $AML_IMAGE_STORAGE_PATH
+    mkdir -p $AML_IMAGE_STORAGE_PATH
 }
 
-#Packaging environment configuration
-function package_env_config() {
+function compile_rtos_for_arm() {
+    # target file path
+    OUTPUT_PATH=${RTOS_BUILD_DIR}/output/$1-$3-$4
 
-    #Select the compile parameters of the bootstrap
-    case $1 in
-    'ad401_a113l')
-        UBOOT_BOARDNAME="a1_ad401_nand_rtos"
-        ;;
-    'ad403_a113l')
-        UBOOT_BOARDNAME="a1_ad403_nand_rtos"
-        unset BUILD_DSP
-        unset DSP_ARCH
-        ;;
-    *)
-        echo "Unsupported board type:$1"
-        exit 1
-        ;;
-    esac
+    IMAGE_PATH=${OUTPUT_PATH}/images
+    BINARY_FILE=${IMAGE_PATH}/${KERNEL}-signed.bin
+    DEBUG_FILE_PREFIX=${OUTPUT_PATH}/${KERNEL}/${KERNEL}
+    XIP_CONFIG_FILE=${RTOS_BUILD_DIR}/boards/$1/$3/lscript.h
+    BUILD_LINK_FILE=${RTOS_BUILD_DIR}/boards/$1/$3/lscript.h
 
-    #Xip config
-    case $DSP_BOARD in
-    'ad401_a113l_hifi4a_lowpower')
-        if [ $UBOOT_BOARDNAME == 'a1_ad401_nor_rtos' ]; then
-            RTOS_XIP=1
-        fi
-        ;;
-    *) ;;
+    # Clean up rtos compilation intermediate files
+    rm -rf $OUTPUT_PATH
 
-    esac
+    # rtos load address
+    LINE=$(grep -m 1 "configTEXT_BASE" $BUILD_LINK_FILE)
+    RTOS_LOAD_ADDR=$(echo "$LINE" | grep -oP '0x[0-9a-fA-F]+')
 
-    #Arch prefix settings
-    if [ -n "$RTOS_ARCH" ]; then
-        ARCH_PREFIX="${RTOS_ARCH}""-"
-        PRODUCT_SUFFIX="-""${RTOS_PRODUCT}"
-    fi
-    if [ -n "$DSP_ARCH" ]; then
-        ARCH_PREFIX="${ARCH_PREFIX}""${DSP_ARCH}""-"
-        PRODUCT_SUFFIX="${PRODUCT_SUFFIX}""-""${DSP_PRODUCT}"
-    fi
-}
+    # determine whether to enable the xip function
+    RTOS_XIP=$(grep -E "^#define\s+CONFIG_XIP\s+[01]$" "$XIP_CONFIG_FILE" | awk '{print $3}')
 
-#build rtos dsp
-function build_rtos_dsp() {
-
+    # start compile flow
     pushd $RTOS_BUILD_DIR
 
-    source scripts/env.sh ${DSP_ARCH} ${DSP_SOC} ${DSP_BOARD} ${DSP_PRODUCT}
+    source scripts/env.sh $1 $2 $3 $4
 
-    make
-
-    test -f ${DSP_SDK_SINGED_BIN_FILE} && cp ${DSP_SDK_SINGED_BIN_FILE} $PROJECT_BUILD_OUT_IMAGE_PATH/dspboot.bin
-    test -f ${DSP_SDK_DEBUG_FILE_PREFIX}.lst && cp ${DSP_SDK_DEBUG_FILE_PREFIX}.lst $PROJECT_BUILD_OUT_IMAGE_PATH/${DSP_ARCH}-${DSP_BOARD}.lst
-    test -f ${DSP_SDK_DEBUG_FILE_PREFIX}.map && cp ${DSP_SDK_DEBUG_FILE_PREFIX}.map $PROJECT_BUILD_OUT_IMAGE_PATH/${DSP_ARCH}-${DSP_BOARD}.map
-    rm -rf $DSP_SDK_OUT_PATH
-
-    popd
-}
-
-#build rtos uimage
-function build_rtos_image() {
-
-    pushd $RTOS_BUILD_DIR
-
-    source scripts/env.sh ${RTOS_ARCH} ${RTOS_SOC} ${RTOS_BOARD} ${RTOS_PRODUCT}
-
-    if [ -n "$RTOS_XIP" ]; then
-        sed -i -e 's/CONFIG_XIP .*$/CONFIG_XIP 1/' $RTOS_XIP_CONFIG_FILE
-    fi
-
-    if [ -n "$1" ] &&
-        [ $1 == "backtrace" ]; then
+    if [ "$BACKTRACE_ENABLE" = "1" ]; then
         make backtrace
-        if [ -n "$RTOS_XIP" ]; then
-            make -f ${BUILD_SYSTEM_DIR}/xip.mk xip
-            cp ${RTOS_SDK_OUT_PATH}/${KERNEL}/${KERNEL}.bin ${RTOS_SDK_SINGED_BIN_FILE}
-        fi
     else
         make
-        if [ -n "$RTOS_XIP" ]; then
-            make -f ${BUILD_SYSTEM_DIR}/xip.mk xip
-            cp ${RTOS_SDK_OUT_PATH}/${KERNEL}/${KERNEL}.bin ${RTOS_SDK_SINGED_BIN_FILE}
-        fi
-    fi
-
-    if [ -n "$RTOS_XIP" ]; then
-        sed -i -e 's/CONFIG_XIP .*$/CONFIG_XIP 0/' $RTOS_XIP_CONFIG_FILE
     fi
 
     if [ $? -ne 0 ]; then
         echo "bulid rtos image faile error:$?"
         popd
         exit 1
-    else
-        if [ -z "$RTOS_XIP" ]; then
-            mkimage -A ${ARCH} -O u-boot -T standalone -C none -a 0x1000 -e 0x1000 -n rtos -d ${RTOS_SDK_SINGED_BIN_FILE} ${RTOS_SDK_IMAGE_PATH}/rtos-uImage
-            test -f ${RTOS_SDK_IMAGE_PATH}/rtos-uImage && cp ${RTOS_SDK_IMAGE_PATH}/rtos-uImage $PROJECT_BUILD_OUT_IMAGE_PATH/rtos-uImage
-            test -f ${RTOS_SDK_DEBUG_FILE_PREFIX}.lst && cp ${RTOS_SDK_DEBUG_FILE_PREFIX}.lst $PROJECT_BUILD_OUT_IMAGE_PATH/${RTOS_ARCH}-${RTOS_BOARD}.lst
-            test -f ${RTOS_SDK_DEBUG_FILE_PREFIX}.map && cp ${RTOS_SDK_DEBUG_FILE_PREFIX}.map $PROJECT_BUILD_OUT_IMAGE_PATH/${RTOS_ARCH}-${RTOS_BOARD}.map
-            rm -rf $RTOS_SDK_OUT_PATH
-        else
-            mkimage -A ${ARCH} -O u-boot -T standalone -C none -a 0x1000 -e 0x1000 -n rtos -d ${RTOS_SDK_SINGED_BIN_FILE} ${RTOS_SDK_IMAGE_PATH}/rtos-uImage
-            cp ${RTOS_SDK_OUT_PATH}/freertos/freertos_b.bin ${RTOS_SDK_IMAGE_PATH}/rtos-xipA
-            cp ${RTOS_SDK_IMAGE_PATH}/* $PROJECT_BUILD_OUT_IMAGE_PATH/
-            test -f ${RTOS_SDK_DEBUG_FILE_PREFIX}.lst && cp ${RTOS_SDK_DEBUG_FILE_PREFIX}.lst $PROJECT_BUILD_OUT_IMAGE_PATH/${RTOS_ARCH}-${RTOS_BOARD}.lst
-            test -f ${RTOS_SDK_DEBUG_FILE_PREFIX}.map && cp ${RTOS_SDK_DEBUG_FILE_PREFIX}.map $PROJECT_BUILD_OUT_IMAGE_PATH/${RTOS_ARCH}-${RTOS_BOARD}.map
-            rm -rf $RTOS_SDK_OUT_PATH
-        fi
     fi
 
+    if [ "$RTOS_XIP" = "1" ]; then
+        make -f ${BUILD_SYSTEM_DIR}/xip.mk xip
+        cp ${OUTPUT_PATH}/${KERNEL}/${KERNEL}.bin ${BINARY_FILE}
+    fi
+
+    mkimage -A ${ARCH} -O u-boot -T standalone -C none -a ${RTOS_LOAD_ADDR} -e ${RTOS_LOAD_ADDR} -n rtos -d ${BINARY_FILE} ${IMAGE_PATH}/rtos-uImage
+
+    if [ "$RTOS_XIP" = "1" ]; then
+        cp ${OUTPUT_PATH}/freertos/freertos_b.bin ${IMAGE_PATH}/rtos-xipA
+        cp ${IMAGE_PATH}/* $AML_IMAGE_STORAGE_PATH/
+    else
+        test -f ${IMAGE_PATH}/rtos-uImage && cp ${IMAGE_PATH}/rtos-uImage $AML_IMAGE_STORAGE_PATH/rtos-uImage
+    fi
+
+    test -f ${DEBUG_FILE_PREFIX}.lst && cp ${DEBUG_FILE_PREFIX}.lst $AML_IMAGE_STORAGE_PATH/$1-$3.lst
+    test -f ${DEBUG_FILE_PREFIX}.map && cp ${DEBUG_FILE_PREFIX}.map $AML_IMAGE_STORAGE_PATH/$1-$3.map
+
     popd
 }
 
-#build aml image
-function build_aml_image() {
-    install $RTOS_BUILD_DIR/$IMAGE_BOARD_CONFIG_DIR/platform.conf $PROJECT_BUILD_OUT_IMAGE_PATH/
-    install $RTOS_BUILD_DIR/$IMAGE_BOARD_CONFIG_DIR/usb_flow.aml $PROJECT_BUILD_OUT_IMAGE_PATH/
-    install $RTOS_BUILD_DIR/$IMAGE_BOARD_CONFIG_DIR/aml_sdc_burn.ini $PROJECT_BUILD_OUT_IMAGE_PATH/
-    if [ -z "$BUILD_DSP" ]; then
-        install $RTOS_BUILD_DIR/$IMAGE_BOARD_CONFIG_DIR/aml_upgrade_package_ndsp.conf $PROJECT_BUILD_OUT_IMAGE_PATH/
-        $RTOS_BUILD_DIR/image_packer/aml_image_v2_packer -r $PROJECT_BUILD_OUT_IMAGE_PATH/aml_upgrade_package_ndsp.conf $PROJECT_BUILD_OUT_IMAGE_PATH $PROJECT_BUILD_OUT_IMAGE_PATH/aml_upgrade_package.img
+function compile_rtos_for_other() {
+    # target file path
+    OUTPUT_PATH=${RTOS_BUILD_DIR}/output/$1-$3-$4
+
+    IMAGE_PATH=${OUTPUT_PATH}/images
+    BINARY_FILE=${IMAGE_PATH}/${KERNEL}-signed.bin
+    DEBUG_FILE_PREFIX=${OUTPUT_PATH}/${KERNEL}/${KERNEL}
+
+    # Clean up rtos compilation intermediate files
+    rm -rf $OUTPUT_PATH
+
+    # start compile flow
+    pushd $RTOS_BUILD_DIR
+
+    source scripts/env.sh $1 $2 $3 $4
+
+    make
+
+    if [ "$1" == "xtensa" ]; then
+        test -f ${BINARY_FILE} && cp ${BINARY_FILE} $AML_IMAGE_STORAGE_PATH/dspboot.bin
     else
-        if [ -z "$RTOS_XIP" ]; then
-            install $RTOS_BUILD_DIR/$IMAGE_BOARD_CONFIG_DIR/aml_upgrade_package.conf $PROJECT_BUILD_OUT_IMAGE_PATH/
-            $RTOS_BUILD_DIR/image_packer/aml_image_v2_packer -r $PROJECT_BUILD_OUT_IMAGE_PATH/aml_upgrade_package.conf $PROJECT_BUILD_OUT_IMAGE_PATH $PROJECT_BUILD_OUT_IMAGE_PATH/aml_upgrade_package.img
-        else
-            install $RTOS_BUILD_DIR/$IMAGE_BOARD_CONFIG_DIR/aml_upgrade_package_xip.conf $PROJECT_BUILD_OUT_IMAGE_PATH/
-            $RTOS_BUILD_DIR/image_packer/aml_image_v2_packer -r $PROJECT_BUILD_OUT_IMAGE_PATH/aml_upgrade_package_xip.conf $PROJECT_BUILD_OUT_IMAGE_PATH $PROJECT_BUILD_OUT_IMAGE_PATH/aml_upgrade_package.img
-        fi
+        test -f ${BINARY_FILE} && cp ${BINARY_FILE} $AML_IMAGE_STORAGE_PATH/${KERNEL}-signed.bin
     fi
 
-    cd $PROJECT_BUILD_OUT_IMAGE_PATH && rm $(ls | grep -v ".lst" | grep -v ".map" | grep -v ".img")
+    test -f ${DEBUG_FILE_PREFIX}.lst && cp ${DEBUG_FILE_PREFIX}.lst $AML_IMAGE_STORAGE_PATH/$1-$3.lst
+    test -f ${DEBUG_FILE_PREFIX}.map && cp ${DEBUG_FILE_PREFIX}.map $AML_IMAGE_STORAGE_PATH/$1-$3.map
+
+    popd
 }
 
-#build uboot
-function build_uboot() {
-    echo "UBOOT COMPILE START"
-    if [ -z "$UBOOT_BOARDNAME" ]; then
-        echo "Select board($BOARD) not support compile uboot"
+# Compile rtos for all architectures
+function compile_rtos_for_all() {
+    for ((loop = 0; loop < ${#pkg_board[@]}; loop += 1)); do
+        if [[ ${pkg_arch[loop]} == *"arm"* ]]; then
+            compile_rtos_for_arm ${pkg_arch[loop]} ${pkg_soc[loop]} ${pkg_board[loop]} ${pkg_product[loop]}
+        else
+            compile_rtos_for_other ${pkg_arch[loop]} ${pkg_soc[loop]} ${pkg_board[loop]} ${pkg_product[loop]}
+        fi
+    done
+}
+
+# Compile the bootloader
+function build_bootloader() {
+    echo "start compiling bootloader ..."
+    echo "<-------------- ${pkg_arch[0]} ${pkg_soc[0]} ${pkg_board[0]} ${pkg_product[0]} -------------->"
+
+    #Select the compile parameters of the bootstrap
+    case ${pkg_board[0]} in
+    'ad401_a113l')
+        uboot_type="a1_ad401_nand_rtos"
+        ;;
+    'ad403_a113l')
+        uboot_type="a1_ad403_nand_rtos"
+        ;;
+    *) ;;
+    esac
+
+    if [ -z "$uboot_type" ]; then
+        echo "Waring: Select board(${pkg_board[0]}) not support compile uboot"
         exit 1
     else
         pushd $RTOS_BUILD_DIR/boot/u-boot
-        ./mk $UBOOT_BOARDNAME
-        test -f build/u-boot.bin && cp -av build/u-boot.bin* $PROJECT_BUILD_OUT_IMAGE_PATH
+        ./mk $uboot_type
+        test -f build/u-boot.bin && cp -av build/u-boot.bin* $AML_IMAGE_STORAGE_PATH
         popd
     fi
 }
 
+function aml_image_package() {
+    install $IMAGE_BOARD_CONFIG_DIR/platform.conf $AML_IMAGE_STORAGE_PATH/
+    install $IMAGE_BOARD_CONFIG_DIR/usb_flow.aml $AML_IMAGE_STORAGE_PATH/
+    install $IMAGE_BOARD_CONFIG_DIR/aml_sdc_burn.ini $AML_IMAGE_STORAGE_PATH/
+
+    if [ -e "$AML_IMAGE_STORAGE_PATH/dspboot.bin" ]; then
+        cp $IMAGE_BOARD_CONFIG_DIR/aml_upgrade_package.conf $AML_IMAGE_STORAGE_PATH/aml_upgrade_package.conf
+    elif [ -e "$AML_IMAGE_STORAGE_PATH/rtos-xipA.bin" ]; then
+        cp $IMAGE_BOARD_CONFIG_DIR/aml_upgrade_package_xip.conf $AML_IMAGE_STORAGE_PATH/aml_upgrade_package.conf
+    else
+        cp $IMAGE_BOARD_CONFIG_DIR/aml_upgrade_package_ndsp.conf $AML_IMAGE_STORAGE_PATH/aml_upgrade_package.conf
+    fi
+
+    $RTOS_BUILD_DIR/image_packer/aml_image_v2_packer -r $AML_IMAGE_STORAGE_PATH/aml_upgrade_package.conf $AML_IMAGE_STORAGE_PATH $AML_IMAGE_STORAGE_PATH/aml_upgrade_package.img
+
+    cd $AML_IMAGE_STORAGE_PATH && rm $(ls | grep -v ".lst" | grep -v ".map" | grep -v ".img")
+}
+
 package_target_verify
-package_env_config $RTOS_BOARD
-
-export BUILD_SYSTEM_DIR=${RTOS_BUILD_DIR}/build_system
-export RTOS_XIP_CONFIG_FILE=${RTOS_BUILD_DIR}/boards/${RTOS_ARCH}/${RTOS_BOARD}/lscript.h
-export PROJECT_BUILD_OUT_IMAGE_PATH=${RTOS_BUILD_DIR}/output/packages/"${ARCH_PREFIX}""${RTOS_SOC}"-${RTOS_BOARD}
-
-export RTOS_SDK_OUT_PATH=${RTOS_BUILD_DIR}/output/${RTOS_ARCH}-${RTOS_BOARD}-${RTOS_PRODUCT}
-export RTOS_SDK_IMAGE_PATH=${RTOS_BUILD_DIR}/output/${RTOS_ARCH}-${RTOS_BOARD}-${RTOS_PRODUCT}/images
-export RTOS_SDK_SINGED_BIN_FILE=${RTOS_BUILD_DIR}/output/${RTOS_ARCH}-${RTOS_BOARD}-${RTOS_PRODUCT}/images/${KERNEL}-signed.bin
-export RTOS_SDK_DEBUG_FILE_PREFIX=${RTOS_BUILD_DIR}/output/${RTOS_ARCH}-${RTOS_BOARD}-${RTOS_PRODUCT}/${KERNEL}/${KERNEL}
-
-export DSP_SDK_OUT_PATH=${RTOS_BUILD_DIR}/output/${DSP_ARCH}-${DSP_BOARD}-${DSP_PRODUCT}
-export DSP_SDK_IMAGE_PATH=${RTOS_BUILD_DIR}/output/${DSP_ARCH}-${DSP_BOARD}-${DSP_PRODUCT}/images
-export DSP_SDK_SINGED_BIN_FILE=${RTOS_BUILD_DIR}/output/${DSP_ARCH}-${DSP_BOARD}-${DSP_PRODUCT}/images/${KERNEL}-signed.bin
-export DSP_SDK_DEBUG_FILE_PREFIX=${RTOS_BUILD_DIR}/output/${DSP_ARCH}-${DSP_BOARD}-${DSP_PRODUCT}/${KERNEL}/${KERNEL}
-
-test -n "$BUILD_CLEAN" && rm -fr $DSP_SDK_OUT_PATH
-test -n "$BUILD_CLEAN" && rm -fr $RTOS_SDK_OUT_PATH
-test -n "$BUILD_CLEAN" && rm -fr $PROJECT_BUILD_OUT_IMAGE_PATH
-mkdir -p $PROJECT_BUILD_OUT_IMAGE_PATH
-
-test -n "$BUILD_RTOS" && build_rtos_image $1
-test -n "$BUILD_DSP" && build_rtos_dsp
-test -n "$BUILD_UBOOT" && build_uboot
-test -n "$BUILD_IMAGE" && build_aml_image
-
-echo "======Done======"
+compile_rtos_for_all
+build_bootloader
+aml_image_package