blob: f1ec46870658caf8876ccacef67d2c7fcaa92fe5 [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
#
# SPDX-License-Identifier: MIT
#
###############################################################
# Function: choose board and product, set environment variables.
###############################################################
usage()
{
echo "Usage: source $BASH_SOURCE [arch_name] [soc_name] [board_name] [product_name]"
echo "−h: display help."
echo ""
}
version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; }
CMAKE_FILE=`which cmake`
if [ -x /opt/cmake-3.18.4-Linux-x86_64/bin/cmake ]; then
export PATH=/opt/cmake-3.18.4-Linux-x86_64/bin/:$PATH
elif [ -n "$CMAKE_FILE" ]; then
CMAKE_VERSION=`cmake --version`
pattern="cmake version "
CMAKE_VERSION=`echo ${CMAKE_VERSION#*${pattern}}`
pattern=" CMake"
CMAKE_VERSION=`echo ${CMAKE_VERSION%${pattern}*}`
if version_lt $CMAKE_VERSION "3.13.1"; then
echo "cmake version $CMAKE_VERSION < 3.13.1!"
echo "Please upgrade cmake!"
return 0
fi
else
echo "cmake not found!"
echo "Please install cmake!"
return 0
fi
NINJA_FILE=`which ninja`
if [ -z "$NINJA_FILE" ]; then
echo "ninja not found!"
echo "Please install ninja!"
return 0
fi
source scripts/gen_build_combination.sh
if [ -n "$1" ] && [ $1 == "-h" ]; then
usage
return 0
elif [ $# -eq 4 ]; then
PROJECT="$1 $2 $3 $4"
echo "Choose project:$PROJECT"
elif [ $# -eq 5 ]; then
PROJECT="$1 $2 $3 $4 $5"
echo "Choose project:$PROJECT"
else
unset ARRAY
while IFS= read -r LINE; do
ARRAY+=( "$LINE" )
done < $BUILD_COMBINATION
echo "Available projects:"
j=0
for j in "${!ARRAY[@]}"; do
NR=$j
j=$((j+1))
echo -e "\t$NR. ${ARRAY[$j-1]}"
done
read -p "Choose your project: " CHOICE
# Determine whether it is a digital number
expr $CHOICE + 1 > /dev/null 2>&1
if [ $? -eq 0 ]; then
if [ $CHOICE -le $j ]; then
PROJECT=${ARRAY[$CHOICE]}
else
echo "Wrong choice!"
return 0
fi
else
PROJECT=$CHOICE
fi
fi
ARCH=`echo "$PROJECT"|awk '{print $1}'`
SOC=`echo "$PROJECT"|awk '{print $2}'`
BOARD=`echo "$PROJECT"|awk '{print $3}'`
PRODUCT=`echo "$PROJECT"|awk '{print $4}'`
COMPILER=`echo "$PROJECT"|awk '{print $5}'`
# Check current project
check_build_combination $ARCH $SOC $BOARD $PRODUCT
err=$?
[ "$err" -eq 1 ] && echo "Invalid ARCH: $ARCH!" && return $err
[ "$err" -eq 2 ] && echo "Invalid SOC: $SOC!" && return $err
[ "$err" -eq 3 ] && echo "Invalid BOARD: $BOARD!" && return $err
[ "$err" -eq 4 ] && echo "Invalid PRODUCT: $PRODUCT!" && return $err
case $ARCH in
arm) COMPILER=gcc; TOOLCHAIN_KEYWORD="arm-none-eabi" ;;
arm64) if [ "$COMPILER" == "clang+llvm" ]; then
TOOLCHAIN_KEYWORD="arm"
TOOLCHAIN_PATH=$PWD/output/toolchains/clang+llvm-arm
else
COMPILER="gcc"
TOOLCHAIN_KEYWORD="aarch64-none-elf"
fi
;;
riscv) COMPILER="gcc"; TOOLCHAIN_KEYWORD="riscv-none" ;;
xtensa) COMPILER="xcc"; TOOLCHAIN_KEYWORD="xt" ;;
*) echo "Failed to identify ARCH $ARCH";return 1;;
esac
CONF_FILE="$PWD/products/$PRODUCT/prj.conf"
BACKTRACE_ENABLE=0
if [ $(grep -c "CONFIG_BACKTRACE=y" $CONF_FILE) -ne '0' ]; then
BACKTRACE_ENABLE=1
fi
KERNEL=freertos
export ARCH BOARD COMPILER KERNEL PRODUCT SOC TOOLCHAIN_KEYWORD TOOLCHAIN_PATH BACKTRACE_ENABLE