diff --git a/CMakeLists.txt b/CMakeLists.txt index 0984f75c2..81fdc81c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/cmake/common.cmake b/cmake/common.cmake index 082b833ed..6d9030613 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -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) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 68dad5b2f..0969dcbe0 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -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() diff --git a/cmake/toolchains/linux-toolchain.cmake b/cmake/toolchains/linux-toolchain.cmake index 112ccf06f..f3f2c111d 100644 --- a/cmake/toolchains/linux-toolchain.cmake +++ b/cmake/toolchains/linux-toolchain.cmake @@ -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")