blob: 187cd679c76b0dcf464c453411ec68fd459e9572 [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
xiaohu.huang411663e2022-03-25 11:25:02 +080050if [ -n "$1" ] && [ $1 == "-h" ]; then
51 usage
52 return 0
53elif [ $# -eq 4 ]; then
54 PROJECT="$1 $2 $3 $4"
xiaohu.huang29fd84c2022-12-19 15:27:00 +080055 echo "Choose project:$PROJECT"
56elif [ $# -eq 5 ]; then
57 PROJECT="$1 $2 $3 $4 $5"
58 echo "Choose project:$PROJECT"
kelvin.zhang6d99b852021-10-25 11:44:04 +080059else
Kelvin Zhang20242b92021-12-15 19:17:43 +080060 unset ARRAY
61
62 while IFS= read -r LINE; do
63 ARRAY+=( "$LINE" )
Kelvin Zhang0848b602022-03-11 16:11:47 +080064 done < $BUILD_COMBINATION
Kelvin Zhang20242b92021-12-15 19:17:43 +080065
66 echo "Available projects:"
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080067 j=0
68 for j in "${!ARRAY[@]}"; do
69 NR=$j
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080070 j=$((j+1))
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080071 echo -e "\t$NR. ${ARRAY[$j-1]}"
Kelvin Zhang20242b92021-12-15 19:17:43 +080072 done
73 read -p "Choose your project: " CHOICE
74
75 # Determine whether it is a digital number
76 expr $CHOICE + 1 > /dev/null 2>&1
77 if [ $? -eq 0 ]; then
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080078 if [ $CHOICE -le $j ]; then
Kelvin Zhang20242b92021-12-15 19:17:43 +080079 PROJECT=${ARRAY[$CHOICE]}
80 else
81 echo "Wrong choice!"
82 return 0
83 fi
84 else
85 PROJECT=$CHOICE
86 fi
kelvin.zhang6d99b852021-10-25 11:44:04 +080087fi
kelvin.zhangac22e652021-10-18 15:09:21 +080088
Kelvin Zhang98f4e8a2022-02-10 09:41:38 +080089ARCH=`echo "$PROJECT"|awk '{print $1}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +080090SOC=`echo "$PROJECT"|awk '{print $2}'`
Kelvin Zhang98f4e8a2022-02-10 09:41:38 +080091BOARD=`echo "$PROJECT"|awk '{print $3}'`
Kelvin Zhang20242b92021-12-15 19:17:43 +080092PRODUCT=`echo "$PROJECT"|awk '{print $4}'`
xiaohu.huang8770ee92024-06-27 15:46:45 +080093
Kelvin Zhang0848b602022-03-11 16:11:47 +080094# Check current project
Kelvin Zhangc18bac62022-03-14 10:31:57 +080095check_build_combination $ARCH $SOC $BOARD $PRODUCT
Kelvin Zhangb2ab0e62021-12-17 11:12:36 +080096err=$?
97[ "$err" -eq 1 ] && echo "Invalid ARCH: $ARCH!" && return $err
98[ "$err" -eq 2 ] && echo "Invalid SOC: $SOC!" && return $err
99[ "$err" -eq 3 ] && echo "Invalid BOARD: $BOARD!" && return $err
100[ "$err" -eq 4 ] && echo "Invalid PRODUCT: $PRODUCT!" && return $err
kelvin.zhangac22e652021-10-18 15:09:21 +0800101
shijie.xiongbd44f352024-05-08 11:22:36 +0800102# Set compiler-related information according to chip architecture.
kelvin.zhangac22e652021-10-18 15:09:21 +0800103case $ARCH in
shijie.xiongbd44f352024-05-08 11:22:36 +0800104 arm)
105 COMPILER=gcc
106 TOOLCHAIN_KEYWORD="arm-none-eabi"
107 ;;
108 arm64)
xiaohu.huang8770ee92024-06-27 15:46:45 +0800109 COMPILER="gcc"
110 TOOLCHAIN_KEYWORD="aarch64-none-elf"
shijie.xiongbd44f352024-05-08 11:22:36 +0800111 ;;
112 riscv)
113 COMPILER="gcc"
114 TOOLCHAIN_KEYWORD="riscv-none"
115 ;;
116 xtensa)
117 COMPILER="xcc"
118 TOOLCHAIN_KEYWORD="xt"
119 ;;
120 *)
121 echo "Failed to identify ARCH $ARCH"
122 return 1
123 ;;
kelvin.zhangac22e652021-10-18 15:09:21 +0800124esac
125
shijie.xiongb0afe962024-01-11 17:23:28 +0800126unset SPLIT_ARCH_DIR
127for split in ${SPLITARCH[*]}; do
128 result=$(find $PWD/boards/$ARCH/$split -type d -name "$BOARD" 2>/dev/null)
129 if [ -n "$result" ]; then
130 SPLIT_ARCH_DIR=$(basename "$(dirname "$result")")
131 fi
132done
133
Xiaohu.Huangcd476ff2022-01-13 17:00:31 +0800134CONF_FILE="$PWD/products/$PRODUCT/prj.conf"
shijie.xiongb3ddc702022-03-17 14:12:02 +0800135BACKTRACE_ENABLE=0
136if [ $(grep -c "CONFIG_BACKTRACE=y" $CONF_FILE) -ne '0' ]; then
137 BACKTRACE_ENABLE=1
Xiaohu.Huangcd476ff2022-01-13 17:00:31 +0800138fi
139
Kelvin Zhang69dc9fb2022-02-18 16:44:04 +0800140KERNEL=freertos
141
shijie.xiongbd44f352024-05-08 11:22:36 +0800142export ARCH BOARD COMPILER KERNEL PRODUCT SOC TOOLCHAIN_KEYWORD BACKTRACE_ENABLE SPLIT_ARCH_DIR