183 lines
3.7 KiB
Bash
Executable File
183 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
MILKV_BOARD_ARRAY=
|
|
MILKV_BOARD_ARRAY_LEN=
|
|
MILKV_BOARD=
|
|
MILKV_BOARD_CONFIG=
|
|
|
|
MILKV_BOARD_DIR=milkv
|
|
|
|
|
|
function print_info()
|
|
{
|
|
printf "\e[1;32m%s\e[0m\n" "$1"
|
|
}
|
|
|
|
function print_err()
|
|
{
|
|
printf "\e[1;31mError: %s\e[0m\n" "$1"
|
|
}
|
|
|
|
function get_toolchain()
|
|
{
|
|
if [ ! -d host-tools ]; then
|
|
print_info "Toolchain does not exist, download it now..."
|
|
|
|
toolchain_url="https://sophon-file.sophon.cn/sophon-prod-s3/drive/23/03/07/16/host-tools.tar.gz"
|
|
echo "toolchain_url: ${toolchain_url}"
|
|
toolchain_file=${toolchain_url##*/}
|
|
echo "toolchain_file: ${toolchain_file}"
|
|
|
|
wget ${toolchain_url} -O ${toolchain_file}
|
|
if [ $? -ne 0 ]; then
|
|
print_err "Failed to download ${toolchain_url} !"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f ${toolchain_file} ]; then
|
|
print_err "${toolchain_file} not found!"
|
|
exit 1
|
|
fi
|
|
|
|
print_info "Extracting ${toolchain_file}..."
|
|
tar -xf ${toolchain_file}
|
|
if [ $? -ne 0 ]; then
|
|
print_err "Extract ${toolchain_file} failed!"
|
|
exit 1
|
|
fi
|
|
|
|
[ -f ${toolchain_file} ] && rm -rf ${toolchain_file}
|
|
|
|
fi
|
|
}
|
|
|
|
function get_available_board()
|
|
{
|
|
MILKV_BOARD_ARRAY=( $(cd ${MILKV_BOARD_DIR}/; ls boardconfig*.sh | sort | awk -F"[-.]" -v OFS='-' '{print $2, $3}') )
|
|
#echo ${MILKV_BOARD_ARRAY[@]}
|
|
|
|
MILKV_BOARD_ARRAY_LEN=${#MILKV_BOARD_ARRAY[@]}
|
|
if [ $MILKV_BOARD_ARRAY_LEN -eq 0 ]; then
|
|
echo "No available board config"
|
|
exit 1
|
|
fi
|
|
|
|
#echo ${MILKV_BOARD_ARRAY[@]} | xargs -n 1 | sed "=" | sed "N;s/\n/. /"
|
|
}
|
|
|
|
function choose_milkv_board()
|
|
{
|
|
# TODO
|
|
echo "choose"
|
|
}
|
|
|
|
function prepare_env()
|
|
{
|
|
source ${MILKV_BOARD_CONFIG}
|
|
|
|
source build/${MV_BUILD_ENV} > /dev/null 2>&1
|
|
defconfig ${MV_BOARD_LINK} > /dev/null 2>&1
|
|
|
|
echo "OUTPUT_DIR: ${OUTPUT_DIR}" # @build/milkvsetup.sh
|
|
}
|
|
|
|
function milkv_duo_build()
|
|
{
|
|
# clean old img
|
|
old_image_count=`ls ${OUTPUT_DIR}/*.img* | wc -l`
|
|
if [ ${old_image_count} -ge 0 ]; then
|
|
pushd ${OUTPUT_DIR}
|
|
rm -rf *.img*
|
|
popd
|
|
fi
|
|
|
|
clean_all
|
|
build_all
|
|
if [ $? -eq 0 ]; then
|
|
print_info "Build board ${MILKV_BOARD} success!"
|
|
else
|
|
print_err "Build board ${MILKV_BOARD} failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function milkv_duo_pack()
|
|
{
|
|
pack_sd_image
|
|
|
|
[ ! -d out ] && mkdir out
|
|
|
|
image_count=`ls ${OUTPUT_DIR}/*.img | wc -l`
|
|
if [ ${image_count} -ge 0 ]; then
|
|
mv ${OUTPUT_DIR}/*.img out/
|
|
|
|
# rename milkv-duo.img file with time
|
|
pushd out
|
|
for img in *.img
|
|
do
|
|
if [ "${img}" == "${MILKV_BOARD}.img" ]; then
|
|
mv $img ${MILKV_BOARD}-`date +%Y%m%d-%H%M`.img
|
|
fi
|
|
done
|
|
popd
|
|
|
|
# show latest img
|
|
latest_img=`ls -t out/*.img | head -n1`
|
|
if [ -z "${latest_img// }" ]; then
|
|
print_err "Gen image failed!"
|
|
else
|
|
print_info "Gen image successful: ${latest_img}"
|
|
fi
|
|
else
|
|
print_err "Create sd img failed!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
get_toolchain
|
|
|
|
get_available_board
|
|
|
|
if [ $MILKV_BOARD_ARRAY_LEN -eq 1 ]; then
|
|
# Only one board
|
|
print_info "Ready to build: ${MILKV_BOARD_ARRAY[0]}"
|
|
MILKV_BOARD=${MILKV_BOARD_ARRAY[0]}
|
|
else
|
|
# no arg
|
|
if [ $# -lt 1 ]; then
|
|
choose_milkv_board || exit 0
|
|
fi
|
|
|
|
# with board name
|
|
if [ $# -ge 1 ]; then
|
|
if [[ ${MILKV_BOARD_ARRAY[@]} =~ (^|[[:space:]])"${1}"($|[[:space:]]) ]]; then
|
|
MILKV_BOARD=${1}
|
|
echo "$MILKV_BOARD"
|
|
else
|
|
print_err "${1} not supported!"
|
|
echo "Available boards: [ ${MILKV_BOARD_ARRAY[@]} ]"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ -z "${MILKV_BOARD// }" ]; then
|
|
print_err "No board specified!"
|
|
exit 1
|
|
fi
|
|
|
|
export MILKV_BOARD="${MILKV_BOARD}"
|
|
|
|
MILKV_BOARD_CONFIG=${MILKV_BOARD_DIR}/boardconfig-${MILKV_BOARD}.sh
|
|
|
|
if [ ! -f ${MILKV_BOARD_CONFIG} ]; then
|
|
print_err "${MILKV_BOARD_CONFIG} not found!"
|
|
exit 1
|
|
fi
|
|
|
|
prepare_env
|
|
|
|
milkv_duo_build
|
|
milkv_duo_pack
|
|
|