blob: 7fc1f803c1de095858d35ce30e0f6bada06e7379 [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.huang29fd84c2022-12-19 15:27:00 +080093COMPILER=`echo "$PROJECT"|awk '{print $5}'`
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
102case $ARCH in
xiaohu.huang29fd84c2022-12-19 15:27:00 +0800103 arm) COMPILER=gcc; TOOLCHAIN_KEYWORD="arm-none-eabi" ;;
104 arm64) if [ "$COMPILER" == "clang+llvm" ]; then
105 TOOLCHAIN_KEYWORD="arm"
106 TOOLCHAIN_PATH=$PWD/output/toolchains/clang+llvm-arm
107 else
108 COMPILER="gcc"
109 TOOLCHAIN_KEYWORD="aarch64-none-elf"
110 fi
111 ;;
112 riscv) COMPILER="gcc"; TOOLCHAIN_KEYWORD="riscv-none" ;;
113 xtensa) COMPILER="xcc"; TOOLCHAIN_KEYWORD="xt" ;;
kelvin.zhang6d99b852021-10-25 11:44:04 +0800114 *) echo "Failed to identify ARCH $ARCH";return 1;;
kelvin.zhangac22e652021-10-18 15:09:21 +0800115esac
116
shijie.xiongb0afe962024-01-11 17:23:28 +0800117unset SPLIT_ARCH_DIR
118for split in ${SPLITARCH[*]}; do
119 result=$(find $PWD/boards/$ARCH/$split -type d -name "$BOARD" 2>/dev/null)
120 if [ -n "$result" ]; then
121 SPLIT_ARCH_DIR=$(basename "$(dirname "$result")")
122 fi
123done
124
Xiaohu.Huangcd476ff2022-01-13 17:00:31 +0800125CONF_FILE="$PWD/products/$PRODUCT/prj.conf"
shijie.xiongb3ddc702022-03-17 14:12:02 +0800126BACKTRACE_ENABLE=0
127if [ $(grep -c "CONFIG_BACKTRACE=y" $CONF_FILE) -ne '0' ]; then
128 BACKTRACE_ENABLE=1
Xiaohu.Huangcd476ff2022-01-13 17:00:31 +0800129fi
130
Kelvin Zhang69dc9fb2022-02-18 16:44:04 +0800131KERNEL=freertos
132
shijie.xiongb0afe962024-01-11 17:23:28 +0800133export ARCH BOARD COMPILER KERNEL PRODUCT SOC TOOLCHAIN_KEYWORD TOOLCHAIN_PATH BACKTRACE_ENABLE SPLIT_ARCH_DIR