blob: dca38a8502f1caa2b43fb25547a2b43dd98ab087 [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.zhang6d99b852021-10-25 11:44:04 +080012usage()
13{
kelvin.zhang058d6f82022-02-10 14:55:35 +080014 echo "Usage: source $BASH_SOURCE [arch_name] [soc_name] [board_name] [product_name]"
kelvin.zhang6d99b852021-10-25 11:44:04 +080015 echo "−h: display help."
16 echo ""
17}
kelvin.zhangac22e652021-10-18 15:09:21 +080018
Kelvin Zhangc18bac62022-03-14 10:31:57 +080019version_lt() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" != "$1"; }
Kelvin Zhang07e52c02022-01-19 16:37:14 +080020
21CMAKE_FILE=`which cmake`
22if [ -x /opt/cmake-3.18.4-Linux-x86_64/bin/cmake ]; then
23 export PATH=/opt/cmake-3.18.4-Linux-x86_64/bin/:$PATH
24elif [ -n "$CMAKE_FILE" ]; then
25 CMAKE_VERSION=`cmake --version`
26 pattern="cmake version "
27 CMAKE_VERSION=`echo ${CMAKE_VERSION#*${pattern}}`
28 pattern=" CMake"
29 CMAKE_VERSION=`echo ${CMAKE_VERSION%${pattern}*}`
30 if version_lt $CMAKE_VERSION "3.13.1"; then
31 echo "cmake version $CMAKE_VERSION < 3.13.1!"
32 echo "Please upgrade cmake!"
33 return 0
34 fi
35else
36 echo "cmake not found!"
37 echo "Please install cmake!"
38 return 0
39fi
40
41NINJA_FILE=`which ninja`
42if [ -z "$NINJA_FILE" ]; then
43 echo "ninja not found!"
44 echo "Please install ninja!"
45 return 0
46fi
47
Kelvin Zhangc18bac62022-03-14 10:31:57 +080048source scripts/gen_build_combination.sh
Kelvin Zhang0848b602022-03-11 16:11:47 +080049
kelvin.zhang6d99b852021-10-25 11:44:04 +080050if [ -n "$1" ]; then
51 if [ $1 == "-h" ]; then
52 usage
Kelvin Zhang51284ef2021-12-28 10:49:37 +080053 exit 0
kelvin.zhang6d99b852021-10-25 11:44:04 +080054 else
Kelvin Zhang20242b92021-12-15 19:17:43 +080055 PROJECT="$1 $2 $3 $4"
kelvin.zhang6d99b852021-10-25 11:44:04 +080056 fi
57else
Kelvin Zhang20242b92021-12-15 19:17:43 +080058 unset ARRAY
59
60 while IFS= read -r LINE; do
61 ARRAY+=( "$LINE" )
Kelvin Zhang0848b602022-03-11 16:11:47 +080062 done < $BUILD_COMBINATION
Kelvin Zhang20242b92021-12-15 19:17:43 +080063
64 echo "Available projects:"
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080065 j=0
66 for j in "${!ARRAY[@]}"; do
67 NR=$j
Kelvin Zhang98f4e8a2022-02-10 09:41:38 +080068 ARCH=`echo "${ARRAY[$j]}"|awk '{print $1}'`
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080069 SOC=`echo "${ARRAY[$j]}"|awk '{print $2}'`
Kelvin Zhang98f4e8a2022-02-10 09:41:38 +080070 BOARD=`echo "${ARRAY[$j]}"|awk '{print $3}'`
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080071 PRODUCT=`echo "${ARRAY[$j]}"|awk '{print $4}'`
72 j=$((j+1))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080073 echo -e "\t$NR. ${ARRAY[$j-1]}"
Kelvin Zhang20242b92021-12-15 19:17:43 +080074 done
75 read -p "Choose your project: " CHOICE
76
77 # Determine whether it is a digital number
78 expr $CHOICE + 1 > /dev/null 2>&1
79 if [ $? -eq 0 ]; then
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080080 if [ $CHOICE -le $j ]; then
Kelvin Zhang20242b92021-12-15 19:17:43 +080081 PROJECT=${ARRAY[$CHOICE]}
82 else
83 echo "Wrong choice!"
84 return 0
85 fi
86 else
87 PROJECT=$CHOICE
88 fi
kelvin.zhang6d99b852021-10-25 11:44:04 +080089fi
kelvin.zhangac22e652021-10-18 15:09:21 +080090
Kelvin Zhang98f4e8a2022-02-10 09:41:38 +080091ARCH=`echo "$PROJECT"|awk '{print $1}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +080092SOC=`echo "$PROJECT"|awk '{print $2}'`
Kelvin Zhang98f4e8a2022-02-10 09:41:38 +080093BOARD=`echo "$PROJECT"|awk '{print $3}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +080094PRODUCT=`echo "$PROJECT"|awk '{print $4}'`
Kelvin Zhang0848b602022-03-11 16:11:47 +080095# Check current project
Kelvin Zhangc18bac62022-03-14 10:31:57 +080096check_build_combination $ARCH $SOC $BOARD $PRODUCT
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080097err=$?
98[ "$err" -eq 1 ] && echo "Invalid ARCH: $ARCH!" && return $err
99[ "$err" -eq 2 ] && echo "Invalid SOC: $SOC!" && return $err
100[ "$err" -eq 3 ] && echo "Invalid BOARD: $BOARD!" && return $err
101[ "$err" -eq 4 ] && echo "Invalid PRODUCT: $PRODUCT!" && return $err
kelvin.zhangac22e652021-10-18 15:09:21 +0800102
103case $ARCH in
104 arm) COMPILER=gcc;TOOLCHAIN_KEYWORD="arm-none-eabi" ;;
105 arm64) COMPILER=gcc;TOOLCHAIN_KEYWORD="aarch64-none-elf" ;;
106 riscv) COMPILER=gcc;TOOLCHAIN_KEYWORD="riscv-none" ;;
Xiaohu.Huang317cb342021-12-13 17:14:53 +0800107 xtensa) COMPILER=xcc;TOOLCHAIN_KEYWORD="xt" ;;
kelvin.zhang6d99b852021-10-25 11:44:04 +0800108 *) echo "Failed to identify ARCH $ARCH";return 1;;
kelvin.zhangac22e652021-10-18 15:09:21 +0800109esac
110
Xiaohu.Huangcd476ff2022-01-13 17:00:31 +0800111CONF_FILE="$PWD/products/$PRODUCT/prj.conf"
112STACKTRACE_ENABLE=0
113if [ $(grep -c "CONFIG_STACK_TRACE=y" $CONF_FILE) -ne '0' ]; then
114 STACKTRACE_ENABLE=1
115fi
116
Kelvin Zhang69dc9fb2022-02-18 16:44:04 +0800117KERNEL=freertos
118
119export ARCH BOARD COMPILER KERNEL PRODUCT SOC TOOLCHAIN_KEYWORD STACKTRACE_ENABLE