dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # |
| 3 | # author: dongqing.li@amlogic.com |
| 4 | # 2021.11.22 v1.0 init. |
| 5 | # |
| 6 | |
| 7 | ############# |
| 8 | # function |
| 9 | ############# |
| 10 | MK_ARGV="" |
| 11 | NEW_ARGV="" |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 12 | #COVERITY_PATH="/proj/coverity/cov-analysis-linux64-2020.12/bin" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 13 | COV_IM_DIR="./cov-imdir" |
| 14 | COV_RESULT_HTML="./result-html" |
| 15 | HIGH_LEVEL="0" |
| 16 | PATTERN_PATH="" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 17 | PATTERN_ENABLE="0" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 18 | IS_CMD_STRING=0 |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 19 | |
| 20 | ############# |
| 21 | # function |
| 22 | ############# |
| 23 | function err_exit() |
| 24 | { |
| 25 | echo "Error: $1" |
| 26 | exit 1 |
| 27 | } |
| 28 | |
| 29 | function check_cov_path() { |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 30 | echo "" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 31 | echo "check_cov_path: ${MKPATH}" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 32 | echo "" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 33 | if [ -d "${COV_IM_DIR}" ]; then |
| 34 | rm -rf ${COV_IM_DIR} |
| 35 | fi |
| 36 | mkdir -p ${COV_IM_DIR} |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 37 | if [ -d "${COV_RESULT_HTML}" ]; then |
| 38 | rm -rf ${COV_RESULT_HTML} |
| 39 | fi |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 40 | } |
| 41 | |
| 42 | function run_coverity() { |
| 43 | echo "" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 44 | echo -e "\e[1;35m[1] run cov-build: $@ \e[0m" |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 45 | cov-build --dir ${COV_IM_DIR} $@ || err_exit "cov-build error." |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 46 | echo -e "\e[1;35m[1] run cov-build OK. \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 47 | } |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 48 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 49 | function analysis_coverity() { |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 50 | echo "" |
| 51 | echo -e "\e[1;35m[2] run cov-analyze ... \e[0m" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 52 | if [ ${HIGH_LEVEL} = "1" ]; then |
| 53 | if [ "${PATTERN_ENABLE}" = "1" ];then |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 54 | 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.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 55 | else |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 56 | 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.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 57 | fi |
| 58 | else |
| 59 | if [ "${PATTERN_ENABLE}" = "1" ];then |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 60 | cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze normal level error." |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 61 | else |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 62 | cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all || err_exit "cov-analyze normal level error." |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 63 | fi |
| 64 | fi |
| 65 | echo -e "\e[1;35m[2] run cov-analyze OK. \e[0m" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 66 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 67 | echo "" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 68 | echo -e "\e[1;35m[3] run cov-format-errors ... \e[0m" |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 69 | cov-format-errors --dir ${COV_IM_DIR} --html-output ${COV_RESULT_HTML} --filesort --strip-path $MKPATH -x || err_exit "cov-format-errors error." |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 70 | echo -e "\e[1;35m[3] run cov-format-errors OK. \e[0m" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 71 | echo "end." |
| 72 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 73 | rm -rf ${COV_IM_DIR} |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 74 | } |
| 75 | |
| 76 | function show_coverity_result() { |
| 77 | echo "" |
| 78 | echo -e "\e[1;35m[html-result] \e[0m" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 79 | echo "you can open the index.html files through a browser, and view code defects." |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 80 | echo "path: ${MKPATH}/`basename ${COV_RESULT_HTML}`/index.html" |
| 81 | echo " " |
| 82 | } |
| 83 | |
| 84 | ######## |
| 85 | # mk_script.sh call function here ! |
| 86 | ######## |
| 87 | function check_coverity() { |
| 88 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 89 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 102 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 103 | echo -e "\e[1;35m=========== run check_coverity() ===========\e[0m" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 104 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 105 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 124 | echo "coverity run path : $MKPATH" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 125 | echo "------------------------------------------------------------------" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 126 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 127 | # check_cov_path |
| 128 | check_cov_path |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 129 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 130 | # run_coverity |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 131 | run_coverity "./mk ${NEW_ARGV}" |
| 132 | |
| 133 | # analysis coverity |
| 134 | analysis_coverity |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 135 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 136 | # show coverity result info |
| 137 | show_coverity_result |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 138 | } |
| 139 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 140 | ############# |
| 141 | # for bl2/core |
| 142 | ############# |
| 143 | function 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 | |
| 167 | function run_cov_for_bl2_core() { |
| 168 | # get all support soc |
| 169 | cd ../ree/plat/ |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 170 | array=`ls -d *` |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 171 | cd - &> /dev/null |
| 172 | |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 173 | skiped=("common" "fvp" "juno" "golden") |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 174 | for item in ${skiped[@]} |
| 175 | { |
| 176 | # remove skiped item |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 177 | array=${array//${item}/''} |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 178 | } |
| 179 | |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 180 | RESULT='\n'"Build BL2 core for SoC: "${array[@]}'\n' |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 181 | echo -e $RESULT |
| 182 | |
| 183 | # loop all soc |
dongqing.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 184 | for soc in ${array[@]} |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 185 | 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.li | 8857e06 | 2022-09-08 15:54:48 +0800 | [diff] [blame^] | 193 | run_coverity ./mk $soc --dusb |
| 194 | run_coverity ./mk $soc --dsto |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 195 | done |
| 196 | } |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 197 | |
| 198 | function show_help() { |
| 199 | |
| 200 | echo -e "\e[1;35m [usage] \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 201 | echo " /path/to/bootloader/fip/`basename $0` -c [cmd_string] -p [pattern_path] -t" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 202 | echo "" |
| 203 | echo -e "\e[1;35m [option] \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 204 | echo " -c : cmd string, eg: ./check.sh " |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 205 | echo " -p : detect path, only output errors in this path." |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 206 | echo " -t : top level mode, could detect more errors." |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 207 | echo " -h : show help" |
| 208 | echo "" |
| 209 | echo -e "\e[1;35m [example] \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 210 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 216 | echo "" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 217 | return |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 218 | } |
| 219 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 220 | ############# |
| 221 | # main |
| 222 | ############# |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 223 | function main() { |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 224 | if [[ "$0" =~ "coverity" ]]; then |
| 225 | echo "cmd string: $0 $@" |
| 226 | if [ $# -lt 1 ]; then |
| 227 | show_help |
| 228 | fi |
| 229 | else |
| 230 | return |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 231 | fi |
| 232 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 233 | while getopts c:C:p:P:t:T:hH opt; do |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 234 | case ${opt} in |
| 235 | c|C) |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 236 | CMD_STRING=${OPTARG} |
| 237 | IS_CMD_STRING=1 |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 238 | ;; |
| 239 | p|P) |
| 240 | PATTERN_PATH=${OPTARG} |
| 241 | ;; |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 242 | t|T) |
| 243 | HIGH_LEVEL="1" |
| 244 | ;; |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 245 | h|H) |
| 246 | show_help |
| 247 | ;; |
| 248 | *) |
| 249 | show_help |
| 250 | ;; |
| 251 | esac |
| 252 | done |
| 253 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 254 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 270 | fi |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 271 | } |
| 272 | |
| 273 | # |
| 274 | # start here. |
| 275 | # |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame] | 276 | MKPATH=`pwd -P` |
| 277 | main $@ |