blob: 9e52b9844145c4b16d7d5f3920cadb28f4b6b588 [file] [log] [blame]
Gilles Peskine3d4ea542022-11-30 17:35:44 +01001#!/bin/sh
2
Gilles Peskineeff88032022-11-30 17:51:44 +01003help () {
4 cat <<EOF
Gilles Peskine749a0d72022-11-30 18:08:14 +01005Usage: $0 [-r]
Gilles Peskineeff88032022-11-30 17:51:44 +01006Collect coverage statistics of library code into an HTML report.
7
8General instructions:
Gilles Peskine202b1a02022-12-01 17:41:36 +010091. Build the library with CFLAGS="--coverage -O0 -g3" and link the test
10 programs with LDFLAGS="--coverage".
Gilles Peskineeff88032022-11-30 17:51:44 +010011 This can be an out-of-tree build.
Gilles Peskine202b1a02022-12-01 17:41:36 +010012 For example (in-tree):
13 make CFLAGS="--coverage -O0 -g3" LDFLAGS="--coverage"
14 Or (out-of-tree):
15 mkdir build-coverage && cd build-coverage &&
16 cmake -D CMAKE_BUILD_TYPE=Coverage .. && make
Gilles Peskineeff88032022-11-30 17:51:44 +0100172. Run whatever tests you want.
183. Run this script from the parent of the directory containing the library
19 object files and coverage statistics files.
204. Browse the coverage report in Coverage/index.html.
Gilles Peskine749a0d72022-11-30 18:08:14 +0100215. After rework, run "$0 -r", then re-test and run "$0" to get a fresh report.
22
23Options
24 -r Reset traces. Run this before re-testing to get fresh measurements.
Gilles Peskineeff88032022-11-30 17:51:44 +010025EOF
26}
27
28# Copyright The Mbed TLS Contributors
29# SPDX-License-Identifier: Apache-2.0
30#
31# Licensed under the Apache License, Version 2.0 (the "License"); you may
32# not use this file except in compliance with the License.
33# You may obtain a copy of the License at
34#
35# http://www.apache.org/licenses/LICENSE-2.0
36#
37# Unless required by applicable law or agreed to in writing, software
38# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
39# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
40# See the License for the specific language governing permissions and
41# limitations under the License.
42
43set -eu
44
Thomas Daubney11120f92023-10-19 15:27:59 +010045# Repository detection
46in_mbedtls_repo () {
47 test -d include -a -d library -a -d programs -a -d tests
48 }
49
Gilles Peskine749a0d72022-11-30 18:08:14 +010050# Collect stats and build a HTML report.
51lcov_library_report () {
Gilles Peskineeff88032022-11-30 17:51:44 +010052 rm -rf Coverage
Gilles Peskinee628f292022-11-30 17:56:58 +010053 mkdir Coverage Coverage/tmp
Thomas Daubney11120f92023-10-19 15:27:59 +010054 lcov --capture --initial --directory $library_dir -o Coverage/tmp/files.info
55 lcov --rc lcov_branch_coverage=1 --capture --directory $library_dir -o Coverage/tmp/tests.info
Gilles Peskinee628f292022-11-30 17:56:58 +010056 lcov --rc lcov_branch_coverage=1 --add-tracefile Coverage/tmp/files.info --add-tracefile Coverage/tmp/tests.info -o Coverage/tmp/all.info
57 lcov --rc lcov_branch_coverage=1 --remove Coverage/tmp/all.info -o Coverage/tmp/final.info '*.h'
58 gendesc tests/Descriptions.txt -o Coverage/tmp/descriptions
Thomas Daubney11120f92023-10-19 15:27:59 +010059 genhtml --title "$title" --description-file Coverage/tmp/descriptions --keep-descriptions --legend --branch-coverage -o Coverage Coverage/tmp/final.info
Gilles Peskinee628f292022-11-30 17:56:58 +010060 rm -f Coverage/tmp/*.info Coverage/tmp/descriptions
Gilles Peskineeff88032022-11-30 17:51:44 +010061 echo "Coverage report in: Coverage/index.html"
62}
63
Gilles Peskine749a0d72022-11-30 18:08:14 +010064# Reset the traces to 0.
65lcov_reset_traces () {
66 # Location with plain make
Thomas Daubney11120f92023-10-19 15:27:59 +010067 rm -f $library_dir/*.gcda
Gilles Peskine749a0d72022-11-30 18:08:14 +010068 # Location with CMake
Thomas Daubney11120f92023-10-19 15:27:59 +010069 rm -f $library_dir/CMakeFiles/*.dir/*.gcda
Gilles Peskine749a0d72022-11-30 18:08:14 +010070}
71
Gilles Peskineeff88032022-11-30 17:51:44 +010072if [ $# -gt 0 ] && [ "$1" = "--help" ]; then
73 help
74 exit
75fi
76
Thomas Daubney11120f92023-10-19 15:27:59 +010077if in_mbedtls_repo; then
78 library_dir='library'
79 title='Mbed TLS'
80else
81 library_dir='build/core'
82 title='TF-PSA-Crypto'
83fi
84
Gilles Peskine749a0d72022-11-30 18:08:14 +010085main=lcov_library_report
86while getopts r OPTLET; do
87 case $OPTLET in
88 r) main=lcov_reset_traces;;
89 *) help 2>&1; exit 120;;
90 esac
91done
92shift $((OPTIND - 1))
93
94"$main" "$@"