mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Add sanitize options
This commit is contained in:
parent
9af996b936
commit
b3e88e480f
@ -124,6 +124,8 @@ if (RELEASE_BUILD)
|
|||||||
set(HS_OPTIMIZE ON)
|
set(HS_OPTIMIZE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
include (${CMAKE_MODULE_PATH}/sanitize.cmake)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(DUMP_SUPPORT "Dump code support; normally on, except in release builds" ON "NOT RELEASE_BUILD" OFF)
|
CMAKE_DEPENDENT_OPTION(DUMP_SUPPORT "Dump code support; normally on, except in release builds" ON "NOT RELEASE_BUILD" OFF)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(DISABLE_ASSERTS "Disable assert(); Asserts are enabled in debug builds, disabled in release builds" OFF "NOT RELEASE_BUILD" ON)
|
CMAKE_DEPENDENT_OPTION(DISABLE_ASSERTS "Disable assert(); Asserts are enabled in debug builds, disabled in release builds" OFF "NOT RELEASE_BUILD" ON)
|
||||||
|
40
cmake/sanitize.cmake
Normal file
40
cmake/sanitize.cmake
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Possible values:
|
||||||
|
# - `address` (ASan)
|
||||||
|
# - `memory` (MSan)
|
||||||
|
# - `undefined` (UBSan)
|
||||||
|
# - "" (no sanitizing)
|
||||||
|
option (SANITIZE "Enable one of the code sanitizers" "")
|
||||||
|
|
||||||
|
set (SAN_FLAGS "${SAN_FLAGS} -g -fno-omit-frame-pointer -DSANITIZER")
|
||||||
|
|
||||||
|
if (SANITIZE)
|
||||||
|
if (SANITIZE STREQUAL "address")
|
||||||
|
set (ASAN_FLAGS "-fsanitize=address -fsanitize-address-use-after-scope")
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} ${ASAN_FLAGS}")
|
||||||
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} ${ASAN_FLAGS}")
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${ASAN_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif (SANITIZE STREQUAL "memory")
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set (FATAL_ERROR "GCC does not have memory sanitizer")
|
||||||
|
endif()
|
||||||
|
# MemorySanitizer flags are set according to the official documentation:
|
||||||
|
# https://clang.llvm.org/docs/MemorySanitizer.html#usage
|
||||||
|
set (MSAN_FLAGS "-fsanitize=memory -fsanitize-memory-use-after-dtor -fsanitize-memory-track-origins -fno-optimize-sibling-calls")
|
||||||
|
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} ${MSAN_FLAGS}")
|
||||||
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} ${MSAN_FLAGS}")
|
||||||
|
elseif (SANITIZE STREQUAL "undefined")
|
||||||
|
set (UBSAN_FLAGS "-fsanitize=undefined")
|
||||||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SAN_FLAGS} ${UBSAN_FLAGS}")
|
||||||
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SAN_FLAGS} ${UBSAN_FLAGS}")
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=undefined")
|
||||||
|
endif()
|
||||||
|
else ()
|
||||||
|
message (FATAL_ERROR "Unknown sanitizer type: ${SANITIZE}")
|
||||||
|
endif ()
|
||||||
|
endif()
|
Loading…
x
Reference in New Issue
Block a user