blob: ef9b29fda83d2f132e506676f44b033183358444 [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=""
12COVERITY_PATH="/proj/coverity/cov-analysis-linux64-2020.12/bin"
13COV_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.li154e45e2021-11-22 07:47:38 +000018
19#############
20# function
21#############
22function err_exit()
23{
24 echo "Error: $1"
25 exit 1
26}
27
28function check_cov_path() {
dongqing.li5849ac72021-11-24 10:49:26 +000029 echo ""
30 echo "check_cov_path ..."
31 echo ""
dongqing.li154e45e2021-11-22 07:47:38 +000032 if [ -d "${COV_IM_DIR}" ]; then
33 rm -rf ${COV_IM_DIR}
34 fi
35 mkdir -p ${COV_IM_DIR}
dongqing.li5849ac72021-11-24 10:49:26 +000036 if [ -d "${COV_RESULT_HTML}" ]; then
37 rm -rf ${COV_RESULT_HTML}
38 fi
dongqing.li154e45e2021-11-22 07:47:38 +000039}
40
41function run_coverity() {
42 echo ""
43 echo -e "\e[1;35m[1] run cov-build ... \e[0m"
44 ${COVERITY_PATH}/cov-build --dir ${COV_IM_DIR} ./mk $@ || err_exit "cov-build error."
dongqing.li5849ac72021-11-24 10:49:26 +000045 echo -e "\e[1;35m[1] run cov-build OK. \e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +000046
47 echo ""
48 echo -e "\e[1;35m[2] run cov-analyze ... \e[0m"
dongqing.li5849ac72021-11-24 10:49:26 +000049 if [ ${HIGH_LEVEL} = "1" ]; then
50 if [ "${PATTERN_ENABLE}" = "1" ];then
51 ${COVERITY_PATH}/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."
52 else
53 ${COVERITY_PATH}/cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --aggressiveness-level high --fb-max-mem 3072 || err_exit "cov-analyze high level error."
54 fi
55 else
56 if [ "${PATTERN_ENABLE}" = "1" ];then
57 ${COVERITY_PATH}/cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze normal level error."
58 else
59 ${COVERITY_PATH}/cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all || err_exit "cov-analyze normal level error."
60 fi
61 fi
62 echo -e "\e[1;35m[2] run cov-analyze OK. \e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +000063
dongqing.li5849ac72021-11-24 10:49:26 +000064 echo ""
dongqing.li154e45e2021-11-22 07:47:38 +000065 echo -e "\e[1;35m[3] run cov-format-errors ... \e[0m"
dongqing.li5849ac72021-11-24 10:49:26 +000066 ${COVERITY_PATH}/cov-format-errors --dir ${COV_IM_DIR} --html-output ${COV_RESULT_HTML} --filesort --strip-path $MKPATH -x || err_exit "cov-format-errors error."
67 echo -e "\e[1;35m[3] run cov-format-errors OK. \e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +000068 echo "end."
69
dongqing.li5849ac72021-11-24 10:49:26 +000070 rm -rf ${COV_IM_DIR}
dongqing.li154e45e2021-11-22 07:47:38 +000071}
72
73function show_coverity_result() {
74 echo ""
75 echo -e "\e[1;35m[html-result] \e[0m"
dongqing.li5849ac72021-11-24 10:49:26 +000076 echo "you can open the index.html files through a browser, and view code defects."
dongqing.li154e45e2021-11-22 07:47:38 +000077 echo "path: ${MKPATH}/`basename ${COV_RESULT_HTML}`/index.html"
78 echo " "
79}
80
81########
82# mk_script.sh call function here !
83########
84function check_coverity() {
85
dongqing.li5849ac72021-11-24 10:49:26 +000086 MK_ARGV=$@
87 if [ -z "${PATTERN_PATH}" ];then
88 echo "pattern_path not set, ignore. "
89 PATTERN_ENABLE="0"
90 else
91 if [ -e "./${PATTERN_PATH}" ];then
92 echo "PATTERN_PATH set ok: ${PATTERN_PATH}"
93 PATTERN_ENABLE="1"
94 else
95 echo "PATTERN_PATH invalid, ingore."
96 PATTERN_ENABLE="2"
97 fi
98 fi
dongqing.li154e45e2021-11-22 07:47:38 +000099
dongqing.li5849ac72021-11-24 10:49:26 +0000100 echo -e "\e[1;35m=========== run check_coverity() ===========\e[0m"
dongqing.li154e45e2021-11-22 07:47:38 +0000101
dongqing.li5849ac72021-11-24 10:49:26 +0000102 echo "------------------------------------------------------------------"
103 echo "coverity raw command : ./mk $@ "
104
105 # check argv
106 result=$(echo ${MK_ARGV} | grep "\-\-cov-high")
107 if [[ "$result" != "" ]]; then
108 echo "coverity defect level : high"
109 HIGH_LEVEL="1"
110 NEW_ARGV=`echo "${MK_ARGV//--cov-high/ }"`
111 else
112 echo "coverity defect level : normal"
113 HIGH_LEVEL="0"
114 NEW_ARGV=`echo "${MK_ARGV//--cov/ }"`
115 fi
116 if [ "PATTERN_ENABLE" != "0" ];then
117 NEW_ARGV=`echo "${NEW_ARGV//${PATTERN_PATH}/ }"`
118 fi
119 echo "coverity new command : ./mk ${NEW_ARGV}"
120 MKPATH=`pwd -P`
dongqing.li154e45e2021-11-22 07:47:38 +0000121 echo "coverity run path : $MKPATH"
dongqing.li5849ac72021-11-24 10:49:26 +0000122 echo "------------------------------------------------------------------"
dongqing.li154e45e2021-11-22 07:47:38 +0000123
dongqing.li5849ac72021-11-24 10:49:26 +0000124 # check_cov_path
125 check_cov_path
dongqing.li154e45e2021-11-22 07:47:38 +0000126
dongqing.li5849ac72021-11-24 10:49:26 +0000127 # run_coverity
128 run_coverity ${NEW_ARGV}
dongqing.li154e45e2021-11-22 07:47:38 +0000129
dongqing.li5849ac72021-11-24 10:49:26 +0000130 # show coverity result info
131 show_coverity_result
dongqing.li154e45e2021-11-22 07:47:38 +0000132}
133
134
135function show_help() {
136
137 echo -e "\e[1;35m [usage] \e[0m"
138 echo " $0 -c [config_name] -p [pattern_path] -u [update_blx] -t"
139 echo ""
140 echo -e "\e[1;35m [option] \e[0m"
141 echo " -c : config name, eg: t5_ak301_v1, "
142 echo " -p : detect path, only output errors in this path."
143 echo " -t : top level mode,could detect more errors."
144 echo " -d : dump support socs name, when you don't know the soc name, can run it first."
145 echo " -u : build uboot with bl[x]/src source code, eg: bl2 bl2e bl2x bl30 bl31 bl32 "
146 echo " -h : show help"
147 echo ""
148 echo -e "\e[1;35m [example] \e[0m"
149 echo " 1) dump support socs name:"
150 echo " $0 -d"
151 echo " 2) run coverity for bootloader:"
152 echo " $0 -c t5_ak301_v1"
153 echo " 3) run coverity, and filter out errors in the specified directory"
154 echo " $0 -c t5_ak301_v1 -p bl33/v2019/"
155 echo " 4) build uboot with bl[x]/src source code, and use top level mode"
156 echo " $0 -c t5_ak301_v1 -p bl31_1.3/src/ -u bl31 -t"
157 echo ""
158 exit 1
159}
160
161function parser_update_blx() {
162 if [ "${UPDATE}" = "bl2" ];then
163 BLX_NAME="--update-bl2"
164 elif [ "${UPDATE}" = "bl2" ];then
165 BLX_NAME="--update-bl2e"
166 elif [ "${UPDATE}" = "bl2x" ];then
167 BLX_NAME="--update-bl2x"
168 elif [ "${UPDATE}" = "bl30" ];then
169 BLX_NAME="--update-bl30"
170 elif [ "${UPDATE}" = "bl31" ];then
171 BLX_NAME="--update-bl31"
172 elif [ "${UPDATE}" = "bl32" ];then
173 BLX_NAME="--update-bl32"
174 else
175 BLX_NAME=""
176 fi
177}
178
179function main() {
180 if [ $# -lt 1 ]; then
181 show_help
182 exit 1
183 fi
184
185 while getopts c:C:p:P:u:U:tTdDhH opt; do
186 case ${opt} in
187 c|C)
188 CONFIG_NAME=${OPTARG}
189 ;;
190 p|P)
191 PATTERN_PATH=${OPTARG}
192 ;;
193 u|U)
194 UPDATE=${OPTARG}
195 ;;
196 t|T)
197 HIGH_LEVEL="1"
198 ;;
199 d|D)
200 DUMP_FLAG="1"
201 ;;
202 h|H)
203 show_help
204 ;;
205 *)
206 show_help
207 ;;
208 esac
209 done
210
211 if [[ ${DUMP_FLAG} = "1" ]]; then
212 echo ""
213 echo "-----------------------------------------------------------------------------------------"
214 echo "Please select a [config name] below, and try : $0 -c [config name]"
215 echo "-----------------------------------------------------------------------------------------"
216 ./mk --config
217 echo ""
218 exit 1
219 fi
220
221 # parser update blx
222 parser_update_blx
223
224 # check coverity path
225 check_cov_path
226
227 # run_coverity
228 run_coverity ${CONFIG_NAME} ${BLX_NAME}
229
230 # show coverity result path
231 show_coverity_result
232}
233
234#
235# start here.
236#
237MKPATH=`pwd`
238# main $@