From 048aab6d66c45423386d0216fd7bf445fbd1dc7f Mon Sep 17 00:00:00 2001 From: Evan Benn Date: Mon, 7 Nov 2022 14:50:35 +1100 Subject: tests: Add llvm-cov option and run target for code coverage Code coverage can be requested with -Dllvm_cov and run with ninja llvm-cov-tests or llvm-cov-cli. BUG=b:187647884 BRANCH=None TEST=meson test; ninja llvm-cov-tests TEST=ran test_build.sh with coverage enabled TEST=jenkins ran test_build.sh with coverage disabled Change-Id: Id6c73bff46e7b88d425956a80def97082b201f56 Signed-off-by: Evan Benn Reviewed-on: https://review.coreboot.org/c/flashrom/+/69268 Tested-by: build bot (Jenkins) Reviewed-by: Anastasia Klimchuk --- Documentation/building.md | 9 +++------ meson.build | 14 ++++++++++++-- meson_options.txt | 1 + scripts/llvm-cov | 6 ++++++ tests/meson.build | 6 +++++- 5 files changed, 27 insertions(+), 9 deletions(-) create mode 100755 scripts/llvm-cov diff --git a/Documentation/building.md b/Documentation/building.md index e25482e5f..e5d9412b4 100644 --- a/Documentation/building.md +++ b/Documentation/building.md @@ -63,12 +63,9 @@ ninja -C buildcov coverage #### llvm https://clang.llvm.org/docs/SourceBasedCodeCoverage.html ``` -env CFLAGS="-fprofile-instr-generate -fcoverage-mapping" CC=clang meson setup buildclangcov -env LLVM_PROFILE_FILE=default.profraw ninja -C buildclangcov test -cd buildclangcov -llvm-profdata merge -sparse default.profraw -o default.profdata -llvm-cov show ./flashrom_unit_tests -instr-profile=default.profdata --format=html --output-dir=. -open index.html +env CC=clang meson setup buildclangcov -Dllvm_cov=enabled +ninja -C buildclangcov test +ninja -C buildclangcov llvm-cov-tests ``` ## System specific information diff --git a/meson.build b/meson.build index 859256fe9..27a284e95 100644 --- a/meson.build +++ b/meson.build @@ -45,6 +45,7 @@ config_default_programmer_name = get_option('default_programmer_name') config_default_programmer_args = get_option('default_programmer_args') cargs = [] +link_args = [] deps = [] srcs = files( '82802ab.c', @@ -539,6 +540,11 @@ endif cargs += '-DCONFIG_DEFAULT_PROGRAMMER_ARGS="' + config_default_programmer_args + '"' +if get_option('llvm_cov').enabled() + cargs += ['-fprofile-instr-generate', '-fcoverage-mapping'] + link_args += ['-fprofile-instr-generate', '-fcoverage-mapping'] +endif + install_headers([ 'include/libflashrom.h', ], @@ -567,7 +573,7 @@ libflashrom = both_libraries( cargs, ], install : true, - link_args : vflag, + link_args : link_args + [vflag], link_depends : mapfile, ) @@ -601,7 +607,7 @@ configure_file( ) if get_option('classic_cli').auto() or get_option('classic_cli').enabled() - executable( + classic_cli = executable( 'flashrom', files( 'cli_classic.c', @@ -612,8 +618,12 @@ if get_option('classic_cli').auto() or get_option('classic_cli').enabled() include_directories : include_dir, install : true, install_dir : get_option('sbindir'), + link_args : link_args, link_with : libflashrom.get_static_lib(), # flashrom needs internal symbols of libflashrom ) + if get_option('llvm_cov').enabled() + run_target('llvm-cov-cli', command : ['scripts/llvm-cov', classic_cli]) + endif endif if get_option('ich_descriptors_tool').auto() or get_option('ich_descriptors_tool').enabled() diff --git a/meson_options.txt b/meson_options.txt index 8c04029c7..1990d0a95 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,3 +16,4 @@ option('programmer', type : 'array', value : ['auto'], choices : [ 'pickit2_spi', 'pony_spi', 'raiden_debug_spi', 'rayer_spi', 'realtek_mst_i2c_spi', 'satamv', 'satasii', 'serprog', 'stlinkv3_spi', 'usbblaster_spi', ], description: 'Active programmers') +option('llvm_cov', type : 'feature', value : 'disabled', description : 'build for llvm code coverage') diff --git a/scripts/llvm-cov b/scripts/llvm-cov new file mode 100755 index 000000000..b512b3dee --- /dev/null +++ b/scripts/llvm-cov @@ -0,0 +1,6 @@ +#!/bin/sh + +cd "${MESON_BUILD_ROOT}" +llvm-profdata merge -sparse default.profraw -o default.profdata +llvm-cov show -instr-profile=default.profdata -format=html -output-dir=. "$@" +echo "file://${MESON_BUILD_ROOT}/index.html" diff --git a/tests/meson.build b/tests/meson.build index 0d605d21a..2de4ee8aa 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -121,7 +121,11 @@ flashrom_tests = executable('flashrom_unit_tests', '-U_FORTIFY_SOURCE', ], export_dynamic : true, - link_args : mocks, + link_args : mocks + link_args, dependencies : [cmocka_dep, flashrom_test_dep], ) test('cmocka test flashrom', flashrom_tests) + +if get_option('llvm_cov').enabled() + run_target('llvm-cov-tests', command : ['../scripts/llvm-cov', flashrom_tests]) +endif -- cgit v1.2.3