#!/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 "$@"