[igt-dev] [PATCH v3 07/10] scripts/code_cov_gen_report.sh: add a script to generate code coverage reports
Mauro Carvalho Chehab
mauro.chehab at linux.intel.com
Wed Mar 16 15:00:00 UTC 2022
From: Mauro Carvalho Chehab <mchehab at kernel.org>
The proper sequence to process the results at the build machine is not
trivial. Add a script automating such steps.
Reviewed-by: Tomi Sarvela <tomi.p.sarvela at intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab at kernel.org>
---
scripts/code_cov_gen_report.sh | 170 +++++++++++++++++++++++++++++++++
1 file changed, 170 insertions(+)
create mode 100755 scripts/code_cov_gen_report.sh
diff --git a/scripts/code_cov_gen_report.sh b/scripts/code_cov_gen_report.sh
new file mode 100755
index 000000000000..05efebe19ee4
--- /dev/null
+++ b/scripts/code_cov_gen_report.sh
@@ -0,0 +1,170 @@
+#!/bin/bash
+
+MERGED_INFO="merged"
+GATHER_ON_BUILD="code_cov_gather_on_build.sh"
+PARSE_INFO="code_cov_parse_info.pl"
+
+trap 'catch $LINENO' ERR
+catch() {
+ echo "$0: error on line $1. HTML report not generated."
+ exit $1
+}
+
+usage() {
+ printf >&2 "\
+Usage:
+ $(basename $0)
+ --read <file or dir> --kernel-source <dir> --kernel-object <dir>
+ --output-dir <dir> [--info or --tar] [--force-override]
+
+--kernel-object is only needed when Kernel was built with make O=dir
+"
+ exit $1
+}
+
+MODE=
+RESULTS=
+KSRC=
+KOBJ=
+DEST_DIR=
+FORCE=
+
+while [ "$1" != "" ]; do
+ case $1 in
+ --info|-i)
+ MODE=info
+ ;;
+ --tar|--tarball|-t)
+ MODE=tar.gz
+ ;;
+ --kernel-source|-k)
+ if [ "$2" == "" ]; then
+ usage 1
+ else
+ KSRC=$(realpath $2)
+ shift
+ fi
+ ;;
+ --kernel-object|-O)
+ if [ "$2" == "" ]; then
+ usage 1
+ else
+ KOBJ=$(realpath $2)
+ shift
+ fi
+ ;;
+ --output-dir|-o)
+ if [ "$2" == "" ]; then
+ usage 1
+ else
+ DEST_DIR=$(realpath $2)
+ shift
+ fi
+ ;;
+ --read|-r)
+ if [ "$2" == "" ]; then
+ usage 1
+ else
+ RESULTS=$(realpath $2)
+ shift
+ fi
+ ;;
+ --force-override|-f)
+ FORCE=1
+ ;;
+ --help)
+ usage 0
+ ;;
+
+ *)
+ echo "Unknown argument '$1'"
+ usage 1
+ ;;
+ esac
+ shift
+done
+
+if [ "x$RESULTS" == "x" -o "x$KSRC" == "x" -o "x$DEST_DIR" == "x" -o "x$MODE" == "x" ]; then
+ echo "Missing a mandatory argument"
+ usage 1
+fi
+
+if [ -z "$KOBJ" ]; then
+ KOBJ=$KSRC
+fi
+
+SCRIPT_DIR=$(dirname $(realpath $0))
+RESULTS=$(realpath $RESULTS)
+KSRC=$(realpath $KSRC)
+KOBJ=$(realpath $KOBJ)
+DEST_DIR=$(realpath $DEST_DIR)
+
+if [ -e "$DEST_DIR" ]; then
+ if [ "x$FORCE" != "x" -a -d "$DEST_DIR" ]; then
+ rm -rf $DEST_DIR/
+ else
+ echo "Directory exists. Won't override."
+ exit 1
+ fi
+fi
+
+mkdir -p $DEST_DIR
+cd $DEST_DIR
+
+if [ "$MODE" != "info" ]; then
+ echo "Generating source tarball from $KSRC (O=$KOBJ)..."
+ ${SCRIPT_DIR}/${GATHER_ON_BUILD} $KSRC $KOBJ source.tar.gz
+
+ echo "Adding source files..."
+ tar xf source.tar.gz
+
+ if [ -d "$RESULTS" ]; then
+ echo "Creating per-file info files..."
+ echo -n "" >${MERGED_INFO}.info
+ for i in $RESULTS/*.tar.gz; do
+ TITLE=$(basename $i)
+ TITLE=${TITLE/.tar.gz/}
+
+ echo "Adding results from $i..."
+ tar xf $i
+
+ echo "Generating $TITLE.info..."
+ lcov -q -t ${TITLE} --rc lcov_branch_coverage=1 -o $TITLE.info -c -d .
+
+ cat $TITLE.info >>${MERGED_INFO}.info
+
+ # Remove the contents of the results tarball
+ rm -rf sys/
+ done
+
+ TITLE=${MERGED_INFO}
+ else
+ TITLE=$(basename $RESULTS)
+ TITLE=${TITLE/.tar.gz/}
+
+ echo "Adding results from $RESULTS..."
+ tar xf $RESULTS
+
+ echo "Generating $TITLE.info..."
+ lcov -q -t ${TITLE} --rc lcov_branch_coverage=1 -o $TITLE.info -c -d .
+ fi
+else
+ if [ -d "$RESULTS" ]; then
+ echo "Merging info files..."
+ echo -n "" >${MERGED_INFO}.info
+ for i in $RESULTS/*.info; do
+ cat $i >>${MERGED_INFO}.info
+ done
+
+ TITLE=${MERGED_INFO}
+ else
+ echo "Copying $RESULTS to $DEST_DIR..."
+ cp $RESULTS .
+
+ TITLE=$(basename $RESULTS)
+ TITLE=${TITLE/.info/}
+ fi
+fi
+
+echo "Generating HTML files..."
+genhtml -q ${TITLE}.info
--
2.35.1
More information about the igt-dev
mailing list