MC3302_SDK_V1.1.9_202507281.../media/mpp/envsetup.sh
2025-11-11 12:08:31 +08:00

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 "$@"