307 lines
9.5 KiB
Bash
Executable File
307 lines
9.5 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
if [ -z "${BASH_SOURCE}" ];then
|
|
echo Not in bash, switching to it...
|
|
bash -c "$0 $@"
|
|
fi
|
|
|
|
function choose_board()
|
|
{
|
|
echo
|
|
echo "You're building on ${LT_OS_NAME}"
|
|
echo "Lunch menu...pick a config:"
|
|
echo ""
|
|
|
|
echo ${LT_DEFCONFIG_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
|
|
|
|
local INDEX
|
|
while true; do
|
|
read -p "Which would you like? [1-$LT_DEFCONFIG_ARRAY_LEN, other exit]: " INDEX
|
|
INDEX=$((${INDEX:-0} - 1))
|
|
|
|
if [ "$INDEX" -eq -1 ]; then
|
|
unset TARGET_OUTPUT_DIR
|
|
unset LT_BUILD_CONFIG
|
|
echo
|
|
echo "Choice not available. Please try again."
|
|
echo
|
|
break
|
|
|
|
fi
|
|
|
|
if echo $INDEX | grep -vq [^0-9]; then
|
|
LT_BUILD_CONFIG="${LT_DEFCONFIG_ARRAY[$INDEX]}"
|
|
[ -n "$LT_BUILD_CONFIG" ] && break
|
|
fi
|
|
|
|
echo
|
|
echo "Choice not available. Please try again."
|
|
echo
|
|
done
|
|
}
|
|
|
|
function os_run()
|
|
{
|
|
BD="dmb"
|
|
mkdir -p output
|
|
if [ -f output/.evb_config ]; then
|
|
rm output/.evb_config
|
|
fi
|
|
if echo "${LT_OS_CONFIG}" | grep -iq 'linux' ; then
|
|
LT_OS_NAME="Linux"
|
|
|
|
if echo "${LT_OS_CONFIG}" | grep -iq 'evb' ; then
|
|
BD="evb"
|
|
echo "run linux_evb"
|
|
echo -e "\nexport TARGET_CONFIG_BOARD=mc_evb\n" >> output/.evb_config
|
|
else
|
|
echo "run linux_dmb"
|
|
echo -e "\nexport TARGET_CONFIG_BOARD=mc_demoboard\n" >> output/.evb_config
|
|
fi
|
|
############################################################3
|
|
for element in "${LT_BOARD_CONFIG[@]}"; do
|
|
if echo "$element" | grep -vq 'rtt'; then
|
|
#echo "linux found"
|
|
LT_DEFCONFIG_ARRAY+=("$element")
|
|
fi
|
|
done
|
|
LT_DEFCONFIG_ARRAY_LEN=${#LT_DEFCONFIG_ARRAY[@]}
|
|
###########################################################
|
|
fi
|
|
if echo "${LT_OS_CONFIG}" | grep -iq 'rtt' ; then
|
|
LT_OS_NAME="RT-Thread"
|
|
|
|
if [ -f bsp/rt-thread/.rtt_config ]; then
|
|
rm bsp/rt-thread/.rtt_config
|
|
fi
|
|
|
|
if echo "${LT_OS_CONFIG}" | grep -iq 'evb' ; then
|
|
BD="evb"
|
|
echo "run rtt_evb"
|
|
echo -e "\nexport TARGET_CONFIG_BOARD=mc_evb\n" >> bsp/rt-thread/.rtt_config
|
|
echo -e "\nexport TARGET_CONFIG_BOARD=mc_evb\n" >> output/.evb_config
|
|
else
|
|
echo "run rtt_dmb"
|
|
echo -e "\nexport TARGET_CONFIG_BOARD=mc_demoboard\n" >> bsp/rt-thread/.rtt_config
|
|
echo -e "\nexport TARGET_CONFIG_BOARD=mc_demoboard\n" >> output/.evb_config
|
|
fi
|
|
############################################################3
|
|
for element in "${LT_BOARD_CONFIG[@]}"; do
|
|
if echo "$element" | grep -iq 'rtt'; then
|
|
#echo "rtt found"
|
|
LT_DEFCONFIG_ARRAY+=("$element")
|
|
fi
|
|
done
|
|
LT_DEFCONFIG_ARRAY_LEN=${#LT_DEFCONFIG_ARRAY[@]}
|
|
###########################################################
|
|
fi
|
|
}
|
|
|
|
function os_select_run()
|
|
{
|
|
echo ${LT_OS_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
|
|
|
|
local INDEX
|
|
while true; do
|
|
read -p "Which would you like? [1-$LT_OS_ARRAY_LEN, other exit]: " INDEX
|
|
INDEX=$((${INDEX:-0} - 1))
|
|
|
|
if [ "$INDEX" -eq -1 ]; then
|
|
unset TARGET_OUTPUT_DIR
|
|
unset LT_BUILD_CONFIG
|
|
echo
|
|
echo "Choice not available. Please try again."
|
|
echo
|
|
break
|
|
fi
|
|
|
|
if echo $INDEX | grep -vq [^0-9]; then
|
|
LT_OS_CONFIG="${LT_OS_ARRAY[$INDEX]}"
|
|
os_run
|
|
[ -n "$LT_OS_CONFIG" ] && break
|
|
fi
|
|
|
|
echo
|
|
echo "Choice not available. Please try again."
|
|
echo
|
|
done
|
|
}
|
|
|
|
|
|
function choose_os()
|
|
{
|
|
local i
|
|
|
|
LT_OS_ARRAY_TEMP=("linux" "rtt")
|
|
|
|
LT_OS_ARRAY_LEN=${#LT_OS_ARRAY_TEMP[@]}
|
|
for((i = 0;i<$LT_OS_ARRAY_LEN;i++))
|
|
do
|
|
LT_OS_ARRAY+=(
|
|
$(echo "${LT_OS_ARRAY_TEMP[i]}_dmb" | \
|
|
sed "s/\..*$//" |sort))
|
|
done
|
|
|
|
for((i = 0;i<$LT_OS_ARRAY_LEN;i++))
|
|
do
|
|
LT_OS_ARRAY+=(
|
|
$(echo "${LT_OS_ARRAY_TEMP[i]}_evb" | \
|
|
sed "s/\..*$//" |sort))
|
|
done
|
|
LT_OS_ARRAY_LEN=${#LT_OS_ARRAY[@]}
|
|
|
|
idx=$LT_OS_VALUE
|
|
if (( $idx > 0 && $idx < $(($LT_OS_ARRAY_LEN+1)))); then
|
|
LT_OS_CONFIG="${LT_OS_ARRAY[($idx - 1)]}"
|
|
os_run
|
|
else
|
|
echo "Please select os and board:"
|
|
os_select_run
|
|
fi
|
|
}
|
|
|
|
function lunch_config()
|
|
{
|
|
TARGET_DIR_NAME="$LT_BUILD_CONFIG"
|
|
export TARGET_OUTPUT_DIR="$TOP_DIR/output"
|
|
export LT_OS_NAME="Linux"
|
|
|
|
mkdir -p $TARGET_OUTPUT_DIR || return
|
|
|
|
echo "==========================================="
|
|
echo
|
|
echo "#TARGET_BOARD=$LT_BUILD_CONFIG"
|
|
echo "#OUTPUT_DIR=$TARGET_OUTPUT_DIR/${LT_BUILD_CONFIG}_${BD}"
|
|
echo
|
|
echo "==========================================="
|
|
|
|
|
|
pushd ${SCRIPT_DIR}/configs;
|
|
cat common.mk ${TARGET_DIR_NAME}.mk > ${TARGET_OUTPUT_DIR}/.config
|
|
popd
|
|
|
|
odir=$(sed '/TARGET_OUTPUT_DIR/!d' ${TARGET_OUTPUT_DIR}/.config)
|
|
#if no TARGET_OUTPUT_DIR given, deault set to the config name
|
|
if [ X"$odir" == "X" ]; then
|
|
echo -e "\nexport TARGET_OUTPUT_DIR=${LT_BUILD_CONFIG}_${BD}\n" >> ${TARGET_OUTPUT_DIR}/.config
|
|
fi
|
|
|
|
#append the config name, NIMI is name in Finnish, just to avoid conflict
|
|
echo -e "\nexport TARGET_CONFIG_NIMI=${LT_BUILD_CONFIG}_${BD}\n" >> ${TARGET_OUTPUT_DIR}/.config
|
|
|
|
# append the toolchain config
|
|
echo -e "\ninclude $TOP_DIR/media/mpp/configs/toolchain/\$(CROSS_TOOLCHAIN_VERSION).mk\n" >> ${TARGET_OUTPUT_DIR}/.config
|
|
|
|
}
|
|
|
|
function mem_config()
|
|
{
|
|
MEM_CFG_FILE=mem_layout.cfg
|
|
if [ ! -e ${MEM_CFG_FILE} ]; then
|
|
echo "mem cfg file not exist!!!"
|
|
return
|
|
fi
|
|
source ${MEM_CFG_FILE}
|
|
echo -e "\nexport MEM_TOTAL_SIZE=${MEM_TOTAL_SIZE}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MEM_OS_SIZE=${MEM_OS_SIZE}\n" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_SHOWLOGO_YADDR0=${MC_SHOWLOGO_YADDR0}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_SHOWLOGO_CADDR0=${MC_SHOWLOGO_CADDR0}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_SHOWLOGO_YADDR1=${MC_SHOWLOGO_YADDR1}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_SHOWLOGO_CADDR1=${MC_SHOWLOGO_CADDR1}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_DHD0_OSD_SIZE=${MC_DHD0_OSD_SIZE}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_DHD0_OSD_FBC_EB=${MC_DHD0_OSD_FBC_EB}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_DHD1_OSD_SIZE=${MC_DHD1_OSD_SIZE}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport MC_DHD1_OSD_FBC_EB=${MC_DHD1_OSD_FBC_EB}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport mem_mmz_start=${mem_mmz_start}" >> ${TARGET_OUTPUT_DIR}/.config
|
|
echo -e "\nexport mem_mmz_size=${mem_mmz_size}\n" >> ${TARGET_OUTPUT_DIR}/.config
|
|
}
|
|
|
|
|
|
function parse_mem_config()
|
|
{
|
|
MEM_CFG_FILE=mem_layout.cfg
|
|
if [ ! -e ${MEM_CFG_FILE} ]; then
|
|
echo "mem cfg file not exist!!!"
|
|
return
|
|
fi
|
|
LINUX_OS_SIZE=$OS_SIZE
|
|
LINUX_MMZ_SIZE=$MMZ_SIZE
|
|
#echo "enter parse layout >>>>>target file:${MEM_CFG_FILE},os:$LINUX_OS_SIZE,mmz:$LINUX_MMZ_SIZE,dir:${SCRIPT_DIR}<<<<<"
|
|
if [ ! -z "$LINUX_OS_SIZE" ]; then
|
|
if [[ ! "$LINUX_OS_SIZE" =~ ^[0-9]+M ]]; then
|
|
echo "param error, eg:OS_SIZE=36M"
|
|
exit 1
|
|
fi
|
|
sed -i "s/^MEM_OS_SIZE=[^ ]*/MEM_OS_SIZE=${LINUX_OS_SIZE}/g" ${SCRIPT_DIR}/configs/${MEM_CFG_FILE}
|
|
fi
|
|
if [ ! -z "$LINUX_MMZ_SIZE" ]; then
|
|
if [[ ! "$LINUX_MMZ_SIZE" =~ ^0x[0-9a-fA-F] ]]; then
|
|
echo "param error, eg:MMZ_SIZE=0x01A00000"
|
|
exit 1
|
|
fi
|
|
sed -i "s/^mem_mmz_size=[^ ]*/mem_mmz_size=${LINUX_MMZ_SIZE}/g" ${SCRIPT_DIR}/configs/${MEM_CFG_FILE}
|
|
fi
|
|
if [[ ! -z "$LINUX_OS_SIZE" && "$LINUX_MMZ_SIZE" ]]; then
|
|
MMZ_START=$((0x40000000 + ${LINUX_OS_SIZE%M} * 1024 * 1024))
|
|
sed -i "s/^mem_mmz_start=[^ ]*/mem_mmz_start=$(printf "0x%X\n" $MMZ_START)/g" ${SCRIPT_DIR}/configs/${MEM_CFG_FILE}
|
|
echo "LINUX_OS_SIZE = $OS_SIZE, LINUX_MMZ_SIZE = $MMZ_SIZE"
|
|
fi
|
|
}
|
|
|
|
function main()
|
|
{
|
|
SCRIPT_PATH=$(readlink -f ${BASH_SOURCE})
|
|
SCRIPT_DIR=$(dirname ${SCRIPT_PATH})
|
|
TOP_DIR=$(readlink -f ${SCRIPT_DIR}/../..)
|
|
echo Top of tree: ${TOP_DIR}
|
|
|
|
# Check if there are any lt* files in the directory and add them to the array
|
|
if ls ${SCRIPT_DIR}/configs/lt* &> /dev/null; then
|
|
LT_BOARD_CONFIG=(
|
|
$(cd ${SCRIPT_DIR}/configs/; ls lt* | \
|
|
sed "s/\..*$//" | sort)
|
|
)
|
|
fi
|
|
|
|
# Check if there are any mc* files in the directory and add them to the array
|
|
if ls ${SCRIPT_DIR}/configs/mc* &> /dev/null; then
|
|
LT_BOARD_CONFIG+=(
|
|
$(cd ${SCRIPT_DIR}/configs/; ls mc* | \
|
|
sed "s/\..*$//" | sort)
|
|
)
|
|
fi
|
|
|
|
LT_OS_VALUE=$1
|
|
LT_OS_VALUE=${LT_OS_VALUE:=0}
|
|
choose_os
|
|
unset LT_BUILD_CONFIG
|
|
case $LT_DEFCONFIG_ARRAY_LEN in
|
|
0)
|
|
echo "No available configs${1:+" for: $1"}"
|
|
;;
|
|
1)
|
|
LT_BUILD_CONFIG=${LT_DEFCONFIG_ARRAY[0]}
|
|
;;
|
|
*)
|
|
idx=$2
|
|
idx=${idx:=0}
|
|
#echo "index = $idx"
|
|
if (( $idx > 0 && $idx < $(($LT_DEFCONFIG_ARRAY_LEN+1)))); then
|
|
LT_BUILD_CONFIG="${LT_DEFCONFIG_ARRAY[(($idx - 1)) ]}"
|
|
elif [ -f ${SCRIPT_DIR}/configs/${idx}.mk ]; then
|
|
LT_BUILD_CONFIG=${idx}
|
|
else
|
|
choose_board
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
[ -n "$LT_BUILD_CONFIG" ] || return
|
|
|
|
lunch_config
|
|
parse_mem_config
|
|
mem_config
|
|
}
|
|
|
|
main "$@"
|