#!/bin/bash

LOCAL_PATH="$(readlink -f $(dirname ${BASH_SOURCE[0]})/)"


readonly cross_compile=${LOCAL_PATH}/../../sdk/linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-elf/bin/aarch64-elf-
readonly cross_compile_t32=${LOCAL_PATH}/../../sdk/linaro/gcc-arm-none-eabi-6-2017-q2-update/bin/arm-none-eabi-

function pre_build_uboot() {
	cd ${UBOOT_SRC_FOLDER}
	echo -n "Compile config: "
	echo "$1"
	make distclean # &> /dev/null
	make CROSS_COMPILE=$cross_compile CROSS_COMPILE_T32=$cross_compile_t32 $1'_config' # &> /dev/null
	if [ $? != 0 ]
	then
		echo "Pre-build failed! exit!"
		cd ${MAIN_FOLDER}
		exit -1
	fi
	cd ${MAIN_FOLDER}
}

function build_uboot() {
	echo "Build uboot...Please Wait..."
	mkdir -p ${FIP_BUILD_FOLDER}
	cd ${UBOOT_SRC_FOLDER}
	# make T=1 to use latest git commit time as build timestamp.
	make BOARD_NAME=$2 T=1 CROSS_COMPILE=$cross_compile CROSS_COMPILE_T32=$cross_compile_t32 BL33_DEBUG=$1 -j # &> /dev/null
	ret=$?
	cd ${MAIN_FOLDER}
	if [ 0 -ne $ret ]; then
		echo "Error: U-boot build failed... abort"
		exit -1
	fi
	find ./ -name u-boot.bin
	echo "find u-boot.bin done"
}

function uboot_config_list() {
	folder_board="${UBOOT_SRC_FOLDER}/board/amlogic"
	echo "      ******Amlogic Configs******"
	for file in ${folder_board}/*; do
		temp_file=`basename $file`
		#echo "$temp_file"
		if [ -d ${folder_board}/${temp_file} ] && [ "$temp_file" != "defconfigs" ] && [ "$temp_file" != "configs" ];then
			echo "          ${temp_file}"
		fi
	done

	customer_folder="${UBOOT_SRC_FOLDER}/customer/board"
	if [ -e ${customer_folder} ]; then
		echo "      ******Customer Configs******"
		for file in ${customer_folder}/*; do
			temp_file=`basename $file`
			if [ -d ${customer_folder}/${temp_file} ] && [ "$temp_file" != "defconfigs" ] && [ "$temp_file" != "configs" ];then
				echo "          ${temp_file}"
			fi
		done
	fi
	echo "      ***************************"
}

function copy_bl33() {
	cp ${UBOOT_SRC_FOLDER}/u-boot.bin ${FIP_BUILD_FOLDER}bl33.bin -f
}
