1*62c56f98SSadaf Ebrahimi#!/bin/sh 2*62c56f98SSadaf Ebrahimi 3*62c56f98SSadaf Ebrahimihelp () { 4*62c56f98SSadaf Ebrahimi cat <<EOF 5*62c56f98SSadaf EbrahimiUsage: $0 [-r] 6*62c56f98SSadaf EbrahimiCollect coverage statistics of library code into an HTML report. 7*62c56f98SSadaf Ebrahimi 8*62c56f98SSadaf EbrahimiGeneral instructions: 9*62c56f98SSadaf Ebrahimi1. Build the library with CFLAGS="--coverage -O0 -g3" and link the test 10*62c56f98SSadaf Ebrahimi programs with LDFLAGS="--coverage". 11*62c56f98SSadaf Ebrahimi This can be an out-of-tree build. 12*62c56f98SSadaf Ebrahimi For example (in-tree): 13*62c56f98SSadaf Ebrahimi make CFLAGS="--coverage -O0 -g3" LDFLAGS="--coverage" 14*62c56f98SSadaf Ebrahimi Or (out-of-tree): 15*62c56f98SSadaf Ebrahimi mkdir build-coverage && cd build-coverage && 16*62c56f98SSadaf Ebrahimi cmake -D CMAKE_BUILD_TYPE=Coverage .. && make 17*62c56f98SSadaf Ebrahimi2. Run whatever tests you want. 18*62c56f98SSadaf Ebrahimi3. Run this script from the parent of the directory containing the library 19*62c56f98SSadaf Ebrahimi object files and coverage statistics files. 20*62c56f98SSadaf Ebrahimi4. Browse the coverage report in Coverage/index.html. 21*62c56f98SSadaf Ebrahimi5. After rework, run "$0 -r", then re-test and run "$0" to get a fresh report. 22*62c56f98SSadaf Ebrahimi 23*62c56f98SSadaf EbrahimiOptions 24*62c56f98SSadaf Ebrahimi -r Reset traces. Run this before re-testing to get fresh measurements. 25*62c56f98SSadaf EbrahimiEOF 26*62c56f98SSadaf Ebrahimi} 27*62c56f98SSadaf Ebrahimi 28*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors 29*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 30*62c56f98SSadaf Ebrahimi 31*62c56f98SSadaf Ebrahimiset -eu 32*62c56f98SSadaf Ebrahimi 33*62c56f98SSadaf Ebrahimi# Collect stats and build a HTML report. 34*62c56f98SSadaf Ebrahimilcov_library_report () { 35*62c56f98SSadaf Ebrahimi rm -rf Coverage 36*62c56f98SSadaf Ebrahimi mkdir Coverage Coverage/tmp 37*62c56f98SSadaf Ebrahimi lcov --capture --initial --directory library -o Coverage/tmp/files.info 38*62c56f98SSadaf Ebrahimi lcov --rc lcov_branch_coverage=1 --capture --directory library -o Coverage/tmp/tests.info 39*62c56f98SSadaf Ebrahimi lcov --rc lcov_branch_coverage=1 --add-tracefile Coverage/tmp/files.info --add-tracefile Coverage/tmp/tests.info -o Coverage/tmp/all.info 40*62c56f98SSadaf Ebrahimi lcov --rc lcov_branch_coverage=1 --remove Coverage/tmp/all.info -o Coverage/tmp/final.info '*.h' 41*62c56f98SSadaf Ebrahimi gendesc tests/Descriptions.txt -o Coverage/tmp/descriptions 42*62c56f98SSadaf Ebrahimi genhtml --title "Mbed TLS" --description-file Coverage/tmp/descriptions --keep-descriptions --legend --branch-coverage -o Coverage Coverage/tmp/final.info 43*62c56f98SSadaf Ebrahimi rm -f Coverage/tmp/*.info Coverage/tmp/descriptions 44*62c56f98SSadaf Ebrahimi echo "Coverage report in: Coverage/index.html" 45*62c56f98SSadaf Ebrahimi} 46*62c56f98SSadaf Ebrahimi 47*62c56f98SSadaf Ebrahimi# Reset the traces to 0. 48*62c56f98SSadaf Ebrahimilcov_reset_traces () { 49*62c56f98SSadaf Ebrahimi # Location with plain make 50*62c56f98SSadaf Ebrahimi rm -f library/*.gcda 51*62c56f98SSadaf Ebrahimi # Location with CMake 52*62c56f98SSadaf Ebrahimi rm -f library/CMakeFiles/*.dir/*.gcda 53*62c56f98SSadaf Ebrahimi} 54*62c56f98SSadaf Ebrahimi 55*62c56f98SSadaf Ebrahimiif [ $# -gt 0 ] && [ "$1" = "--help" ]; then 56*62c56f98SSadaf Ebrahimi help 57*62c56f98SSadaf Ebrahimi exit 58*62c56f98SSadaf Ebrahimifi 59*62c56f98SSadaf Ebrahimi 60*62c56f98SSadaf Ebrahimimain=lcov_library_report 61*62c56f98SSadaf Ebrahimiwhile getopts r OPTLET; do 62*62c56f98SSadaf Ebrahimi case $OPTLET in 63*62c56f98SSadaf Ebrahimi r) main=lcov_reset_traces;; 64*62c56f98SSadaf Ebrahimi *) help 2>&1; exit 120;; 65*62c56f98SSadaf Ebrahimi esac 66*62c56f98SSadaf Ebrahimidone 67*62c56f98SSadaf Ebrahimishift $((OPTIND - 1)) 68*62c56f98SSadaf Ebrahimi 69*62c56f98SSadaf Ebrahimi"$main" "$@" 70