blob: 4ddcdd31d6fdc3cb826aa79de8d8c906994a34dd [file] [log] [blame]
kelvin.zhangac22e652021-10-18 15:09:21 +08001#!/bin/bash
2
3###############################################################
kelvin.zhang6d99b852021-10-25 11:44:04 +08004# Function: choose board and product, set environment variables.
kelvin.zhangac22e652021-10-18 15:09:21 +08005###############################################################
6
Kelvin Zhang20242b92021-12-15 19:17:43 +08007BUILD_COMBINATION="$PWD/scripts/build_combination.txt"
8
kelvin.zhang6d99b852021-10-25 11:44:04 +08009usage()
10{
Kelvin Zhang20242b92021-12-15 19:17:43 +080011 echo "Usage: source $BASH_SOURCE [board_name] [soc_name] [arch_name] [product_name]"
kelvin.zhang6d99b852021-10-25 11:44:04 +080012 echo "−h: display help."
13 echo ""
14}
kelvin.zhangac22e652021-10-18 15:09:21 +080015
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080016# $1: arch
17# $2: soc
18# $3: board
19# $4: product
20check_params()
21{
22 i=0
23 for arch in ${ARCHS[*]}; do
24 [[ "$1" == "$arch" ]] && break
25 i=$((i+1))
26 done
27 [ $i -ge ${#ARCHS[*]} ] && return 1
28
29 i=0
30 for soc in ${SOCS[*]};do
31 [[ "$2" == "$soc" ]] && break
32 i=$((i+1))
33 done
34 [ "$i" -ge ${#SOCS[*]} ] && return 2
35
36 i=0
37 for board in ${BOARDS[*]};do
38 [[ "$3" == "$board" ]] && break
39 i=$((i+1))
40 done
41 [ "$i" -ge ${#BOARDS[*]} ] && return 3
42
43 i=0
44 for product in ${PRODUCTS[*]};do
45 [[ "$4" == "$product" ]] && break
46 i=$((i+1))
47 done
48 [ "$i" -ge ${#PRODUCTS[*]} ] && return 4
49
50 return 0
51}
52
53unset ARCHS SOCS BOARDS PRODUCTS
54
bin.chen3436a3e2021-12-21 11:16:26 +080055ARCHS=($(find $PWD/arch -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080056SOCS=($(find $PWD/soc -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
57BOARDS=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
bin.chen3436a3e2021-12-21 11:16:26 +080058PRODUCTS=($(find $PWD/products -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080059
kelvin.zhang6d99b852021-10-25 11:44:04 +080060if [ -n "$1" ]; then
61 if [ $1 == "-h" ]; then
62 usage
63 return 0
64 else
Kelvin Zhang20242b92021-12-15 19:17:43 +080065 PROJECT="$1 $2 $3 $4"
kelvin.zhang6d99b852021-10-25 11:44:04 +080066 fi
67else
Kelvin Zhang20242b92021-12-15 19:17:43 +080068 unset ARRAY
69
70 while IFS= read -r LINE; do
71 ARRAY+=( "$LINE" )
72 done < "$BUILD_COMBINATION"
73
74 echo "Available projects:"
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080075 j=0
76 for j in "${!ARRAY[@]}"; do
77 NR=$j
78 ARCH=`echo "${ARRAY[$j]}"|awk '{print $3}'`
79 SOC=`echo "${ARRAY[$j]}"|awk '{print $2}'`
80 BOARD=`echo "${ARRAY[$j]}"|awk '{print $1}'`
81 PRODUCT=`echo "${ARRAY[$j]}"|awk '{print $4}'`
82 j=$((j+1))
83 check_params $ARCH $SOC $BOARD $PRODUCT
84 [ "$?" -ne 0 ] && continue
85
86 echo -e "\t$NR. ${ARRAY[$j-1]}"
Kelvin Zhang20242b92021-12-15 19:17:43 +080087 done
88 read -p "Choose your project: " CHOICE
89
90 # Determine whether it is a digital number
91 expr $CHOICE + 1 > /dev/null 2>&1
92 if [ $? -eq 0 ]; then
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080093 if [ $CHOICE -le $j ]; then
Kelvin Zhang20242b92021-12-15 19:17:43 +080094 PROJECT=${ARRAY[$CHOICE]}
95 else
96 echo "Wrong choice!"
97 return 0
98 fi
99 else
100 PROJECT=$CHOICE
101 fi
kelvin.zhang6d99b852021-10-25 11:44:04 +0800102fi
kelvin.zhangac22e652021-10-18 15:09:21 +0800103
Kelvin Zhang20242b92021-12-15 19:17:43 +0800104ARCH=`echo "$PROJECT"|awk '{print $3}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800105SOC=`echo "$PROJECT"|awk '{print $2}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800106BOARD=`echo "$PROJECT"|awk '{print $1}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800107PRODUCT=`echo "$PROJECT"|awk '{print $4}'`
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +0800108check_params $ARCH $SOC $BOARD $PRODUCT
109err=$?
110[ "$err" -eq 1 ] && echo "Invalid ARCH: $ARCH!" && return $err
111[ "$err" -eq 2 ] && echo "Invalid SOC: $SOC!" && return $err
112[ "$err" -eq 3 ] && echo "Invalid BOARD: $BOARD!" && return $err
113[ "$err" -eq 4 ] && echo "Invalid PRODUCT: $PRODUCT!" && return $err
kelvin.zhangac22e652021-10-18 15:09:21 +0800114
115case $ARCH in
116 arm) COMPILER=gcc;TOOLCHAIN_KEYWORD="arm-none-eabi" ;;
117 arm64) COMPILER=gcc;TOOLCHAIN_KEYWORD="aarch64-none-elf" ;;
118 riscv) COMPILER=gcc;TOOLCHAIN_KEYWORD="riscv-none" ;;
Xiaohu.Huang317cb342021-12-13 17:14:53 +0800119 xtensa) COMPILER=xcc;TOOLCHAIN_KEYWORD="xt" ;;
kelvin.zhang6d99b852021-10-25 11:44:04 +0800120 *) echo "Failed to identify ARCH $ARCH";return 1;;
kelvin.zhangac22e652021-10-18 15:09:21 +0800121esac
122
Kelvin Zhang20242b92021-12-15 19:17:43 +0800123export ARCH BOARD COMPILER PRODUCT SOC TOOLCHAIN_KEYWORD