CMAKE: sanitizer flag changes
parent
d5a9858de7
commit
d5e1105ec4
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue