367 lines
9.4 KiB
Bash
Executable File
367 lines
9.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#
|
|
#build.sh for uboot/spl
|
|
#wangwei@allwinnertech
|
|
#
|
|
|
|
TOP_DIR=$(cd `dirname $0`;pwd;cd - >/dev/null 2>&1)
|
|
BRANDY_SPL_DIR=$TOP_DIR/spl
|
|
BRANDY_SPL_PUB_DIR=$TOP_DIR/spl-pub
|
|
SPL_OLD=$(grep ".module.common.mk" ${BRANDY_SPL_DIR}/Makefile)
|
|
set -e
|
|
|
|
get_sys_config_name()
|
|
{
|
|
[ -f $TOP_DIR/u-boot-2018/.config ] && \
|
|
awk -F '=' '/CONFIG_SYS_CONFIG_NAME=/{print $2}' $TOP_DIR/u-boot-2018/.config | sed 's|"||g'
|
|
}
|
|
|
|
show_help()
|
|
{
|
|
printf "\nbuild.sh - Top level build scritps\n"
|
|
echo "Valid Options:"
|
|
echo " -h Show help message"
|
|
echo " -t install gcc tools chain"
|
|
echo " -o build,e.g. uboot,spl,clean"
|
|
echo " -p <platform> platform, e.g. sun8iw18p1, sun5i, sun6i, sun8iw1p1, sun8iw3p1, sun9iw1p1"
|
|
echo " -m mode,e.g. nand,mmc,nor"
|
|
echo " -c copy,e.g. any para"
|
|
echo "example:"
|
|
echo "./build.sh -o uboot -p sun8iw18p1"
|
|
echo "./build.sh -o spl -p sun8iw18p1 -m nand"
|
|
echo "./build.sh -o spl -p sun8iw18p1 -m nand -c copy"
|
|
printf "\n\n"
|
|
}
|
|
|
|
prepare_toolchain()
|
|
{
|
|
local ARCH="arm";
|
|
local GCC="";
|
|
local GCC_PREFIX="";
|
|
local toolchain_archive_arm="./tools/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz";
|
|
local tooldir_arm="./tools/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi";
|
|
|
|
echo "Prepare toolchain ..."
|
|
|
|
if [ ! -e "${tooldir_arm}/.prepared" ]; then
|
|
rm -rf "${toolchain_arm}"
|
|
mkdir -p ${tooldir_arm} || exit 1
|
|
tar --strip-components=1 -xf ${toolchain_archive_arm} -C ${tooldir_arm} || exit 1
|
|
touch "${tooldir_arm}/.prepared"
|
|
fi
|
|
}
|
|
|
|
function build_clean()
|
|
{
|
|
(cd $TOP_DIR/spl; make distclean)
|
|
(cd $TOP_DIR/spl-pub; make distclean)
|
|
(cd $TOP_DIR/u-boot-2018; make distclean)
|
|
}
|
|
|
|
build_uboot_once()
|
|
{
|
|
local defconfig=$1
|
|
local CONFIG_SYS_CONFIG_NAME=$(get_sys_config_name)
|
|
if [ "x${defconfig}" = "x" ];then
|
|
echo "please set defconfig"
|
|
exit 1
|
|
fi
|
|
echo build for ${defconfig} ...
|
|
(
|
|
cd u-boot-2018/
|
|
if [ -f .tmp_defcofig.o.md5sum ];then
|
|
last_defconfig_md5sum=$(awk '{printf $1}' ".tmp_defcofig.o.md5sum")
|
|
fi
|
|
if [ -f .config ];then
|
|
cur_defconfig_md5sum=$(md5sum "configs/${defconfig}" | awk '{printf $1}')
|
|
if [ "x${CONFIG_SYS_CONFIG_NAME}" != "x${PLATFORM}" ];then
|
|
make distclean
|
|
make ${defconfig}
|
|
elif [ "x${last_defconfig_md5sum}" != "x${cur_defconfig_md5sum}" ];then
|
|
make ${defconfig}
|
|
fi
|
|
else
|
|
make distclean
|
|
make ${defconfig}
|
|
fi
|
|
make -j16
|
|
)
|
|
}
|
|
|
|
function build_uboot()
|
|
{
|
|
if [ "x${PLATFORM}" = "xall" ];then
|
|
for defconfig in `ls ${TOP_DIR}/u-boot-2018/configs`;do
|
|
if [[ $defconfig =~ .*_defconfig$ ]];then
|
|
build_uboot_once $defconfig
|
|
fi
|
|
done
|
|
else
|
|
if [ "x${LICHEE_FLASH}" = "x" ];then
|
|
for defconfig in `ls ${TOP_DIR}/u-boot-2018/configs/${PLATFORM}_*`;do
|
|
if [[ $defconfig =~ .*_defconfig$ ]];then
|
|
build_uboot_once ${defconfig##*/}
|
|
fi
|
|
done
|
|
elif [ "x${LICHEE_FLASH}" = "xdefault" ];then
|
|
build_uboot_once ${PLATFORM}_defconfig
|
|
#spi nor need same offset in different bin(one for burn, one for load), check if they are the same
|
|
local NOR_UBOOT_OFFSET=(0 0 0 0)
|
|
local NOR_LOGICAL_OFFSET=(0 0 0 0)
|
|
elif [ "x${LICHEE_FLASH}" = "xnor" ];then
|
|
if [ -e ${TOP_DIR}/u-boot-2018/configs/${PLATFORM}_nor_defconfig ]; then
|
|
build_uboot_once ${PLATFORM}_defconfig
|
|
NOR_UBOOT_OFFSET[0]=`grep CONFIG_SPINOR_UBOOT_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
NOR_LOGICAL_OFFSET[0]=`grep CONFIG_SPINOR_LOGICAL_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
NOR_UBOOT_OFFSET[2]=`grep CONFIG_SPINOR_UBOOT_SECURE_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
NOR_LOGICAL_OFFSET[2]=`grep CONFIG_SPINOR_LOGICAL_SECURE_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
build_uboot_once ${PLATFORM}_nor_defconfig
|
|
NOR_UBOOT_OFFSET[1]=`grep CONFIG_SPINOR_UBOOT_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
NOR_LOGICAL_OFFSET[1]=`grep CONFIG_SPINOR_LOGICAL_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
if [ ${NOR_UBOOT_OFFSET[0]} -ne ${NOR_UBOOT_OFFSET[1]} ]; then
|
|
echo "UBOOT OFFSET NOT MATCH, burn to ${NOR_UBOOT_OFFSET[0]}, load from ${NOR_UBOOT_OFFSET[1]}"
|
|
exit 1
|
|
fi
|
|
if [ ${NOR_LOGICAL_OFFSET[0]} -ne ${NOR_LOGICAL_OFFSET[1]} ]; then
|
|
echo "LOGICAL OFFSET NOT MATCH, burn to ${NOR_LOGICAL_OFFSET[0]}, load from ${NOR_LOGICAL_OFFSET[1]}"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Cant find ${PLATFORM}_nor_defconfig"
|
|
exit 1
|
|
fi
|
|
if [ -e ${TOP_DIR}/u-boot-2018/configs/${PLATFORM}_nor_secure_defconfig ]; then
|
|
build_uboot_once ${PLATFORM}_nor_secure_defconfig
|
|
NOR_UBOOT_OFFSET[3]=`grep CONFIG_SPINOR_UBOOT_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
NOR_LOGICAL_OFFSET[3]=`grep CONFIG_SPINOR_LOGICAL_OFFSET u-boot-2018/.config |awk -F = '{print $2}'`
|
|
if [ ${NOR_UBOOT_OFFSET[2]} -ne ${NOR_UBOOT_OFFSET[3]} ]; then
|
|
echo "SECURE UBOOT OFFSET NOT MATCH, burn to ${NOR_UBOOT_OFFSET[2]}, load from ${NOR_UBOOT_OFFSET[3]}"
|
|
exit 1
|
|
fi
|
|
if [ ${NOR_LOGICAL_OFFSET[2]} -ne ${NOR_LOGICAL_OFFSET[3]} ]; then
|
|
echo "SECURE LOGICAL OFFSET NOT MATCH, burn to ${NOR_LOGICAL_OFFSET[2]}, load from ${NOR_LOGICAL_OFFSET[3]}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
echo "unsupport flash mode"
|
|
exit 2
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function build_spl-pub_once()
|
|
{
|
|
board=$1
|
|
mode=$2
|
|
path=$3
|
|
(
|
|
cd ${path}
|
|
|
|
if [ "x${mode}" = "xall" ];then
|
|
echo --------build for mode:${mode} board:${board}-------------------
|
|
make distclean
|
|
make b=${board} ${CP}
|
|
make -j ${CP}
|
|
else
|
|
echo --------build for mode:${mode} board:${board}-------------------
|
|
make distclean
|
|
make b=${board} m=${mode} ${CP}
|
|
case ${mode} in
|
|
nand | mmc | spinor)
|
|
make boot0 -j ${CP}
|
|
;;
|
|
sboot_nor)
|
|
echo "Neednot build sboot_nor ..."
|
|
;;
|
|
*)
|
|
make ${mode} -j ${CP}
|
|
;;
|
|
esac
|
|
fi
|
|
)
|
|
}
|
|
|
|
|
|
function build_spl-pub()
|
|
{
|
|
if [ "x${BOARD}" = "xall" ];then
|
|
for board in `ls $TOP_DIR/$1/board`;do
|
|
if [ "x${MODE}" = "xall" ];then
|
|
build_spl-pub_once ${board} all $1
|
|
else
|
|
build_spl-pub_once ${board} ${MODE} $1
|
|
fi
|
|
done
|
|
elif [ "x${MODE}" = "xall" ];then
|
|
build_spl-pub_once ${BOARD} all $1
|
|
else
|
|
build_spl-pub_once ${BOARD} ${MODE} $1
|
|
fi
|
|
}
|
|
|
|
function build_spl_once()
|
|
{
|
|
platform=$1
|
|
mode=$2
|
|
path=$3
|
|
support_board_exit=`cat $TOP_DIR/${path}/board/${platform}/common.mk | grep -w "SUPPORT_BOARD" | awk -F= '{printf $2}'`
|
|
if [ "x${BOARD}" != "xall" ];then
|
|
suport_board=${BOARD}
|
|
elif [ "x${support_board_exit}" = "x" ];then
|
|
suport_board=null
|
|
else
|
|
suport_board=`cat $TOP_DIR/${path}/board/${platform}/common.mk | grep -w "SUPPORT_BOARD" | awk -F= '{printf $2}'`
|
|
fi
|
|
echo "suport_board:${suport_board}"
|
|
(
|
|
cd ${path}
|
|
|
|
for board in ${suport_board};do
|
|
if [ "x${mode}" = "xall" ];then
|
|
echo --------build for platform:${platform} mode:${mode} board:${board}-------------------
|
|
make distclean
|
|
make p=${platform} b=${board} ${CP}
|
|
make -j b=${board} ${CP}
|
|
else
|
|
echo --------build for platform:${platform} mode:${mode} board:${board}-------------------
|
|
make distclean
|
|
make p=${platform} m=${mode} b=${board} ${CP}
|
|
case ${mode} in
|
|
nand | mmc | spinor)
|
|
make boot0 -j b=${board} ${CP}
|
|
;;
|
|
sboot_nor)
|
|
echo "Neednot build sboot_nor ..."
|
|
;;
|
|
*)
|
|
make ${mode} -j b=${board} ${CP}
|
|
;;
|
|
esac
|
|
fi
|
|
done
|
|
)
|
|
}
|
|
|
|
|
|
function build_spl()
|
|
{
|
|
local CONFIG_SYS_CONFIG_NAME=$(get_sys_config_name)
|
|
if [ ! -d $TOP_DIR/$1/board/${PLATFORM} ] && [ "x${PLATFORM}" != "xall" ];then
|
|
PLATFORM=${CONFIG_SYS_CONFIG_NAME}
|
|
fi
|
|
if [ "x${PLATFORM}" = "xall" ];then
|
|
for platform in `ls $TOP_DIR/$1/board`;do
|
|
if [ "x${MODE}" = "xall" ];then
|
|
build_spl_once ${platform} all $1
|
|
else
|
|
build_spl_once $platform ${MODE} $1
|
|
fi
|
|
done
|
|
elif [ "x${MODE}" = "xall" ];then
|
|
build_spl_once ${PLATFORM} all $1
|
|
else
|
|
build_spl_once ${PLATFORM} ${MODE} $1
|
|
fi
|
|
}
|
|
|
|
function build_spl_old()
|
|
{
|
|
if [ "x${PLATFORM}" = "xall" ];then
|
|
for platform in `ls $TOP_DIR/spl/board`;do
|
|
if [ "x${MODE}" = "xall" ];then
|
|
for mode in `ls ${TOP_DIR}/spl/board/${platform}`;do
|
|
if [[ $mode =~ .*\.mk$ ]] \
|
|
&& [ "x$mode" != "xcommon.mk" ];then
|
|
mode=${mode%%.mk*}
|
|
build_spl_once ${platform} ${mode} $1
|
|
fi
|
|
done
|
|
else
|
|
build_spl_once $platform ${MODE} $1
|
|
fi
|
|
done
|
|
elif [ "x${MODE}" = "xall" ];then
|
|
for mode in `ls ${TOP_DIR}/spl/board/${PLATFORM}`;do
|
|
if [[ $mode =~ .*\.mk$ ]] \
|
|
&& [ "x$mode" != "xcommon.mk" ];then
|
|
mode=${mode%%.mk*}
|
|
build_spl_once ${PLATFORM} ${mode} $1
|
|
fi
|
|
done
|
|
else
|
|
build_spl_once ${PLATFORM} ${MODE} $1
|
|
fi
|
|
}
|
|
|
|
function build_all()
|
|
{
|
|
build_uboot
|
|
|
|
if [ -d ${BRANDY_SPL_PUB_DIR} ];then
|
|
set +e
|
|
build_spl-pub spl-pub
|
|
set -e
|
|
fi
|
|
|
|
if [ -d ${BRANDY_SPL_DIR} ] && [ "x${SPL_OLD}" != "x" ] ; then
|
|
[ "x${LICHEE_BRANDY_SPL}" != "x" ] && build_${LICHEE_BRANDY_SPL} ${LICHEE_BRANDY_SPL} || build_spl spl
|
|
elif [ -d ${BRANDY_SPL_DIR} ] && [ "x${SPL_OLD}" = "x" ] ; then
|
|
build_spl_old spl
|
|
fi
|
|
}
|
|
|
|
[ -e ${TOP_DIR}/../../.buildconfig ] && source ${TOP_DIR}/../../.buildconfig
|
|
|
|
while getopts to:p:m:c:b: OPTION; do
|
|
case $OPTION in
|
|
t)
|
|
prepare_toolchain
|
|
exit $?
|
|
;;
|
|
o)
|
|
prepare_toolchain
|
|
if [ "x${SPL_OLD}" = "x" ] && [ "x$OPTARG" = "xspl" ]; then
|
|
command="build_spl_old $OPTARG"
|
|
else
|
|
command="build_$OPTARG $OPTARG"
|
|
fi
|
|
;;
|
|
|
|
p)
|
|
PLATFORM=$OPTARG
|
|
;;
|
|
m)
|
|
MODE=$OPTARG
|
|
;;
|
|
c)
|
|
CP=C\=$OPTION
|
|
;;
|
|
b)
|
|
BOARD=$OPTARG
|
|
;;
|
|
*)
|
|
show_help
|
|
exit $?
|
|
;;
|
|
esac
|
|
done
|
|
if [ "x${PLATFORM}" = "x" ];then
|
|
PLATFORM=all
|
|
fi
|
|
if [ "x${MODE}" = "x" ];then
|
|
MODE=all
|
|
fi
|
|
if [ "x${BOARD}" = "x" ];then
|
|
BOARD=all
|
|
fi
|
|
# echo "PLATFORM:${PLATFORM} MODE:${MODE} CP:${CP} BOARD:${BOARD} "
|
|
if [ "x$command" != "x" ];then
|
|
$command
|
|
else
|
|
build_all
|
|
fi
|
|
exit $?
|
|
|