#! /usr/bin/env bash # Copyright 2023 Nordic Semiconductor ASA # SPDX-License-Identifier: Apache-2.0 set -eu function display_help(){ echo "\ _generate_coverage_report.sh [-help] Generate an html coverage report for BabbleSim tests You can call it from the Zephyr top level as: tests/bsim/_generate_coverage_report.sh Coverage files will be searched for in the folder pointed by the variable WORK_DIR which by default is ${ZEPHYR_BASE}/bsim_out By default the output will be placed in \${WORK_DIR}/lcov_html/. You can override this by setting the variable OUTPUT_DIR By default it takes all coverage information generated by all run tests but you can limit the search by setting WORK_DIR to some subfolder You can also merge in the twister coverage report by setting the variable TWISTER_COVERAGE_FILE, for example as: TWISTER_COVERAGE_FILE=\${ZEPHYR_BASE}/twister-out/coverage.info after having run twister, for example as twister -p nrf52_bsim -T tests/bluetooth/ --coverage Note: Generating a coverage report for many tests is a lengthy process " } # Parse command line if [ $# -ge 1 ]; then if grep -Eiq "(\?|-\?|-h|help|-help|--help)" <<< $1 ; then display_help exit 0 fi fi WORK_DIR="${WORK_DIR:-${ZEPHYR_BASE}/bsim_out}" OUTPUT_DIR="${OUTPUT_DIR:-${WORK_DIR}}" TWISTER_COVERAGE_FILE="${TWISTER_COVERAGE_FILE:-""}" lcov --capture --directory ${WORK_DIR} --output-file ${OUTPUT_DIR}/coverage.pre.info \ -q --rc lcov_branch_coverage=1 lcov --remove ${OUTPUT_DIR}/coverage.pre.info *generated* \ --output-file ${OUTPUT_DIR}/coverage.info -q --rc lcov_branch_coverage=1 genhtml ${OUTPUT_DIR}/coverage.info ${TWISTER_COVERAGE_FILE} --output-directory \ ${OUTPUT_DIR}/lcov_html -q --ignore-errors source --branch-coverage --highlight --legend echo -e "\033[0;32mGenerated: ${OUTPUT_DIR}/lcov_html/index.html\033[0m"