Unverified Commit 558e4a40 authored by Nikita Titov's avatar Nikita Titov Committed by GitHub
Browse files

[tests][ci] run cpp tests with sanitizers on Linux and macOS (#4330)

* run cpp tests with sanitizers

* re-trigger CI

* continue

* small cleanup

* restore cpp test
parent e6a09e00
...@@ -15,7 +15,15 @@ fi ...@@ -15,7 +15,15 @@ fi
if [[ "$TASK" == "cpp-tests" ]]; then if [[ "$TASK" == "cpp-tests" ]]; then
mkdir $BUILD_DIRECTORY/build && cd $BUILD_DIRECTORY/build mkdir $BUILD_DIRECTORY/build && cd $BUILD_DIRECTORY/build
cmake -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF .. if [[ $METHOD == "with-sanitizers" ]]; then
extra_cmake_opts="-DUSE_SANITIZER=ON"
if [[ -n $SANITIZERS ]]; then
extra_cmake_opts="$extra_cmake_opts -DENABLED_SANITIZERS=$SANITIZERS"
fi
else
extra_cmake_opts=""
fi
cmake -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON $extra_cmake_opts ..
make testlightgbm -j4 || exit -1 make testlightgbm -j4 || exit -1
./../testlightgbm || exit -1 ./../testlightgbm || exit -1
exit 0 exit 0
......
...@@ -18,9 +18,10 @@ if ($env:TASK -eq "r-package") { ...@@ -18,9 +18,10 @@ if ($env:TASK -eq "r-package") {
if ($env:TASK -eq "cpp-tests") { if ($env:TASK -eq "cpp-tests") {
mkdir $env:BUILD_SOURCESDIRECTORY/build; cd $env:BUILD_SOURCESDIRECTORY/build mkdir $env:BUILD_SOURCESDIRECTORY/build; cd $env:BUILD_SOURCESDIRECTORY/build
cmake -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -A x64 .. cmake -DBUILD_CPP_TEST=ON -DUSE_OPENMP=OFF -DUSE_DEBUG=ON -A x64 ..
cmake --build . --target testlightgbm --config Debug ; Check-Output $? cmake --build . --target testlightgbm --config Debug ; Check-Output $?
Start-Process -FilePath "./../Debug/testlightgbm.exe" -NoNewWindow -Wait ; Check-Output $? cd ../Debug
.\testlightgbm.exe ; Check-Output $?
Exit 0 Exit 0
} }
......
...@@ -51,8 +51,6 @@ jobs: ...@@ -51,8 +51,6 @@ jobs:
METHOD: source METHOD: source
swig: swig:
TASK: swig TASK: swig
cpp_tests:
TASK: cpp-tests
steps: steps:
- script: | - script: |
echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY" echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY"
...@@ -119,6 +117,9 @@ jobs: ...@@ -119,6 +117,9 @@ jobs:
TASK: gpu TASK: gpu
METHOD: wheel METHOD: wheel
PYTHON_VERSION: 3.7 PYTHON_VERSION: 3.7
cpp_tests:
TASK: cpp-tests
METHOD: with-sanitizers
steps: steps:
- script: | - script: |
echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY" echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY"
...@@ -226,6 +227,8 @@ jobs: ...@@ -226,6 +227,8 @@ jobs:
TASK: swig TASK: swig
cpp_tests: cpp_tests:
TASK: cpp-tests TASK: cpp-tests
METHOD: with-sanitizers
SANITIZERS: "address;undefined"
steps: steps:
- script: | - script: |
echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY" echo "##vso[task.setvariable variable=BUILD_DIRECTORY]$BUILD_SOURCESDIRECTORY"
......
...@@ -7,7 +7,6 @@ OPTION(USE_TIMETAG "Set to ON to output time costs" OFF) ...@@ -7,7 +7,6 @@ OPTION(USE_TIMETAG "Set to ON to output time costs" OFF)
OPTION(USE_CUDA "Enable CUDA-accelerated training (EXPERIMENTAL)" OFF) OPTION(USE_CUDA "Enable CUDA-accelerated training (EXPERIMENTAL)" OFF)
OPTION(USE_DEBUG "Set to ON for Debug mode" OFF) OPTION(USE_DEBUG "Set to ON for Debug mode" OFF)
OPTION(USE_SANITIZER "Use santizer flags" OFF) OPTION(USE_SANITIZER "Use santizer flags" OFF)
SET(SANITIZER_PATH "" CACHE STRING "Path to sanitizer libs")
SET(ENABLED_SANITIZERS "address" "leak" "undefined" CACHE STRING SET(ENABLED_SANITIZERS "address" "leak" "undefined" CACHE STRING
"Semicolon separated list of sanitizer names. E.g 'address;leak'. Supported sanitizers are "Semicolon separated list of sanitizer names. E.g 'address;leak'. Supported sanitizers are
address, leak, undefined and thread.") address, leak, undefined and thread.")
...@@ -36,9 +35,12 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules") ...@@ -36,9 +35,12 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
#-- Sanitizer #-- Sanitizer
if (USE_SANITIZER) if (USE_SANITIZER)
if(MSVC)
message(FATAL_ERROR "Sanitizers are not supported with MSVC.")
endif(MSVC)
include(cmake/Sanitizer.cmake) include(cmake/Sanitizer.cmake)
enable_sanitizers("${ENABLED_SANITIZERS}") enable_sanitizers("${ENABLED_SANITIZERS}")
endif (USE_SANITIZER) endif(USE_SANITIZER)
if(__INTEGRATE_OPENCL) if(__INTEGRATE_OPENCL)
set(__INTEGRATE_OPENCL ON CACHE BOOL "" FORCE) set(__INTEGRATE_OPENCL ON CACHE BOOL "" FORCE)
......
...@@ -24,16 +24,16 @@ endmacro() ...@@ -24,16 +24,16 @@ endmacro()
macro(enable_sanitizers SANITIZERS) macro(enable_sanitizers SANITIZERS)
# Check sanitizers compatibility. # Check sanitizers compatibility.
foreach ( _san ${SANITIZERS} ) foreach(_san ${SANITIZERS})
string(TOLOWER ${_san} _san) string(TOLOWER ${_san} _san)
if (_san MATCHES "thread") if(_san MATCHES "thread")
if (${_use_other_sanitizers}) if(${_use_other_sanitizers})
message(FATAL_ERROR message(FATAL_ERROR
"thread sanitizer is not compatible with ${_san} sanitizer.") "thread sanitizer is not compatible with ${_san} sanitizer.")
endif() endif()
set(_use_thread_sanitizer 1) set(_use_thread_sanitizer 1)
else () else()
if (${_use_thread_sanitizer}) if(${_use_thread_sanitizer})
message(FATAL_ERROR message(FATAL_ERROR
"${_san} sanitizer is not compatible with thread sanitizer.") "${_san} sanitizer is not compatible with thread sanitizer.")
endif() endif()
...@@ -43,7 +43,7 @@ macro(enable_sanitizers SANITIZERS) ...@@ -43,7 +43,7 @@ macro(enable_sanitizers SANITIZERS)
message(STATUS "Sanitizers: ${SANITIZERS}") message(STATUS "Sanitizers: ${SANITIZERS}")
foreach( _san ${SANITIZERS} ) foreach(_san ${SANITIZERS})
string(TOLOWER ${_san} _san) string(TOLOWER ${_san} _san)
enable_sanitizer(${_san}) enable_sanitizer(${_san})
endforeach() endforeach()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment