#!/bin/sh
APP_BIN_NAME=$1
APP_VERSION=$2
CURR_TARGET_PLATFORM=$3
APP_PATH=../../../$4
USER_CMD=$5

# for test
#TARGET_PLATFORM=bk7258
TARGET_PLATFORM=bk7236

echo APP_BIN_NAME=$APP_BIN_NAME
echo APP_VERSION=$APP_VERSION
echo TARGET_PLATFORM=$TARGET_PLATFORM
echo CURR_TARGET_PLATFORM=$CURR_TARGET_PLATFORM
echo APP_PATH=$APP_PATH
echo USER_CMD=$USER_CMD

export TUYA_APP_PATH=$APP_PATH
export TUYA_APP_NAME=$APP_BIN_NAME

p=$(pwd);p1=${p%%/vendor*};echo $p1
export TUYA_PROJECT_DIR=$p1

USER_SW_VER=`echo $APP_VERSION | cut -d'-' -f1`

APP_DIR_temp=$(echo $APP_PROJ_PATH)
if [ "x$APP_DIR_temp" != "x" ];then
    last_character=$(echo -n $APP_PROJ_PATH | tail -c 1)
    if [ "x$last_character" = 'x/' ];then
        APP_DIR_temp=${APP_PROJ_PATH%?}
    else
        APP_DIR_temp=$APP_PROJ_PATH
    fi
    APP_DIR=${APP_DIR_temp%/*}
else
APP_DIR=apps
fi

echo "Start Compile"

APP_PATH=../../$APP_DIR

# Remove TUYA APP OBJs first
if [ -e "${APP_OBJ_PATH}/$APP_BIN_NAME/src" ]; then
for i in `find ${APP_OBJ_PATH}/$APP_BIN_NAME/src -type d`; do
    echo "Deleting $i"
    rm -rf $i/*.o
done
fi

if [ -z $CI_PACKAGE_PATH ]; then
    echo "not is ci build"
else
    cp ./tuya_build/${TARGET_PLATFORM}/config/sdkconfig.h ./
	make clean -C ./armino/
	rm -rf ./tuya_build
    mkdir -p ./tuya_build/${TARGET_PLATFORM}/config/
    cp ./sdkconfig.h ./tuya_build/${TARGET_PLATFORM}/config/
    rm -rf ./sdkconfig.h
fi

if [ x$USER_CMD = "xclean" ];then
    cp ./tuya_build/${TARGET_PLATFORM}/config/sdkconfig.h ./
	make clean -C ./armino/
	rm -rf ./tuya_build
    mkdir -p ./tuya_build/${TARGET_PLATFORM}/config/
    cp ./sdkconfig.h ./tuya_build/${TARGET_PLATFORM}/config/
    rm -rf ./sdkconfig.h
	echo "*************************************************************************"
	echo "************************CLEAN SUCCESS************************************"
	echo "*************************************************************************"
	exit 0
fi

# lwip check
sdk_config_file=${TUYA_PROJECT_DIR}/include/base/include/tuya_iot_config.h
if [ ! -f ${sdk_config_file} ]; then
    echo "${sdk_config_file} is not exist"
    exit -1;
fi

ty_lwip=$(grep -wcE "#define *ENABLE_LWIP" ${sdk_config_file})
if [ "x$ty_lwip" = "x1" ]; then
    echo "------ use tuya lwip ------"
    export TUYA_LWIP_STACK_USED="lwip_tuya"
    make tuya_lwip -f env.mk
else
    echo "------ use bk lwip ------"
    export TUYA_LWIP_STACK_USED="lwip_bk"
    cp tuya_app/config/bk7236/config .bk7236_config.save
    sed -i "s/CONFIG_LWIP=n/CONFIG_LWIP=y/g" tuya_app/config/bk7236/config
    sed -i "s/CONFIG_LWIP_V2_1=n/CONFIG_LWIP_V2_1=y/g" tuya_app/config/bk7236/config
fi

echo "CHECK COMPONENTS"
is_componenst_file_exist=0
if [ -f "${TUYA_PROJECT_DIR}/apps/$APP_BIN_NAME/components.mk" ]; then
    is_componenst_file_exist=1
    comp_dir=""
    if [ -d "${TUYA_PROJECT_DIR}/application_components" ]; then
        comp_dir=application_components
    elif [ -d "${TUYA_PROJECT_DIR}/components" ]; then
        comp_dir=components
    fi # comp_dir
    echo "components path: $comp_dir"

    make tuya_components -f env.mk COMPONENTS_PATH=$comp_dir APP=$APP_BIN_NAME

fi # components.mk

default_gpio_file=${TUYA_PROJECT_DIR}/apps/$APP_BIN_NAME/default_gpio_config.json
out_file_patch=${TUYA_PROJECT_DIR}/vendor/${CURR_TARGET_PLATFORM}/t3_os/armino/include/
if [ ! -f ${default_gpio_file} ]; then
    cp ./default_gpio_config.json $default_gpio_file
    python3 ./default_gpio_config.py $default_gpio_file $out_file_patch
else
    python3 ./default_gpio_config.py $default_gpio_file $out_file_patch
fi

export PYTHONPATH=${TUYA_PROJECT_DIR}/vendor/${CURR_TARGET_PLATFORM}/toolchain/site-packages:${PYTHONPATH}

echo "APP_DIR:"$APP_DIR
make ${TARGET_PLATFORM} PROJECT=app PROJECT_DIR=../tuya_app BUILD_DIR=../tuya_build PROJECT_LIBS=app APP_NAME=$APP_BIN_NAME APP_VERSION=$USER_SW_VER APP_DIR=$APP_PATH -j -C ./armino/ APP_VERSION=${APP_VERSION} 
res=$(echo $?)

# delete file whether it exists
rm -f .tmp_component_desc
if [ "x${TUYA_LWIP_STACK_USED}" = "xlwip_bk" ]; then
    mv .bk7236_config.save tuya_app/config/bk7236/config
else
    rm -rf ../tuyaos/tuya_os_adapter/lwip_intf_v2_1
fi

rm -rf $default_gpio_file ${out_file_patch}/default_gpio_config.h

if [ $res -ne 0 ]; then
    echo "make failed"
    exit -1
fi

echo "Start Combined"

OUTPUT_PATH=""
if [ "x${CI_PACKAGE_PATH}" != "x" ]; then
    echo "ci build"
    OUTPUT_PATH=${CI_PACKAGE_PATH}
else
    echo "local build"
    OUTPUT_PATH=../../../apps/$APP_BIN_NAME/output/$USER_SW_VER
fi

if [ ! -d "$OUTPUT_PATH" ]; then
	mkdir -p $OUTPUT_PATH
fi


if [ -e "./tuya_build/${TARGET_PLATFORM}/all-app.bin" ]; then
#    B_OFFSET=$(grep -h "_ty_section_start" ./tuya_build/${TARGET_PLATFORM}/app.map | awk '/0x[0-9a-fA-F]+/ {print $1}' | xargs printf "%d")
    B_OFFSET=$(grep "_ty_section_start" -r ./tuya_build/${TARGET_PLATFORM}/app.map | awk '{print strtonum($1)}')
    echo ":$B_OFFSET"          #0x2173000:35074048
	B_OFFSET_NUM=$(printf "%d" "$((${B_OFFSET}-33554432-65536))")  # 0x2000000=33554432
    echo ":$B_OFFSET_NUM"   #3B6000   19a800  260000 0x163000:1454080
    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n"  #langer 20250219
	python3 ./format_up_bin.py ./tuya_build/${TARGET_PLATFORM}/app_pack.bin ./tuya_build/${TARGET_PLATFORM}/app_ug.bin 3B6000  1000 0 1000 10D0 ${B_OFFSET_NUM} -v
    ./diff2ya ./tuya_build/${TARGET_PLATFORM}/app_ug.bin ./tuya_build/${TARGET_PLATFORM}/app_ug.bin ./tuya_build/${TARGET_PLATFORM}/app_ota_ug.bin 0

	cp ./tuya_build/${TARGET_PLATFORM}/app_ota_ug.bin   $OUTPUT_PATH/$APP_BIN_NAME"_UG_"$USER_SW_VER.bin
	cp ./tuya_build/${TARGET_PLATFORM}/app_pack.bin     $OUTPUT_PATH/$APP_BIN_NAME"_UA_"$USER_SW_VER.bin
	cp ./tuya_build/${TARGET_PLATFORM}/all-app.bin      $OUTPUT_PATH/$APP_BIN_NAME"_QIO_"$USER_SW_VER.bin
	cp ./tuya_build/${TARGET_PLATFORM}/app.elf          $OUTPUT_PATH/$APP_BIN_NAME"_"$USER_SW_VER.elf
	cp ./tuya_build/${TARGET_PLATFORM}/app.map          $OUTPUT_PATH/$APP_BIN_NAME"_"$USER_SW_VER.map
	cp ./tuya_build/${TARGET_PLATFORM}/app.nm           $OUTPUT_PATH/$APP_BIN_NAME"_"$USER_SW_VER.nm
	cp ./tuya_build/${TARGET_PLATFORM}/app.txt          $OUTPUT_PATH/$APP_BIN_NAME"_"$USER_SW_VER.txt
	cp ./tuya_build/${TARGET_PLATFORM}/size_map*        $OUTPUT_PATH/
fi

echo "*************************************************************************"
echo "*************************************************************************"
echo "*************************************************************************"
echo "*********************${APP_BIN_NAME}_$APP_VERSION.bin********************"
echo "*************************************************************************"
echo "**********************COMPILE SUCCESS************************************"
echo "*************************************************************************"

