Skip to content

Commit 23e9284

Browse files
committed
Use clang gcov tool wrapper for coverage
1 parent 612ee6c commit 23e9284

2 files changed

Lines changed: 18 additions & 8 deletions

File tree

.github/workflows/quality_gates.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ jobs:
2323
clang \
2424
clang-format \
2525
clang-tidy \
26+
llvm \
2627
cmake \
2728
gcovr \
2829
lcov \

scripts/quality_gates.sh

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ resolve_tool() {
5555
return 1
5656
}
5757

58-
resolve_gcov_command() {
58+
resolve_coverage_gcov_tool() {
5959
local family="$1"
6060
if [[ "${family}" != "clang" ]]; then
6161
echo "gcov"
@@ -70,12 +70,17 @@ resolve_gcov_command() {
7070
llvm_cov="$(command -v llvm-cov 2>/dev/null || true)"
7171
fi
7272

73-
if [[ -n "${llvm_cov}" ]]; then
74-
echo "${llvm_cov} gcov"
73+
if [[ -z "${llvm_cov}" ]]; then
74+
echo "gcov"
7575
return 0
7676
fi
7777

78-
echo "gcov"
78+
local wrapper_path="${BUILD_ROOT}/coverage/.llvm-gcov-wrapper.sh"
79+
mkdir -p "${BUILD_ROOT}/coverage"
80+
printf '#!/usr/bin/env sh\n%s gcov "$@"\n' "${llvm_cov}" > "${wrapper_path}"
81+
chmod +x "${wrapper_path}"
82+
83+
echo "${wrapper_path}"
7984
}
8085

8186
cpu_count() {
@@ -331,8 +336,11 @@ run_coverage_gate() {
331336

332337
start_section "coverage"
333338

334-
local gcov_cmd
335-
gcov_cmd="$(resolve_gcov_command "${COMPILER_FAMILY}")"
339+
local gcov_tool
340+
gcov_tool="$(resolve_coverage_gcov_tool "${COMPILER_FAMILY}")"
341+
if [[ "${COMPILER_FAMILY}" == "clang" && "${gcov_tool}" == "gcov" ]]; then
342+
echo "Using default gcov for coverage; this may fail on mixed compiler profiles."
343+
fi
336344

337345
local coverage_flags="${BASE_CXX_FLAGS} --coverage"
338346
local coverage_dir="${BUILD_ROOT}/coverage"
@@ -357,11 +365,12 @@ run_coverage_gate() {
357365
local coverage_info="${coverage_dir}/coverage.info"
358366
local coverage_extract="${coverage_dir}/coverage-filtered.info"
359367
local lcov_report="${coverage_dir}/coverage-lcov-summary.txt"
360-
local lcov_capture_errors="inconsistent,source,format,unsupported,empty,gcov"
368+
local lcov_capture_errors="inconsistent,source,format,unsupported,empty,gcov,version"
361369
local lcov_extract_errors="inconsistent,format,count,source,unsupported"
362370
local lcov_summary_errors="inconsistent,corrupt,unsupported,count"
363371
if LC_ALL=C lcov --capture --base-directory "${REPO_ROOT}" --directory "${coverage_dir}" \
364372
--output-file "${coverage_info}" \
373+
--gcov-tool "${gcov_tool}" \
365374
--ignore-errors "${lcov_capture_errors}" \
366375
>"${coverage_report_file}" 2>&1 && \
367376
LC_ALL=C lcov --extract "${coverage_info}" "${REPO_ROOT}/*" --output-file "${coverage_extract}" \
@@ -384,7 +393,7 @@ run_coverage_gate() {
384393

385394
if [[ -z "${coverage_percent}" ]] && command -v gcovr >/dev/null 2>&1; then
386395
if gcovr --root "${REPO_ROOT}" "${coverage_dir}" --txt -j 1 \
387-
--gcov-executable "${gcov_cmd}" --gcov-ignore-errors all \
396+
--gcov-executable "${gcov_tool}" --gcov-ignore-errors all \
388397
>"${coverage_report_file}" 2>&1; then
389398
used_tool="gcovr"
390399
coverage_report="$(cat "${coverage_report_file}")"

0 commit comments

Comments
 (0)