blob: ea51168bbce159e08c73899fc9b4abce2f888bf9 [file] [log] [blame]
kelvin.zhangac22e652021-10-18 15:09:21 +08001#!/bin/bash
2
yang.liffa60e52022-01-11 14:38:56 +08003# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
4
5# SPDX-License-Identifier: MIT
6
kelvin.zhangac22e652021-10-18 15:09:21 +08007###############################################################
kelvin.zhang6d99b852021-10-25 11:44:04 +08008# Function: choose board and product, set environment variables.
kelvin.zhangac22e652021-10-18 15:09:21 +08009###############################################################
10
Kelvin Zhang20242b92021-12-15 19:17:43 +080011BUILD_COMBINATION="$PWD/scripts/build_combination.txt"
12
kelvin.zhang6d99b852021-10-25 11:44:04 +080013usage()
14{
Kelvin Zhang20242b92021-12-15 19:17:43 +080015 echo "Usage: source $BASH_SOURCE [board_name] [soc_name] [arch_name] [product_name]"
kelvin.zhang6d99b852021-10-25 11:44:04 +080016 echo "−h: display help."
17 echo ""
18}
kelvin.zhangac22e652021-10-18 15:09:21 +080019
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080020# $1: arch
21# $2: soc
22# $3: board
23# $4: product
24check_params()
25{
26 i=0
27 for arch in ${ARCHS[*]}; do
28 [[ "$1" == "$arch" ]] && break
29 i=$((i+1))
30 done
31 [ $i -ge ${#ARCHS[*]} ] && return 1
32
33 i=0
34 for soc in ${SOCS[*]};do
35 [[ "$2" == "$soc" ]] && break
36 i=$((i+1))
37 done
38 [ "$i" -ge ${#SOCS[*]} ] && return 2
39
40 i=0
41 for board in ${BOARDS[*]};do
42 [[ "$3" == "$board" ]] && break
43 i=$((i+1))
44 done
45 [ "$i" -ge ${#BOARDS[*]} ] && return 3
46
47 i=0
48 for product in ${PRODUCTS[*]};do
49 [[ "$4" == "$product" ]] && break
50 i=$((i+1))
51 done
52 [ "$i" -ge ${#PRODUCTS[*]} ] && return 4
53
54 return 0
55}
56
57unset ARCHS SOCS BOARDS PRODUCTS
58
bin.chen3436a3e2021-12-21 11:16:26 +080059ARCHS=($(find $PWD/arch -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080060SOCS=($(find $PWD/soc -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
61BOARDS=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
bin.chen3436a3e2021-12-21 11:16:26 +080062PRODUCTS=($(find $PWD/products -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080063
kelvin.zhang6d99b852021-10-25 11:44:04 +080064if [ -n "$1" ]; then
65 if [ $1 == "-h" ]; then
66 usage
Kelvin Zhang51284ef2021-12-28 10:49:37 +080067 exit 0
kelvin.zhang6d99b852021-10-25 11:44:04 +080068 else
Kelvin Zhang20242b92021-12-15 19:17:43 +080069 PROJECT="$1 $2 $3 $4"
kelvin.zhang6d99b852021-10-25 11:44:04 +080070 fi
71else
Kelvin Zhang20242b92021-12-15 19:17:43 +080072 unset ARRAY
73
74 while IFS= read -r LINE; do
75 ARRAY+=( "$LINE" )
76 done < "$BUILD_COMBINATION"
77
78 echo "Available projects:"
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080079 j=0
80 for j in "${!ARRAY[@]}"; do
81 NR=$j
82 ARCH=`echo "${ARRAY[$j]}"|awk '{print $3}'`
83 SOC=`echo "${ARRAY[$j]}"|awk '{print $2}'`
84 BOARD=`echo "${ARRAY[$j]}"|awk '{print $1}'`
85 PRODUCT=`echo "${ARRAY[$j]}"|awk '{print $4}'`
86 j=$((j+1))
87 check_params $ARCH $SOC $BOARD $PRODUCT
88 [ "$?" -ne 0 ] && continue
89
90 echo -e "\t$NR. ${ARRAY[$j-1]}"
Kelvin Zhang20242b92021-12-15 19:17:43 +080091 done
92 read -p "Choose your project: " CHOICE
93
94 # Determine whether it is a digital number
95 expr $CHOICE + 1 > /dev/null 2>&1
96 if [ $? -eq 0 ]; then
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080097 if [ $CHOICE -le $j ]; then
Kelvin Zhang20242b92021-12-15 19:17:43 +080098 PROJECT=${ARRAY[$CHOICE]}
99 else
100 echo "Wrong choice!"
101 return 0
102 fi
103 else
104 PROJECT=$CHOICE
105 fi
kelvin.zhang6d99b852021-10-25 11:44:04 +0800106fi
kelvin.zhangac22e652021-10-18 15:09:21 +0800107
Kelvin Zhang20242b92021-12-15 19:17:43 +0800108ARCH=`echo "$PROJECT"|awk '{print $3}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800109SOC=`echo "$PROJECT"|awk '{print $2}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800110BOARD=`echo "$PROJECT"|awk '{print $1}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800111PRODUCT=`echo "$PROJECT"|awk '{print $4}'`
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +0800112check_params $ARCH $SOC $BOARD $PRODUCT
113err=$?
114[ "$err" -eq 1 ] && echo "Invalid ARCH: $ARCH!" && return $err
115[ "$err" -eq 2 ] && echo "Invalid SOC: $SOC!" && return $err
116[ "$err" -eq 3 ] && echo "Invalid BOARD: $BOARD!" && return $err
117[ "$err" -eq 4 ] && echo "Invalid PRODUCT: $PRODUCT!" && return $err
kelvin.zhangac22e652021-10-18 15:09:21 +0800118
119case $ARCH in
120 arm) COMPILER=gcc;TOOLCHAIN_KEYWORD="arm-none-eabi" ;;
121 arm64) COMPILER=gcc;TOOLCHAIN_KEYWORD="aarch64-none-elf" ;;
122 riscv) COMPILER=gcc;TOOLCHAIN_KEYWORD="riscv-none" ;;
Xiaohu.Huang317cb342021-12-13 17:14:53 +0800123 xtensa) COMPILER=xcc;TOOLCHAIN_KEYWORD="xt" ;;
kelvin.zhang6d99b852021-10-25 11:44:04 +0800124 *) echo "Failed to identify ARCH $ARCH";return 1;;
kelvin.zhangac22e652021-10-18 15:09:21 +0800125esac
126
Kelvin Zhang20242b92021-12-15 19:17:43 +0800127export ARCH BOARD COMPILER PRODUCT SOC TOOLCHAIN_KEYWORD