mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
Merge topic 'ci-valgrind'
e981fc4f4d
gitlab-ci: add a job to test with Valgrind on Linux with Ninjaf1e8762a8b
ci: support valgrind memcheck runsf22d8a3f36
ci: support memcheck-testing external test processes35337bcc06
gitlab-ci: report JUnit results for memcheck runs8459ff022b
ci: factor out memcheck "prep" logic Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !11257
This commit is contained in:
@@ -1023,12 +1023,26 @@ t:fedora42-asan:
|
|||||||
- .fedora42_asan
|
- .fedora42_asan
|
||||||
- .cmake_memcheck_linux
|
- .cmake_memcheck_linux
|
||||||
- .linux_x86_64_tags
|
- .linux_x86_64_tags
|
||||||
|
- .cmake_junit_artifacts
|
||||||
- .run_dependent
|
- .run_dependent
|
||||||
needs:
|
needs:
|
||||||
- b:fedora42-asan
|
- b:fedora42-asan
|
||||||
variables:
|
variables:
|
||||||
CMAKE_CI_JOB_NIGHTLY: "true"
|
CMAKE_CI_JOB_NIGHTLY: "true"
|
||||||
|
|
||||||
|
t:fedora42-ninja-valgrind:
|
||||||
|
extends:
|
||||||
|
- .fedora42_ninja_valgrind
|
||||||
|
- .cmake_test_linux_release
|
||||||
|
# Use a fast CPU so that timeouts are less of a concern.
|
||||||
|
- .linux_x86_64_tags_fast_x11
|
||||||
|
- .cmake_valgrind_artifacts
|
||||||
|
- .run_dependent
|
||||||
|
- .needs_centos7_x86_64
|
||||||
|
variables:
|
||||||
|
CMAKE_CI_JOB_NIGHTLY: "true"
|
||||||
|
timeout: 2 hours
|
||||||
|
|
||||||
# macOS builds
|
# macOS builds
|
||||||
|
|
||||||
b:macos-x86_64-ninja:
|
b:macos-x86_64-ninja:
|
||||||
|
@@ -146,6 +146,19 @@
|
|||||||
junit:
|
junit:
|
||||||
- ${CMAKE_CI_BUILD_DIR}/junit.xml
|
- ${CMAKE_CI_BUILD_DIR}/junit.xml
|
||||||
|
|
||||||
|
.cmake_valgrind_artifacts:
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1d
|
||||||
|
when: always
|
||||||
|
reports:
|
||||||
|
annotations:
|
||||||
|
- ${CMAKE_CI_BUILD_DIR}/annotations.json
|
||||||
|
junit:
|
||||||
|
- ${CMAKE_CI_BUILD_DIR}/junit.xml
|
||||||
|
paths:
|
||||||
|
# Valgrind logs.
|
||||||
|
- ${CMAKE_CI_BUILD_DIR}/Testing/Temporary/MemoryChecker.*.log
|
||||||
|
|
||||||
.cmake_sphinx_artifacts:
|
.cmake_sphinx_artifacts:
|
||||||
artifacts:
|
artifacts:
|
||||||
expire_in: 1d
|
expire_in: 1d
|
||||||
|
2
.gitlab/ci/.gitattributes
vendored
Normal file
2
.gitlab/ci/.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Do not apply a size limit to suppression files.
|
||||||
|
*.valgrind.supp -hooks-max-size
|
6
.gitlab/ci/configure_fedora42_ninja_valgrind.cmake
Normal file
6
.gitlab/ci/configure_fedora42_ninja_valgrind.cmake
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
set(CMake_TEST_Qt5 ON CACHE BOOL "")
|
||||||
|
set(CMake_TEST_Qt6 ON CACHE BOOL "")
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora42_valgrind.cmake")
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora42_ninja.cmake")
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
|
2
.gitlab/ci/configure_fedora42_valgrind.cmake
Normal file
2
.gitlab/ci/configure_fedora42_valgrind.cmake
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Disable bootstrap testing for Valgrind testing.
|
||||||
|
set(CMAKE_SKIP_BOOTSTRAP_TEST OFF CACHE BOOL "")
|
@@ -27,6 +27,20 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "_jom")
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "_valgrind")
|
||||||
|
list(APPEND test_exclusions
|
||||||
|
# Tests that timeout under valgrind.
|
||||||
|
"^RunCMake.NinjaMultiConfig$"
|
||||||
|
"^RunCMake.Autogen_Qt6_1$"
|
||||||
|
"^RunCMake.GoogleTest$"
|
||||||
|
"^RunCMake.CXXModules$"
|
||||||
|
"^RunCMake.CommandLine$"
|
||||||
|
|
||||||
|
# Too spurious under Valgrind.
|
||||||
|
"^RunCMake.testUVProcessChain$"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
string(REPLACE ";" "|" test_exclusions "${test_exclusions}")
|
string(REPLACE ";" "|" test_exclusions "${test_exclusions}")
|
||||||
if (test_exclusions)
|
if (test_exclusions)
|
||||||
set(test_exclusions "(${test_exclusions})")
|
set(test_exclusions "(${test_exclusions})")
|
||||||
|
@@ -20,18 +20,13 @@ if (NOT "$ENV{CMAKE_CI_TEST_TIMEOUT}" STREQUAL "")
|
|||||||
set(CTEST_TEST_TIMEOUT "$ENV{CMAKE_CI_TEST_TIMEOUT}")
|
set(CTEST_TEST_TIMEOUT "$ENV{CMAKE_CI_TEST_TIMEOUT}")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
set(CTEST_MEMORYCHECK_TYPE "$ENV{CTEST_MEMORYCHECK_TYPE}")
|
include("${CMAKE_CURRENT_LIST_DIR}/ctest_memcheck_prep.cmake")
|
||||||
set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS "$ENV{CTEST_MEMORYCHECK_SANITIZER_OPTIONS}")
|
|
||||||
|
|
||||||
set(lsan_suppressions "${CMAKE_CURRENT_LIST_DIR}/ctest_memcheck_$ENV{CMAKE_CONFIGURATION}.lsan.supp")
|
|
||||||
if (EXISTS "${lsan_suppressions}")
|
|
||||||
set(ENV{LSAN_OPTIONS} "suppressions='${lsan_suppressions}'")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
|
||||||
ctest_memcheck(
|
ctest_memcheck(
|
||||||
PARALLEL_LEVEL "${nproc}"
|
PARALLEL_LEVEL "${nproc}"
|
||||||
TEST_LOAD "${nproc}"
|
TEST_LOAD "${nproc}"
|
||||||
|
OUTPUT_JUNIT "${CTEST_BINARY_DIRECTORY}/junit.xml"
|
||||||
RETURN_VALUE test_result
|
RETURN_VALUE test_result
|
||||||
EXCLUDE "${test_exclusions}"
|
EXCLUDE "${test_exclusions}"
|
||||||
DEFECT_COUNT defects)
|
DEFECT_COUNT defects)
|
||||||
|
91
.gitlab/ci/ctest_memcheck_fedora42.valgrind.supp
Normal file
91
.gitlab/ci/ctest_memcheck_fedora42.valgrind.supp
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Add Valgrind suppressions here.
|
||||||
|
{
|
||||||
|
libc_start_main-malloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:malloc
|
||||||
|
...
|
||||||
|
fun:__libc_start_main@@GLIBC_2.34
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dl_init-malloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:malloc
|
||||||
|
...
|
||||||
|
fun:_dl_init
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dl_init-calloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:calloc
|
||||||
|
...
|
||||||
|
fun:_dl_init
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dl_init-realloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:realloc
|
||||||
|
...
|
||||||
|
fun:_dl_init
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dl_open-malloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:malloc
|
||||||
|
...
|
||||||
|
fun:_dl_open
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
dl_open-calloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:calloc
|
||||||
|
...
|
||||||
|
fun:_dl_open
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
qt5-object-new
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:_Znwm
|
||||||
|
...
|
||||||
|
fun:_ZN7QObjectC1ER14QObjectPrivatePS_
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
qt5-logger-malloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:malloc
|
||||||
|
...
|
||||||
|
fun:_ZNK14QMessageLogger5debugEv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
strerror_l-malloc
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:malloc
|
||||||
|
fun:__vasprintf_internal
|
||||||
|
fun:__asprintf_chk
|
||||||
|
fun:strerror_l
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
bash
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
...
|
||||||
|
obj:/usr/bin/bash
|
||||||
|
...
|
||||||
|
}
|
50
.gitlab/ci/ctest_memcheck_prep.cmake
Normal file
50
.gitlab/ci/ctest_memcheck_prep.cmake
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
set(CTEST_MEMORYCHECK_TYPE "$ENV{CTEST_MEMORYCHECK_TYPE}")
|
||||||
|
set(CTEST_MEMORYCHECK_SANITIZER_OPTIONS "$ENV{CTEST_MEMORYCHECK_SANITIZER_OPTIONS}")
|
||||||
|
|
||||||
|
set(lsan_suppressions "${CMAKE_CURRENT_LIST_DIR}/ctest_memcheck_$ENV{CMAKE_CONFIGURATION}.lsan.supp")
|
||||||
|
if (EXISTS "${lsan_suppressions}")
|
||||||
|
set(ENV{LSAN_OPTIONS} "suppressions='${lsan_suppressions}'")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (CTEST_MEMORYCHECK_TYPE STREQUAL "Valgrind")
|
||||||
|
find_program(valgrind_exe NAMES valgrind)
|
||||||
|
set(CTEST_MEMORYCHECK_COMMAND "${valgrind_exe}")
|
||||||
|
|
||||||
|
set(valgrind_suppressions "${CMAKE_CURRENT_LIST_DIR}/ctest_memcheck_$ENV{CMAKE_CONFIGURATION}.valgrind.supp")
|
||||||
|
set(common_valgrind_suppressions "${CMAKE_CURRENT_LIST_DIR}/ctest_memcheck_$ENV{CMAKE_VALGRIND_CONFIGURATION}.valgrind.supp")
|
||||||
|
if (EXISTS "${valgrind_suppressions}")
|
||||||
|
set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE "${valgrind_suppressions}")
|
||||||
|
elseif (EXISTS "${common_valgrind_suppressions}")
|
||||||
|
set(CTEST_MEMORYCHECK_SUPPRESSIONS_FILE "${common_valgrind_suppressions}")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(valgrind_skip
|
||||||
|
/bin/*
|
||||||
|
/sbin/*
|
||||||
|
/usr/bin/*
|
||||||
|
/usr/lib64/qt5/bin/*
|
||||||
|
/usr/lib64/qt6/bin/*
|
||||||
|
/usr/lib64/qt6/libexec/*
|
||||||
|
bootstrap
|
||||||
|
sample_script
|
||||||
|
*/Tests/CTestTest2/kwsysBin/*
|
||||||
|
*/Tests/CTestTestCrash/Crash
|
||||||
|
*QtAutogen
|
||||||
|
# Ignore ISPC files which may contain unimplemented instructions.
|
||||||
|
*/build/Tests/ISPC/TryCompile/ISPCTryCompile
|
||||||
|
# Ignore anything CI downloads.
|
||||||
|
*/.gitlab/*)
|
||||||
|
list(JOIN valgrind_skip "," valgrind_skip)
|
||||||
|
string(CONCAT valgrind_options
|
||||||
|
"--gen-suppressions=all "
|
||||||
|
"--child-silent-after-fork=yes "
|
||||||
|
"--trace-children=yes "
|
||||||
|
"--trace-children-skip=${valgrind_skip} "
|
||||||
|
"--track-origins=yes "
|
||||||
|
"-q "
|
||||||
|
"--leak-check=yes "
|
||||||
|
"--show-reachable=yes "
|
||||||
|
"--num-callers=50 "
|
||||||
|
"-v ")
|
||||||
|
set(CTEST_MEMORYCHECK_COMMAND_OPTIONS "${valgrind_options}")
|
||||||
|
endif ()
|
@@ -33,6 +33,10 @@ elseif("$ENV{CMAKE_CONFIGURATION}" MATCHES "extdeps")
|
|||||||
set(CTEST_CONFIGURE_COMMAND "/opt/extdeps/bin/cmake -C \"${initial_cache}\" -G \"${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\"")
|
set(CTEST_CONFIGURE_COMMAND "/opt/extdeps/bin/cmake -C \"${initial_cache}\" -G \"${CTEST_CMAKE_GENERATOR}\" \"${CTEST_SOURCE_DIRECTORY}\"")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if ("$ENV{CMAKE_CI_RUN_MEMCHECK}" STREQUAL "true")
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/ctest_memcheck_prep.cmake")
|
||||||
|
endif ()
|
||||||
|
|
||||||
# Configure the project.
|
# Configure the project.
|
||||||
ctest_configure(
|
ctest_configure(
|
||||||
OPTIONS "${cmake_args}"
|
OPTIONS "${cmake_args}"
|
||||||
@@ -93,20 +97,37 @@ if (NOT "$ENV{CTEST_LABELS}" STREQUAL "")
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
|
||||||
ctest_test(
|
set(extra_annotations)
|
||||||
|
if ("$ENV{CMAKE_CI_RUN_MEMCHECK}" STREQUAL "true")
|
||||||
|
ctest_memcheck(
|
||||||
PARALLEL_LEVEL "${nproc}"
|
PARALLEL_LEVEL "${nproc}"
|
||||||
TEST_LOAD "${nproc}"
|
TEST_LOAD "${nproc}"
|
||||||
OUTPUT_JUNIT "${CTEST_BINARY_DIRECTORY}/junit.xml"
|
OUTPUT_JUNIT "${CTEST_BINARY_DIRECTORY}/junit.xml"
|
||||||
RETURN_VALUE test_result
|
RETURN_VALUE test_result
|
||||||
${ctest_label_args}
|
${ctest_label_args}
|
||||||
EXCLUDE "${test_exclusions}")
|
EXCLUDE "${test_exclusions}")
|
||||||
ctest_submit(PARTS Test)
|
ctest_submit(PARTS Test)
|
||||||
|
ctest_submit(PARTS Memcheck)
|
||||||
|
list(APPEND extra_annotations
|
||||||
|
"Dynamic Analysis" "https://open.cdash.org/viewDynamicAnalysis.php?buildid=${build_id}"
|
||||||
|
)
|
||||||
|
else ()
|
||||||
|
ctest_test(
|
||||||
|
PARALLEL_LEVEL "${nproc}"
|
||||||
|
TEST_LOAD "${nproc}"
|
||||||
|
OUTPUT_JUNIT "${CTEST_BINARY_DIRECTORY}/junit.xml"
|
||||||
|
RETURN_VALUE test_result
|
||||||
|
${ctest_label_args}
|
||||||
|
EXCLUDE "${test_exclusions}")
|
||||||
|
ctest_submit(PARTS Test)
|
||||||
|
endif ()
|
||||||
|
|
||||||
ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json"
|
ctest_annotation_report("${CTEST_BINARY_DIRECTORY}/annotations.json"
|
||||||
"All Tests" "https://open.cdash.org/viewTest.php?buildid=${build_id}"
|
"All Tests" "https://open.cdash.org/viewTest.php?buildid=${build_id}"
|
||||||
"Test Failures" "https://open.cdash.org/viewTest.php?onlyfailed&buildid=${build_id}"
|
"Test Failures" "https://open.cdash.org/viewTest.php?onlyfailed&buildid=${build_id}"
|
||||||
"Tests Not Run" "https://open.cdash.org/viewTest.php?onlynotrun&buildid=${build_id}"
|
"Tests Not Run" "https://open.cdash.org/viewTest.php?onlynotrun&buildid=${build_id}"
|
||||||
"Test Passes" "https://open.cdash.org/viewTest.php?onlypassed&buildid=${build_id}")
|
"Test Passes" "https://open.cdash.org/viewTest.php?onlypassed&buildid=${build_id}"
|
||||||
|
${extra_annotations})
|
||||||
|
|
||||||
if (test_result)
|
if (test_result)
|
||||||
ctest_submit(PARTS Done)
|
ctest_submit(PARTS Done)
|
||||||
|
1
.gitlab/ci/env_fedora42_ninja_valgrind.sh
Normal file
1
.gitlab/ci/env_fedora42_ninja_valgrind.sh
Normal file
@@ -0,0 +1 @@
|
|||||||
|
source .gitlab/ci/env_fedora42_ninja.sh
|
@@ -337,6 +337,15 @@
|
|||||||
CTEST_MEMORYCHECK_TYPE: AddressSanitizer
|
CTEST_MEMORYCHECK_TYPE: AddressSanitizer
|
||||||
CTEST_MEMORYCHECK_SANITIZER_OPTIONS: ""
|
CTEST_MEMORYCHECK_SANITIZER_OPTIONS: ""
|
||||||
|
|
||||||
|
.fedora_valgrind_addon:
|
||||||
|
extends: .fedora_memcheck
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CTEST_MEMORYCHECK_TYPE: Valgrind
|
||||||
|
CMAKE_CI_RUN_MEMCHECK: "true"
|
||||||
|
CMAKE_CI_TEST_TIMEOUT: "1500"
|
||||||
|
CMAKE_VALGRIND_CONFIGURATION: fedora42
|
||||||
|
|
||||||
.fedora42_asan:
|
.fedora42_asan:
|
||||||
extends:
|
extends:
|
||||||
- .fedora42
|
- .fedora42
|
||||||
@@ -345,6 +354,15 @@
|
|||||||
variables:
|
variables:
|
||||||
CMAKE_CONFIGURATION: fedora42_asan
|
CMAKE_CONFIGURATION: fedora42_asan
|
||||||
|
|
||||||
|
|
||||||
|
.fedora42_ninja_valgrind:
|
||||||
|
extends:
|
||||||
|
- .fedora42
|
||||||
|
- .fedora_valgrind_addon
|
||||||
|
|
||||||
|
variables:
|
||||||
|
CMAKE_CONFIGURATION: fedora42_ninja_valgrind
|
||||||
|
|
||||||
### Intel Compiler
|
### Intel Compiler
|
||||||
|
|
||||||
.intelcompiler:
|
.intelcompiler:
|
||||||
@@ -616,6 +634,13 @@
|
|||||||
- linux-x86_64
|
- linux-x86_64
|
||||||
- x11
|
- x11
|
||||||
|
|
||||||
|
.linux_x86_64_tags_fast_x11:
|
||||||
|
tags:
|
||||||
|
- cmake
|
||||||
|
- docker
|
||||||
|
- linux-x86_64-v4
|
||||||
|
- x11
|
||||||
|
|
||||||
.linux_x86_64_tags_cuda_arch_30:
|
.linux_x86_64_tags_cuda_arch_30:
|
||||||
tags:
|
tags:
|
||||||
- cmake
|
- cmake
|
||||||
|
Reference in New Issue
Block a user