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="" |
| 12 | COVERITY_PATH="/proj/coverity/cov-analysis-linux64-2020.12/bin" |
| 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" |
| 45 | ${COVERITY_PATH}/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 |
| 54 | ${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." |
| 55 | else |
| 56 | ${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." |
| 57 | fi |
| 58 | else |
| 59 | if [ "${PATTERN_ENABLE}" = "1" ];then |
| 60 | ${COVERITY_PATH}/cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all --tu-pattern "file('/${PATTERN_PATH}')" || err_exit "cov-analyze normal level error." |
| 61 | else |
| 62 | ${COVERITY_PATH}/cov-analyze --dir ${COV_IM_DIR} --strip-path $MKPATH --all || err_exit "cov-analyze normal level error." |
| 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 | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame] | 69 | ${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." |
| 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/ |
| 170 | arry=`ls -d *` |
| 171 | cd - &> /dev/null |
| 172 | |
| 173 | skiped=("common" "fvp" "juno" "golden" "c3") |
| 174 | for item in ${skiped[@]} |
| 175 | { |
| 176 | # remove skiped item |
| 177 | arry=${arry//${item}/''} |
| 178 | } |
| 179 | |
| 180 | RESULT='\n'"Build BL2 core for SoC: "$arry'\n' |
| 181 | echo -e $RESULT |
| 182 | |
| 183 | # loop all soc |
| 184 | for soc in ${arry[@]} |
| 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 |
| 193 | run_coverity ./mk $soc |
| 194 | done |
| 195 | } |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 196 | |
| 197 | function show_help() { |
| 198 | |
| 199 | echo -e "\e[1;35m [usage] \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 200 | 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] | 201 | echo "" |
| 202 | echo -e "\e[1;35m [option] \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 203 | echo " -c : cmd string, eg: ./check.sh " |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 204 | echo " -p : detect path, only output errors in this path." |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 205 | echo " -t : top level mode, could detect more errors." |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 206 | echo " -h : show help" |
| 207 | echo "" |
| 208 | echo -e "\e[1;35m [example] \e[0m" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 209 | echo " 1) In path [bl2/core]:" |
| 210 | echo " /path/to/bootloader/fip/`basename $0` -c bl2_core" |
| 211 | echo " 2) In path [bl2/src] [bl2/ree] [bl2/tee] [bl31_1.3/src] [bl32_3.8/src]:" |
| 212 | echo " /path/to/bootloader/fip/`basename $0` -c ./check.sh" |
| 213 | echo " 3) In path [bl33/v2015] [bl33/v2019]:" |
| 214 | echo " /path/to/bootloader/fip/`basename $0` -c ./check_compile.sh" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 215 | echo "" |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 216 | return |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 217 | } |
| 218 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 219 | ############# |
| 220 | # main |
| 221 | ############# |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 222 | function main() { |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 223 | if [[ "$0" =~ "coverity" ]]; then |
| 224 | echo "cmd string: $0 $@" |
| 225 | if [ $# -lt 1 ]; then |
| 226 | show_help |
| 227 | fi |
| 228 | else |
| 229 | return |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 230 | fi |
| 231 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 232 | while getopts c:C:p:P:t:T:hH opt; do |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 233 | case ${opt} in |
| 234 | c|C) |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 235 | CMD_STRING=${OPTARG} |
| 236 | IS_CMD_STRING=1 |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 237 | ;; |
| 238 | p|P) |
| 239 | PATTERN_PATH=${OPTARG} |
| 240 | ;; |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 241 | t|T) |
| 242 | HIGH_LEVEL="1" |
| 243 | ;; |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 244 | h|H) |
| 245 | show_help |
| 246 | ;; |
| 247 | *) |
| 248 | show_help |
| 249 | ;; |
| 250 | esac |
| 251 | done |
| 252 | |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 253 | if [ $IS_CMD_STRING -eq 1 ]; then |
| 254 | # check coverity path |
| 255 | check_cov_path |
| 256 | |
| 257 | # run_coverity |
| 258 | if [ ${CMD_STRING} = "bl2_core" ]; then |
| 259 | run_cov_for_bl2_core |
| 260 | else |
| 261 | run_coverity ${CMD_STRING} |
| 262 | fi |
| 263 | |
| 264 | # analysis coverity |
| 265 | analysis_coverity |
| 266 | |
| 267 | # show coverity result path |
| 268 | show_coverity_result |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 269 | fi |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 270 | } |
| 271 | |
| 272 | # |
| 273 | # start here. |
| 274 | # |
dongqing.li | 92587aa | 2022-09-05 21:16:36 +0800 | [diff] [blame^] | 275 | MKPATH=`pwd -P` |
| 276 | main $@ |