xref: /aosp_15_r20/external/mbedtls/scripts/lcov.sh (revision 62c56f9862f102b96d72393aff6076c951fb8148)
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