summaryrefslogtreecommitdiffstats
path: root/.gitlab/ci/ctest_memcheck.cmake
diff options
context:
space:
mode:
Diffstat (limited to '.gitlab/ci/ctest_memcheck.cmake')
-rw-r--r--.gitlab/ci/ctest_memcheck.cmake45
1 files changed, 45 insertions, 0 deletions
diff --git a/.gitlab/ci/ctest_memcheck.cmake b/.gitlab/ci/ctest_memcheck.cmake
new file mode 100644
index 0000000..dac907c
--- /dev/null
+++ b/.gitlab/ci/ctest_memcheck.cmake
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 3.8)
+
+include("${CMAKE_CURRENT_LIST_DIR}/gitlab_ci.cmake")
+
+# Read the files from the build directory.
+ctest_read_custom_files("${CTEST_BINARY_DIRECTORY}")
+
+# Pick up from where the configure left off.
+ctest_start(APPEND)
+
+include(ProcessorCount)
+ProcessorCount(nproc)
+if (NOT "$ENV{CTEST_MAX_PARALLELISM}" STREQUAL "")
+ if (nproc GREATER "$ENV{CTEST_MAX_PARALLELISM}")
+ set(nproc "$ENV{CTEST_MAX_PARALLELISM}")
+ endif ()
+endif ()
+
+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 ()
+
+include("${CMAKE_CURRENT_LIST_DIR}/ctest_exclusions.cmake")
+ctest_memcheck(
+ PARALLEL_LEVEL "${nproc}"
+ TEST_LOAD "${nproc}"
+ RETURN_VALUE test_result
+ EXCLUDE "${test_exclusions}"
+ DEFECT_COUNT defects)
+ctest_submit(PARTS Test)
+ctest_submit(PARTS Memcheck)
+
+if (test_result)
+ message(FATAL_ERROR
+ "Failed to test")
+endif ()
+
+if (defects)
+ message(FATAL_ERROR
+ "Found ${defects} memcheck defects")
+endif ()