1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-25 11:52:40 +01:00

Add sanitizers

Leak sanitizer - tracks leaks.

Address sanitizer - like above and
prohibiteted operations on memory.

Thread sanitizer - tracks data races.

Undefined behaviour - like name says. ;)
This commit is contained in:
Filip Gawin 2018-02-14 00:42:39 +01:00
parent d03a33c284
commit ec92476818
7 changed files with 32 additions and 1 deletions

View File

@ -18,6 +18,8 @@ set(_ARGS_BOOL
RUN_MEMCHECK RUN_MEMCHECK
ENABLE_SANITIZERS
APPEND_RESULTS APPEND_RESULTS
RUN_COVERAGE RUN_COVERAGE
SUBMIT SUBMIT
@ -93,6 +95,7 @@ set(_CONFIGURE_OPTIONS
"-DSEPARATE_TEST_SUITES=${SEPARATE_TEST_SUITES}" "-DSEPARATE_TEST_SUITES=${SEPARATE_TEST_SUITES}"
"-DCHECK_INCLUDES=${CHECK_INCLUDES}" "-DCHECK_INCLUDES=${CHECK_INCLUDES}"
"-DCMAKE_BUILD_TYPE=${_CMAKE_BUILD_TYPE}" "-DCMAKE_BUILD_TYPE=${_CMAKE_BUILD_TYPE}"
"-DENABLE_SANITIZERS=${ENABLE_SANITIZERS}"
) )
message(STATUS "Configuring...") message(STATUS "Configuring...")

View File

@ -4,6 +4,7 @@ set(CONFIGURE_EXTRA_OPTIONS ";")
set(BUILD_VIEWER TRUE) set(BUILD_VIEWER TRUE)
set(COVERAGE_COMMAND gcov) set(COVERAGE_COMMAND gcov)
set(CHECK_INCLUDES FALSE) set(CHECK_INCLUDES FALSE)
set(ENABLE_SANITIZERS "none")
if(MODEL_NAME STREQUAL "EXPERIMENTAL") if(MODEL_NAME STREQUAL "EXPERIMENTAL")
set(CHECK_INCLUDES FALSE) set(CHECK_INCLUDES FALSE)

View File

@ -4,6 +4,7 @@ set(CONFIGURE_EXTRA_OPTIONS ";")
set(BUILD_VIEWER TRUE) set(BUILD_VIEWER TRUE)
set(COVERAGE_COMMAND gcov) set(COVERAGE_COMMAND gcov)
set(CHECK_INCLUDES FALSE) set(CHECK_INCLUDES FALSE)
set(ENABLE_SANITIZERS "address")
if(MODEL_NAME STREQUAL "EXPERIMENTAL") if(MODEL_NAME STREQUAL "EXPERIMENTAL")
set(CHECK_INCLUDES FALSE) set(CHECK_INCLUDES FALSE)

View File

@ -102,3 +102,4 @@ set(CONFIGURE_EXTRA_OPTIONS
set(BUILD_VIEWER FALSE) #FIXME: ENABLE set(BUILD_VIEWER FALSE) #FIXME: ENABLE
set(COVERAGE_COMMAND "echo") #FIXME: ENABLE set(COVERAGE_COMMAND "echo") #FIXME: ENABLE
set(CHECK_INCLUDES FALSE) #FIXME: ENABLE set(CHECK_INCLUDES FALSE) #FIXME: ENABLE
set(ENABLE_SANITIZERS "none")

View File

@ -123,6 +123,28 @@ if(TEST_COVERAGE)
) )
endif() endif()
foreach(SAN ${ENABLE_SANITIZERS})
if(${SAN} STREQUAL "address")
message(STATUS "Address sanitizer enabled.")
target_compile_options(rw_interface INTERFACE "-fsanitize=address")
target_link_libraries(rw_interface INTERFACE "-fsanitize=address")
elseif(${SAN} STREQUAL "leak")
message(STATUS "Leak sanitizer enabled.")
target_compile_options(rw_interface INTERFACE "-fsanitize=leak")
target_link_libraries(rw_interface INTERFACE "-fsanitize=leak")
elseif(${SAN} STREQUAL "thread" )
message(STATUS "Thread sanitizer enabled.")
target_compile_options(rw_interface INTERFACE "-fsanitize=thread")
target_link_libraries(rw_interface INTERFACE "-fsanitize=thread")
elseif(${SAN} STREQUAL "undefined" )
message(STATUS "Undefined behaviour sanitizer enabled.")
target_compile_options(rw_interface INTERFACE "-fsanitize=undefined")
target_link_libraries(rw_interface INTERFACE "-fsanitize=undefined")
elseif(NOT ${SAN} STREQUAL "none" )
message(FATAL_ERROR "Illegal sanitizer")
endif()
endforeach()
include(CMakeParseArguments) include(CMakeParseArguments)
if(CHECK_INCLUDES) if(CHECK_INCLUDES)

View File

@ -25,3 +25,5 @@ option(CHECK_INCLUDES "Analyze #includes in C and C++ source files")
option(TEST_COVERAGE "Enable coverage analysis (implies CMAKE_BUILD_TYPE=Debug)") option(TEST_COVERAGE "Enable coverage analysis (implies CMAKE_BUILD_TYPE=Debug)")
option(SEPARATE_TEST_SUITES "Add each test suite as separate test to CTest") option(SEPARATE_TEST_SUITES "Add each test suite as separate test to CTest")
option(ENABLE_SANITIZERS "Enable selected sanitizer.")

View File

@ -16,6 +16,7 @@ RUN dnf update -y \
glm-devel \ glm-devel \
openal-soft-devel \ openal-soft-devel \
SDL2-devel \ SDL2-devel \
qt5-devel qt5-devel \
libasan
CMD ["/bin/bash"] CMD ["/bin/bash"]