summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Benn <evanbenn@chromium.org>2022-11-07 14:50:35 +1100
committerAnastasia Klimchuk <aklm@chromium.org>2022-12-11 21:27:27 +0000
commit048aab6d66c45423386d0216fd7bf445fbd1dc7f (patch)
tree874616e6fe90975fdd041d6fd35cdbd1c846fad9
parent80408ceafc2a9a550bb5ef7aabd772dbf5d34487 (diff)
downloadflashrom-048aab6d66c45423386d0216fd7bf445fbd1dc7f.tar.gz
flashrom-048aab6d66c45423386d0216fd7bf445fbd1dc7f.tar.bz2
flashrom-048aab6d66c45423386d0216fd7bf445fbd1dc7f.zip
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 <evanbenn@chromium.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/69268 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
-rw-r--r--Documentation/building.md9
-rw-r--r--meson.build14
-rw-r--r--meson_options.txt1
-rwxr-xr-xscripts/llvm-cov6
-rw-r--r--tests/meson.build6
5 files changed, 27 insertions, 9 deletions
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