CMAKE: sanitizer flag changes

master
Martin Gerhardy 2019-10-18 22:45:36 +02:00
parent d5a9858de7
commit d5e1105ec4
4 changed files with 3 additions and 107 deletions

View File

@ -46,11 +46,6 @@ include(CPack)
option(UNITTESTS "Builds with tests" ON)
option(VISUALTESTS "Builds with visual tests" ON)
option(SANITIZER_THREADS "Builds with thread sanitizer" OFF)
option(UNITTESTS_SANITIZER_THREADS "Builds tests with thread sanitizer" OFF)
option(UNITTESTS_SANITIZER_UNDEFINED "Builds tests with undefined behaviour sanitizer" OFF)
option(UNITTESTS_SANITIZER_LEAK "Builds tests with leak sanitizer" OFF)
option(UNITTESTS_SANITIZER_ADDRESS "Builds tests with address sanitizer" OFF)
option(DISABLE_UNITY "Disable the fast unity build" OFF)
option(TOOLS "Builds with tools" ON)
option(RCON "Builds with rcon tool - also needs TOOLS to be active" ON)
@ -218,22 +213,6 @@ endif()
add_subdirectory(src)
if (UNITTESTS)
gtest_suite_end(tests)
if (UNITTESTS_SANITIZER_THREADS)
set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_THREAD_FLAG}")
set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_THREAD_FLAG}")
endif()
if (UNITTESTS_SANITIZER_UNDEFINED)
set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_UNDEFINED_FLAG}")
set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_UNDEFINED_FLAG}")
endif()
if (UNITTESTS_SANITIZER_LEAK)
set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_LEAK_FLAG}")
set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_LEAK_FLAG}")
endif()
if (UNITTESTS_SANITIZER_ADDRESS)
set_target_properties(tests PROPERTIES COMPILE_FLAGS "${SANITIZE_ADDRESS_FLAG}")
set_target_properties(tests PROPERTIES LINK_FLAGS "${SANITIZE_ADDRESS_FLAG}")
endif()
endif()
configure_file(src/engine-config.h.in engine-config.h @ONLY)

View File

@ -44,70 +44,9 @@ if (USE_DOXYGEN_CHECK)
endif()
endif()
# thread sanitizer doesn't work in combination with address and leak
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2 -D__STDC_FORMAT_MACROS")
# Set -Werror to catch "argument unused during compilation" warnings
set(CMAKE_REQUIRED_FLAGS "-Werror -fthread-sanitizer") # Also needs to be a link flag for test to pass
check_c_compiler_flag("-fthread-sanitizer" HAVE_FLAG_THREAD_SANITIZER)
set(CMAKE_REQUIRED_FLAGS "-Werror -fsanitize=thread") # Also needs to be a link flag for test to pass
check_c_compiler_flag("-fsanitize=thread" HAVE_FLAG_SANITIZE_THREAD)
set(CMAKE_REQUIRED_FLAGS "-Werror")
check_c_compiler_flag("-fsanitize=undefined" HAVE_FLAG_SANITIZE_UNDEFINED)
check_c_compiler_flag("-fsanitize=address" HAVE_FLAG_SANITIZE_ADDRESS)
check_c_compiler_flag("-fsanitize=leak" HAVE_FLAG_SANITIZE_LEAK)
check_c_compiler_flag("-fexpensive-optimizations" HAVE_EXPENSIVE_OPTIMIZATIONS)
unset(CMAKE_REQUIRED_FLAGS)
#-Wthread-safety - http://clang.llvm.org/docs/ThreadSafetyAnalysis.html
if (HAVE_FLAG_SANITIZE_UNDEFINED)
set(SANITIZE_UNDEFINED_FLAG "-fsanitize=undefined" CACHE STRING "" FORCE)
message("Support undefined sanitizer")
endif()
if (HAVE_FLAG_SANITIZE_LEAK)
set(SANITIZE_LEAK_FLAG "-fsanitize=leak" CACHE STRING "" FORCE)
message("Support leak sanitizer")
endif()
if (HAVE_FLAG_SANITIZE_THREAD)
set(SANITIZE_THREAD_FLAG "-fsanitize=thread" CACHE STRING "" FORCE)
message("Support thread sanitizer")
endif()
if (HAVE_FLAG_THREAD_SANITIZER)
set(SANITIZE_THREAD_FLAG "-fthread-sanitizer" CACHE STRING "" FORCE)
message("Support thread sanitizer")
endif()
if (HAVE_FLAG_SANITIZE_ADDRESS)
set(SANITIZE_ADDRESS_FLAG "-fsanitize=address" CACHE STRING "" FORCE)
message("Support address sanitizer")
endif()
# If we are cross compiling, create a directory for native build.
#set(NATIVE_BUILD_DIR "${CMAKE_BINARY_DIR}/native" CACHE PATH "Path to the native build directory")
#set(NATIVE_BINARY_DIR "${NATIVE_BUILD_DIR}/bin" CACHE PATH "Path to the native binary directory")
#set(NATIVE_BUILD_TARGET "${NATIVE_BUILD_DIR}/CMakeCache.txt")
# TODO: check CROSSCOMPILING_EMULATOR
#if(CMAKE_CROSSCOMPILING AND NOT TARGET native-cmake-build)
# file(MAKE_DIRECTORY ${NATIVE_BUILD_DIR})
# add_custom_command(
# OUTPUT ${NATIVE_BUILD_TARGET}
# COMMAND ${CMAKE_COMMAND}
# -G "${CMAKE_GENERATOR}"
# "${CMAKE_SOURCE_DIR}"
# "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}"
# "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${NATIVE_BINARY_DIR}"
# WORKING_DIRECTORY ${NATIVE_BUILD_DIR}
# VERBATIM USES_TERMINAL
# )
#
# add_custom_target(native-cmake-build DEPENDS ${NATIVE_BUILD_TARGET})
#endif()
endif(NOT MSVC)

View File

@ -80,13 +80,6 @@ function(engine_add_executable)
message(STATUS "Build native ${_EXE_TARGET}")
endif()
if (SANITIZER_THREADS AND NOT ${_EXE_NATIVE})
set_target_properties(${_EXE_TARGET} PROPERTIES
COMPILE_FLAGS "${SANITIZE_THREAD_FLAG}"
LINK_FLAGS "${SANITIZE_THREAD_FLAG}"
)
endif()
if (_EXE_NOINSTALL)
set(INSTALL_DATA False)
else()

View File

@ -7,22 +7,6 @@ include(CheckIncludeFiles)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads)
if (SANITIZER)
set(CMAKE_REQUIRED_FLAGS "-Werror -fsanitize=undefined")
check_c_compiler_flag("-fsanitize=undefined" HAVE_FLAG_SANITIZE_UNDEFINED)
set(CMAKE_REQUIRED_FLAGS "-Werror -fsanitize=address")
check_c_compiler_flag("-fsanitize=address" HAVE_FLAG_SANITIZE_ADDRESS)
unset(CMAKE_REQUIRED_FLAGS)
if (HAVE_FLAG_SANITIZE_UNDEFINED)
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize=undefined")
endif()
if (HAVE_FLAG_SANITIZE_ADDRESS)
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fsanitize=address")
endif()
endif()
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${SANITIZE_FLAGS}")
if (USE_GCOV)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
@ -107,9 +91,10 @@ foreach(_FLAG
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${_FLAG}")
endif()
endforeach()
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -DDEBUG ${SANITIZE_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -DDEBUG")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set(CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")