blob: e3c7d2ee6b7eb3bced3e400d39467cd40e9e1425 [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
Kelvin Zhang07e52c02022-01-19 16:37:14 +080058function version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; }
59
60CMAKE_FILE=`which cmake`
61if [ -x /opt/cmake-3.18.4-Linux-x86_64/bin/cmake ]; then
62 export PATH=/opt/cmake-3.18.4-Linux-x86_64/bin/:$PATH
63elif [ -n "$CMAKE_FILE" ]; then
64 CMAKE_VERSION=`cmake --version`
65 pattern="cmake version "
66 CMAKE_VERSION=`echo ${CMAKE_VERSION#*${pattern}}`
67 pattern=" CMake"
68 CMAKE_VERSION=`echo ${CMAKE_VERSION%${pattern}*}`
69 if version_lt $CMAKE_VERSION "3.13.1"; then
70 echo "cmake version $CMAKE_VERSION < 3.13.1!"
71 echo "Please upgrade cmake!"
72 return 0
73 fi
74else
75 echo "cmake not found!"
76 echo "Please install cmake!"
77 return 0
78fi
79
80NINJA_FILE=`which ninja`
81if [ -z "$NINJA_FILE" ]; then
82 echo "ninja not found!"
83 echo "Please install ninja!"
84 return 0
85fi
86
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080087unset ARCHS SOCS BOARDS PRODUCTS
88
bin.chen3436a3e2021-12-21 11:16:26 +080089ARCHS=($(find $PWD/arch -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080090SOCS=($(find $PWD/soc -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
91BOARDS=($(find $PWD/boards -mindepth 2 -maxdepth 2 -type d ! -name ".*" | xargs basename -a | sort -n))
bin.chen3436a3e2021-12-21 11:16:26 +080092PRODUCTS=($(find $PWD/products -mindepth 1 -maxdepth 1 -type d ! -name ".*" | xargs basename -a | sort -n))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080093
kelvin.zhang6d99b852021-10-25 11:44:04 +080094if [ -n "$1" ]; then
95 if [ $1 == "-h" ]; then
96 usage
Kelvin Zhang51284ef2021-12-28 10:49:37 +080097 exit 0
kelvin.zhang6d99b852021-10-25 11:44:04 +080098 else
Kelvin Zhang20242b92021-12-15 19:17:43 +080099 PROJECT="$1 $2 $3 $4"
kelvin.zhang6d99b852021-10-25 11:44:04 +0800100 fi
101else
Kelvin Zhang20242b92021-12-15 19:17:43 +0800102 unset ARRAY
103
104 while IFS= read -r LINE; do
105 ARRAY+=( "$LINE" )
106 done < "$BUILD_COMBINATION"
107
108 echo "Available projects:"
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +0800109 j=0
110 for j in "${!ARRAY[@]}"; do
111 NR=$j
112 ARCH=`echo "${ARRAY[$j]}"|awk '{print $3}'`
113 SOC=`echo "${ARRAY[$j]}"|awk '{print $2}'`
114 BOARD=`echo "${ARRAY[$j]}"|awk '{print $1}'`
115 PRODUCT=`echo "${ARRAY[$j]}"|awk '{print $4}'`
116 j=$((j+1))
117 check_params $ARCH $SOC $BOARD $PRODUCT
118 [ "$?" -ne 0 ] && continue
119
120 echo -e "\t$NR. ${ARRAY[$j-1]}"
Kelvin Zhang20242b92021-12-15 19:17:43 +0800121 done
122 read -p "Choose your project: " CHOICE
123
124 # Determine whether it is a digital number
125 expr $CHOICE + 1 > /dev/null 2>&1
126 if [ $? -eq 0 ]; then
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +0800127 if [ $CHOICE -le $j ]; then
Kelvin Zhang20242b92021-12-15 19:17:43 +0800128 PROJECT=${ARRAY[$CHOICE]}
129 else
130 echo "Wrong choice!"
131 return 0
132 fi
133 else
134 PROJECT=$CHOICE
135 fi
kelvin.zhang6d99b852021-10-25 11:44:04 +0800136fi
kelvin.zhangac22e652021-10-18 15:09:21 +0800137
Kelvin Zhang20242b92021-12-15 19:17:43 +0800138ARCH=`echo "$PROJECT"|awk '{print $3}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800139SOC=`echo "$PROJECT"|awk '{print $2}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800140BOARD=`echo "$PROJECT"|awk '{print $1}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +0800141PRODUCT=`echo "$PROJECT"|awk '{print $4}'`
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +0800142check_params $ARCH $SOC $BOARD $PRODUCT
143err=$?
144[ "$err" -eq 1 ] && echo "Invalid ARCH: $ARCH!" && return $err
145[ "$err" -eq 2 ] && echo "Invalid SOC: $SOC!" && return $err
146[ "$err" -eq 3 ] && echo "Invalid BOARD: $BOARD!" && return $err
147[ "$err" -eq 4 ] && echo "Invalid PRODUCT: $PRODUCT!" && return $err
kelvin.zhangac22e652021-10-18 15:09:21 +0800148
149case $ARCH in
150 arm) COMPILER=gcc;TOOLCHAIN_KEYWORD="arm-none-eabi" ;;
151 arm64) COMPILER=gcc;TOOLCHAIN_KEYWORD="aarch64-none-elf" ;;
152 riscv) COMPILER=gcc;TOOLCHAIN_KEYWORD="riscv-none" ;;
Xiaohu.Huang317cb342021-12-13 17:14:53 +0800153 xtensa) COMPILER=xcc;TOOLCHAIN_KEYWORD="xt" ;;
kelvin.zhang6d99b852021-10-25 11:44:04 +0800154 *) echo "Failed to identify ARCH $ARCH";return 1;;
kelvin.zhangac22e652021-10-18 15:09:21 +0800155esac
156
Xiaohu.Huangcd476ff2022-01-13 17:00:31 +0800157CONF_FILE="$PWD/products/$PRODUCT/prj.conf"
158STACKTRACE_ENABLE=0
159if [ $(grep -c "CONFIG_STACK_TRACE=y" $CONF_FILE) -ne '0' ]; then
160 STACKTRACE_ENABLE=1
161fi
162
163export ARCH BOARD COMPILER PRODUCT SOC TOOLCHAIN_KEYWORD STACKTRACE_ENABLE