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 | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 18 | |
| 19 | ############# |
| 20 | # function |
| 21 | ############# |
| 22 | function err_exit() |
| 23 | { |
| 24 | echo "Error: $1" |
| 25 | exit 1 |
| 26 | } |
| 27 | |
| 28 | function check_cov_path() { |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 29 | echo "" |
| 30 | echo "check_cov_path ..." |
| 31 | echo "" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 32 | if [ -d "${COV_IM_DIR}" ]; then |
| 33 | rm -rf ${COV_IM_DIR} |
| 34 | fi |
| 35 | mkdir -p ${COV_IM_DIR} |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 36 | if [ -d "${COV_RESULT_HTML}" ]; then |
| 37 | rm -rf ${COV_RESULT_HTML} |
| 38 | fi |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 39 | } |
| 40 | |
| 41 | function 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.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 45 | echo -e "\e[1;35m[1] run cov-build OK. \e[0m" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 46 | |
| 47 | echo "" |
| 48 | echo -e "\e[1;35m[2] run cov-analyze ... \e[0m" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 49 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 63 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 64 | echo "" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 65 | echo -e "\e[1;35m[3] run cov-format-errors ... \e[0m" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 66 | ${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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 68 | echo "end." |
| 69 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 70 | rm -rf ${COV_IM_DIR} |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 71 | } |
| 72 | |
| 73 | function show_coverity_result() { |
| 74 | echo "" |
| 75 | echo -e "\e[1;35m[html-result] \e[0m" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 76 | 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] | 77 | echo "path: ${MKPATH}/`basename ${COV_RESULT_HTML}`/index.html" |
| 78 | echo " " |
| 79 | } |
| 80 | |
| 81 | ######## |
| 82 | # mk_script.sh call function here ! |
| 83 | ######## |
| 84 | function check_coverity() { |
| 85 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 86 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 99 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 100 | echo -e "\e[1;35m=========== run check_coverity() ===========\e[0m" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 101 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 102 | 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.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 121 | echo "coverity run path : $MKPATH" |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 122 | echo "------------------------------------------------------------------" |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 123 | |
dongqing.li | 5849ac7 | 2021-11-24 10:49:26 +0000 | [diff] [blame^] | 124 | # check_cov_path |
| 125 | check_cov_path |
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 | # run_coverity |
| 128 | run_coverity ${NEW_ARGV} |
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 | # show coverity result info |
| 131 | show_coverity_result |
dongqing.li | 154e45e | 2021-11-22 07:47:38 +0000 | [diff] [blame] | 132 | } |
| 133 | |
| 134 | |
| 135 | function 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 | |
| 161 | function 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 | |
| 179 | function 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 | # |
| 237 | MKPATH=`pwd` |
| 238 | # main $@ |