From: Remi Gacogne Date: Tue, 20 May 2025 07:28:40 +0000 (+0200) Subject: meson: Add support for generating code coverage data in clang format X-Git-Tag: dnsdist-2.0.0-beta1~41^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ea8137f60f580408a6c0b38530cdd6e69870b01;p=thirdparty%2Fpdns.git meson: Add support for generating code coverage data in clang format --- diff --git a/meson/code-coverage/meson.build b/meson/code-coverage/meson.build index 221b307277..367a4d9d62 100644 --- a/meson/code-coverage/meson.build +++ b/meson/code-coverage/meson.build @@ -1,6 +1,7 @@ coverage = get_option('b_coverage') +clang_coverage = get_option('clang-coverage-format') -if coverage +if coverage or clang_coverage add_project_arguments('-DCOVERAGE', language: ['c', 'cpp']) if get_option('buildtype') != 'debug' @@ -10,6 +11,21 @@ if coverage if cxx.has_argument('-U_FORTIFY_SOURCE') add_project_arguments('-U_FORTIFY_SOURCE', language: ['c', 'cpp']) endif + endif -summary('Code Coverage', coverage, bool_yn: true, section: 'Configuration') +if coverage + if get_option('clang-coverage-format') + error('b_coverage and clang-coverage-format cannot be enabled at the same time') + endif + summary('Code Coverage', coverage, bool_yn: true, section: 'Configuration') +else + if get_option('clang-coverage-format') + # let's see if the clang++ specific format is supported, + # as it has a much lower overhead and is more accurate, + # see https://clang.llvm.org/docs/SourceBasedCodeCoverage.html + add_project_arguments('-DCLANG_COVERAGE', '-fprofile-instr-generate', '-fcoverage-mapping', language: ['c', 'cpp']) + add_project_link_arguments('-fprofile-instr-generate', '-fcoverage-mapping', language: ['c', 'cpp']) + summary('Code Coverage (clang format)', true, bool_yn: true, section: 'Configuration') + endif +endif diff --git a/meson_options.txt b/meson_options.txt index afcf7a7a66..e9b61ae147 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -42,3 +42,4 @@ option('systemd-service-user', type: 'string', value: 'pdns', description: 'Syst option('systemd-service-group', type: 'string', value: 'pdns', description: 'Systemd service group (setgid and unit file; group is not created)') option('auto-var-init', type: 'combo', value: 'disabled', choices: ['zero', 'pattern', 'disabled'], description: 'Enable initialization of automatic variables') option('malloc-trace', type: 'boolean', value: false, description: 'Enable malloc-trace') +option('clang-coverage-format', type: 'boolean', value: false, description: 'Whether to generate coverage data in clang format') diff --git a/pdns/dnsdistdist/meson_options.txt b/pdns/dnsdistdist/meson_options.txt index 5635782b2c..3c95c5d8af 100644 --- a/pdns/dnsdistdist/meson_options.txt +++ b/pdns/dnsdistdist/meson_options.txt @@ -39,3 +39,4 @@ option('ebpf', type: 'feature', value: 'auto', description: 'Enable eBPF support option('fuzzer_ldflags', type: 'string', value: '', description: 'Linker flags used for the fuzzing targets (a path to the libFuzzer static library, for example)') option('yaml', type: 'feature', value: 'disabled', description: 'Enable YAML configuration') option('man-pages', type: 'boolean', value: true, description: 'Generate man pages') +option('clang-coverage-format', type: 'boolean', value: false, description: 'Whether to generate coverage data in clang format') diff --git a/pdns/recursordist/meson_options.txt b/pdns/recursordist/meson_options.txt index 2a88e555f5..e1f6d7545e 100644 --- a/pdns/recursordist/meson_options.txt +++ b/pdns/recursordist/meson_options.txt @@ -23,3 +23,4 @@ option('dnstap', type: 'feature', value: 'auto', description: 'Enable DNSTAP sup option('libcurl', type: 'feature', value: 'auto', description: 'Enable Curl support') option('nod', type: 'feature', value: 'enabled', description: 'Enable Newly Observed Domains') option('libcap', type: 'feature', value: 'auto', description: 'Enable libcap for capabilities handling') +option('clang-coverage-format', type: 'boolean', value: false, description: 'Whether to generate coverage data in clang format') diff --git a/tasks.py b/tasks.py index 5346c07c24..6347e91050 100644 --- a/tasks.py +++ b/tasks.py @@ -222,7 +222,7 @@ def is_coverage_enabled(): def get_coverage(meson=False): if meson: - return '-D b_coverage=true' if is_coverage_enabled() else '' + return '-Dclang-coverage-format=true' if is_coverage_enabled() else '' return '--enable-coverage=clang' if is_coverage_enabled() else '' @task