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