blob: 5a70b6a67f99fc57ac65f5f502586fbc0fe80e95 [file] [log] [blame]
dongqing.li154e45e2021-11-22 07:47:38 +00001#!/bin/bash
2#
3# author: dongqing.li@amlogic.com
4# 2021.11.22 v1.0 init.
5#
6
7#############
8# function
9#############
10MK_ARGV=""
11NEW_ARGV=""
dongqing.li8857e062022-09-08 15:54:48 +080012#COVERITY_PATH="/proj/coverity/cov-analysis-linux64-2020.12/bin"
dongqing.li154e45e2021-11-22 07:47:38 +000013COV_IM_DIR="./cov-imdir"
14COV_RESULT_HTML="./result-html"
15HIGH_LEVEL="0"
16PATTERN_PATH=""
dongqing.li5849ac72021-11-24 10:49:26 +000017PATTERN_ENABLE="0"
dongqing.li92587aa2022-09-05 21:16:36 +080018IS_CMD_STRING=0
dongqing.li154e45e2021-11-22 07:47:38 +000019
20#############
21# function
22#############
23function err_exit()
24{
25 echo "Error: $1"
26 exit 1
27}
28
29function check_cov_path() {
dongqing.li5849ac72021-11-24 10:49:26 +000030 echo ""
dongqing.li92587aa2022-09-05 21:16:36 +080031 echo "check_cov_path: ${MKPATH}"
dongqing.li5849ac72021-11-24 10:49:26 +000032 echo ""
dongqing.li154e45e2021-11-22 07:47:38 +000033 if [ -d "${COV_IM_DIR}" ]; then
34 rm -rf ${COV_IM_DIR}
35 fi
36 mkdir -p ${COV_IM_DIR}
dongqing.li5849ac72021-11-24 10:49:26 +000037 if [ -d "${COV_RESULT_HTML}" ]; then
38 rm -rf ${COV_RESULT_HTML}
39 fi
dongqing.li154e45e2021-11-22 07:47:38 +000040}
41
42function run_coverity() {
43 echo ""
dongqing.li92587aa2022-09-05 21:16:36 +080044 echo -e "\e[1;35m[1] run cov-build: $@ \e[0m"
dongqing.li8857e062022-09-08 15:54:48 +080045 cov-build --dir ${COV_IM_DIR} $@ || err_exit "cov-build error."
dongqing.li5849ac72021-11-24 10:49:26 +000046 echo -e "\e[1;35m[1] run cov-build OK. \e[0m"
dongqing.li92587aa2022-09-05 21:16:36 +080047}
dongqing.li154e45e2021-11-22 07:47:38 +000048
dongqing.li92587aa2022-09-05 21:16:36 +080049function analysis_coverity() {
dongqing.li154e45e2021-11-22 07:47:38 +000050 echo ""
51 echo -e "\e[1;35m[2] run cov-analyze ... \e[0m"
dongqing.li5849ac72021-11-24 10:49:26 +000052 if [ ${HIGH_LEVEL} = "1" ]; then
53 if [ "${PATTERN_ENABLE}" = "1" ];then
dongqing.li8857e062022-09-08 15:54:48 +080054 cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --aggressiveness-level high --fb-max-mem 3072 --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze high level error."
dongqing.li5849ac72021-11-24 10:49:26 +000055 else
dongqing.li8857e062022-09-08 15:54:48 +080056 cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --aggressiveness-level high --fb-max-mem 3072 || err_exit "cov-analyze high level error."
dongqing.li5849ac72021-11-24 10:49:26 +000057 fi
58 else
59 if [ "${PATTERN_ENABLE}" = "1" ];then
dongqing.li8857e062022-09-08 15:54:48 +080060 cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze normal level error."
dongqing.li5849ac72021-11-24 10:49:26 +000061 else
dongqing.li8857e062022-09-08 15:54:48 +080062 cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all || err_exit "cov-analyze normal level error."
dongqing.li5849ac72021-11-24 10:49:26 +000063 fi
64 fi
65 echo -e "\e[1;35m[2] run cov-analyze OK. \e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +000066
dongqing.li5849ac72021-11-24 10:49:26 +000067 echo ""
dongqing.li154e45e2021-11-22 07:47:38 +000068 echo -e "\e[1;35m[3] run cov-format-errors ... \e[0m"
dongqing.li8857e062022-09-08 15:54:48 +080069 cov-format-errors --dir ${COV_IM_DIR} --html-output ${COV_RESULT_HTML} --filesort --strip-path $MKPATH -x || err_exit "cov-format-errors error."
dongqing.li5849ac72021-11-24 10:49:26 +000070 echo -e "\e[1;35m[3] run cov-format-errors OK. \e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +000071 echo "end."
72
dongqing.li5849ac72021-11-24 10:49:26 +000073 rm -rf ${COV_IM_DIR}
dongqing.li154e45e2021-11-22 07:47:38 +000074}
75
76function show_coverity_result() {
77 echo ""
78 echo -e "\e[1;35m[html-result] \e[0m"
dongqing.li5849ac72021-11-24 10:49:26 +000079 echo "you can open the index.html files through a browser, and view code defects."
dongqing.li154e45e2021-11-22 07:47:38 +000080 echo "path: ${MKPATH}/`basename ${COV_RESULT_HTML}`/index.html"
81 echo " "
82}
83
84########
85# mk_script.sh call function here !
86########
87function check_coverity() {
88
dongqing.li5849ac72021-11-24 10:49:26 +000089 MK_ARGV=$@
90 if [ -z "${PATTERN_PATH}" ];then
91 echo "pattern_path not set, ignore. "
92 PATTERN_ENABLE="0"
93 else
94 if [ -e "./${PATTERN_PATH}" ];then
95 echo "PATTERN_PATH set ok: ${PATTERN_PATH}"
96 PATTERN_ENABLE="1"
97 else
98 echo "PATTERN_PATH invalid, ingore."
99 PATTERN_ENABLE="2"
100 fi
101 fi
dongqing.li154e45e2021-11-22 07:47:38 +0000102
dongqing.li5849ac72021-11-24 10:49:26 +0000103 echo -e "\e[1;35m=========== run check_coverity() ===========\e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +0000104
dongqing.li5849ac72021-11-24 10:49:26 +0000105 echo "------------------------------------------------------------------"
106 echo "coverity raw command : ./mk $@ "
107
108 # check argv
109 result=$(echo ${MK_ARGV} | grep "\-\-cov-high")
110 if [[ "$result" != "" ]]; then
111 echo "coverity defect level : high"
112 HIGH_LEVEL="1"
113 NEW_ARGV=`echo "${MK_ARGV//--cov-high/ }"`
114 else
115 echo "coverity defect level : normal"
116 HIGH_LEVEL="0"
117 NEW_ARGV=`echo "${MK_ARGV//--cov/ }"`
118 fi
119 if [ "PATTERN_ENABLE" != "0" ];then
120 NEW_ARGV=`echo "${NEW_ARGV//${PATTERN_PATH}/ }"`
121 fi
122 echo "coverity new command : ./mk ${NEW_ARGV}"
123 MKPATH=`pwd -P`
dongqing.li154e45e2021-11-22 07:47:38 +0000124 echo "coverity run path : $MKPATH"
dongqing.li5849ac72021-11-24 10:49:26 +0000125 echo "------------------------------------------------------------------"
dongqing.li154e45e2021-11-22 07:47:38 +0000126
dongqing.li5849ac72021-11-24 10:49:26 +0000127 # check_cov_path
128 check_cov_path
dongqing.li154e45e2021-11-22 07:47:38 +0000129
dongqing.li5849ac72021-11-24 10:49:26 +0000130 # run_coverity
dongqing.li92587aa2022-09-05 21:16:36 +0800131 run_coverity "./mk ${NEW_ARGV}"
132
133 # analysis coverity
134 analysis_coverity
dongqing.li154e45e2021-11-22 07:47:38 +0000135
dongqing.li5849ac72021-11-24 10:49:26 +0000136 # show coverity result info
137 show_coverity_result
dongqing.li154e45e2021-11-22 07:47:38 +0000138}
139
dongqing.li92587aa2022-09-05 21:16:36 +0800140#############
141# for bl2/core
142#############
143function sync_code() {
144 #echo "begin sync branch: $1/$2"
145 if [ -z $2 ]; then
146 err_exit "branch($2) error !"
147 fi
148 git reset --hard
149 cnt=`git branch |grep test1 -c`
150 if [ $cnt -eq 0 ]; then
151 git checkout -b test1
152 else
153 git checkout test1
154 fi
155 cnt=`git branch |grep $2 -c`
156 if [ ! $cnt -eq 0 ]; then
157 git branch -D $2 > /dev/null
158 fi
159 git checkout -t $1/$2 || err_exit "git checkout -t $1/$2 faild !"
160 git fetch --all
161 git reset --hard $1/$2
162 git pull
163 git branch -D test1
164 echo
165}
166
167function run_cov_for_bl2_core() {
168 # get all support soc
169 cd ../ree/plat/
dongqing.li8857e062022-09-08 15:54:48 +0800170 array=`ls -d *`
dongqing.li92587aa2022-09-05 21:16:36 +0800171 cd - &> /dev/null
172
dongqing.li8857e062022-09-08 15:54:48 +0800173 skiped=("common" "fvp" "juno" "golden")
dongqing.li92587aa2022-09-05 21:16:36 +0800174 for item in ${skiped[@]}
175 {
176 # remove skiped item
dongqing.li8857e062022-09-08 15:54:48 +0800177 array=${array//${item}/''}
dongqing.li92587aa2022-09-05 21:16:36 +0800178 }
179
dongqing.li8857e062022-09-08 15:54:48 +0800180 RESULT='\n'"Build BL2 core for SoC: "${array[@]}'\n'
dongqing.li92587aa2022-09-05 21:16:36 +0800181 echo -e $RESULT
182
183 # loop all soc
dongqing.li8857e062022-09-08 15:54:48 +0800184 for soc in ${array[@]}
dongqing.li92587aa2022-09-05 21:16:36 +0800185 do
186 TEST_BRANCH=projects/$soc
187 echo "TEST_BRANCH=:$TEST_BRANCH"
188
189 # prepare code
190 sync_code firmware ${TEST_BRANCH}
191
192 # run test
dongqing.li8857e062022-09-08 15:54:48 +0800193 run_coverity ./mk $soc --dusb
194 run_coverity ./mk $soc --dsto
dongqing.li92587aa2022-09-05 21:16:36 +0800195 done
196}
dongqing.li154e45e2021-11-22 07:47:38 +0000197
198function show_help() {
199
200 echo -e "\e[1;35m [usage] \e[0m"
dongqing.li92587aa2022-09-05 21:16:36 +0800201 echo " /path/to/bootloader/fip/`basename $0` -c [cmd_string] -p [pattern_path] -t"
dongqing.li154e45e2021-11-22 07:47:38 +0000202 echo ""
203 echo -e "\e[1;35m [option] \e[0m"
dongqing.li92587aa2022-09-05 21:16:36 +0800204 echo " -c : cmd string, eg: ./check.sh "
dongqing.li154e45e2021-11-22 07:47:38 +0000205 echo " -p : detect path, only output errors in this path."
dongqing.li92587aa2022-09-05 21:16:36 +0800206 echo " -t : top level mode, could detect more errors."
dongqing.li154e45e2021-11-22 07:47:38 +0000207 echo " -h : show help"
208 echo ""
209 echo -e "\e[1;35m [example] \e[0m"
dongqing.li92587aa2022-09-05 21:16:36 +0800210 echo " 1) In path [bl2/core]:"
211 echo " /path/to/bootloader/fip/`basename $0` -c bl2_core"
212 echo " 2) In path [bl2/src] [bl2/ree] [bl2/tee] [bl31_1.3/src] [bl32_3.8/src]:"
213 echo " /path/to/bootloader/fip/`basename $0` -c ./check.sh"
214 echo " 3) In path [bl33/v2015] [bl33/v2019]:"
215 echo " /path/to/bootloader/fip/`basename $0` -c ./check_compile.sh"
dongqing.li154e45e2021-11-22 07:47:38 +0000216 echo ""
dongqing.li92587aa2022-09-05 21:16:36 +0800217 return
dongqing.li154e45e2021-11-22 07:47:38 +0000218}
219
dongqing.li92587aa2022-09-05 21:16:36 +0800220#############
221# main
222#############
dongqing.li154e45e2021-11-22 07:47:38 +0000223function main() {
dongqing.li92587aa2022-09-05 21:16:36 +0800224 if [[ "$0" =~ "coverity" ]]; then
225 echo "cmd string: $0 $@"
226 if [ $# -lt 1 ]; then
227 show_help
228 fi
229 else
230 return
dongqing.li154e45e2021-11-22 07:47:38 +0000231 fi
232
dongqing.li92587aa2022-09-05 21:16:36 +0800233 while getopts c:C:p:P:t:T:hH opt; do
dongqing.li154e45e2021-11-22 07:47:38 +0000234 case ${opt} in
235 c|C)
dongqing.li92587aa2022-09-05 21:16:36 +0800236 CMD_STRING=${OPTARG}
237 IS_CMD_STRING=1
dongqing.li154e45e2021-11-22 07:47:38 +0000238 ;;
239 p|P)
240 PATTERN_PATH=${OPTARG}
241 ;;
dongqing.li154e45e2021-11-22 07:47:38 +0000242 t|T)
243 HIGH_LEVEL="1"
244 ;;
dongqing.li154e45e2021-11-22 07:47:38 +0000245 h|H)
246 show_help
247 ;;
248 *)
249 show_help
250 ;;
251 esac
252 done
253
dongqing.li92587aa2022-09-05 21:16:36 +0800254 if [ $IS_CMD_STRING -eq 1 ]; then
255 # check coverity path
256 check_cov_path
257
258 # run_coverity
259 if [ ${CMD_STRING} = "bl2_core" ]; then
260 run_cov_for_bl2_core
261 else
262 run_coverity ${CMD_STRING}
263 fi
264
265 # analysis coverity
266 analysis_coverity
267
268 # show coverity result path
269 show_coverity_result
dongqing.li154e45e2021-11-22 07:47:38 +0000270 fi
dongqing.li154e45e2021-11-22 07:47:38 +0000271}
272
273#
274# start here.
275#
dongqing.li92587aa2022-09-05 21:16:36 +0800276MKPATH=`pwd -P`
277main $@