1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

gitlab-ci: add clang asan job

This commit is contained in:
Brad King
2021-06-07 14:30:08 -04:00
parent 19d831b03d
commit 20bc209a0c
7 changed files with 114 additions and 0 deletions

View File

@@ -498,6 +498,31 @@ upload:linux-aarch64-package:
variables:
RSYNC_DESTINATION: dev
## Sanitizer builds
build:fedora34-asan:
extends:
- .fedora34_asan
- .cmake_build_linux
- .cmake_build_artifacts
- .linux_builder_tags_qt
- .run_manually
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
test:fedora34-asan:
extends:
- .fedora34_asan
- .cmake_memcheck_linux
- .linux_builder_tags_qt
- .run_automatically
dependencies:
- build:fedora34-asan
needs:
- build:fedora34-asan
variables:
CMAKE_CI_JOB_NIGHTLY: "true"
# macOS builds
build:macos-x86_64-ninja:

View File

@@ -0,0 +1,4 @@
set(CMAKE_C_FLAGS "-fsanitize=address" CACHE STRING "")
set(CMAKE_CXX_FLAGS "-fsanitize=address" CACHE STRING "")
include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora34_common.cmake")

View File

@@ -13,6 +13,13 @@ if (CTEST_CMAKE_GENERATOR MATCHES "Visual Studio")
"^ExternalProjectUpdateSetup$")
endif ()
if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "_asan")
list(APPEND test_exclusions
CTestTest2 # crashes on purpose
BootstrapTest # no need to cover this for asan
)
endif()
string(REPLACE ";" "|" test_exclusions "${test_exclusions}")
if (test_exclusions)
set(test_exclusions "(${test_exclusions})")

View File

@@ -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 ()

View File

@@ -0,0 +1 @@
# Add 'leak:<pattern>' lines here to suppress known leaks.

View File

@@ -0,0 +1,2 @@
export CC=/usr/bin/clang
export CXX=/usr/bin/clang++

View File

@@ -158,6 +158,27 @@
CMAKE_CONFIGURATION: debian10_makefiles_clang
CMAKE_GENERATOR: "Unix Makefiles"
### Sanitizers
.fedora_memcheck:
variables:
CMAKE_BUILD_TYPE: RelWithDebInfo
.fedora_asan_addon:
extends: .fedora_memcheck
variables:
CTEST_MEMORYCHECK_TYPE: AddressSanitizer
CTEST_MEMORYCHECK_SANITIZER_OPTIONS: ""
.fedora34_asan:
extends:
- .fedora34
- .fedora_asan_addon
variables:
CMAKE_CONFIGURATION: fedora34_asan
### Intel Compiler
.intelcompiler:
@@ -306,6 +327,15 @@
interruptible: true
.cmake_memcheck_linux:
stage: test
script:
- *before_script_linux
- "$LAUNCHER ctest --output-on-failure -V -S .gitlab/ci/ctest_memcheck.cmake"
interruptible: true
.cmake_build_linux_release:
stage: build