CMake: use sanitizer flags for internal targets only
Previously sanitizer flags were set unconditionally for all code, including that of external libraries. Set them only for targets in src/, tests/ and exposed/. Unfortunately, the linker equivalent to add_compile_options, add_link_options, is only available for CMake version >= 3.13. So add the sanitizer flags manually to each target's linker options.
This commit is contained in:
parent
c674bc8fb9
commit
68b1abf77f
@ -170,19 +170,15 @@ if(ENABLE_SANITIZERS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
string(REPLACE ";" "," SANITIZE_OPTIONS "${SANITIZE_OPTIONS}")
|
string(REPLACE ";" "," SANITIZE_OPTIONS "${SANITIZE_OPTIONS}")
|
||||||
set(SANITIZE_FLAGS "-O1 -fsanitize=${SANITIZE_OPTIONS}")
|
set(SANITIZE_FLAGS "-O1;-fsanitize=${SANITIZE_OPTIONS};-fno-sanitize-recover=address,undefined")
|
||||||
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fno-sanitize-recover=address,undefined")
|
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fno-omit-frame-pointer -fno-optimize-sibling-calls")
|
list(APPEND SANITIZE_FLAGS -fno-omit-frame-pointer -fno-optimize-sibling-calls)
|
||||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
set(SANITIZE_FLAGS "${SANITIZE_FLAGS} -fuse-ld=gold")
|
list(APPEND SANITIZE_FLAGS -fuse-ld=gold)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Sanitizers are only available when using GCC or Clang")
|
message(FATAL_ERROR "Sanitizers are only available when using GCC or Clang")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS}")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# common dependencies
|
# common dependencies
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
add_compile_options(${SANITIZE_FLAGS})
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${CMAKE_SOURCE_DIR}/include)
|
${CMAKE_SOURCE_DIR}/include)
|
||||||
|
|
||||||
@ -5,4 +7,5 @@ add_executable(CDemo
|
|||||||
CDemo.c)
|
CDemo.c)
|
||||||
|
|
||||||
target_link_libraries(CDemo
|
target_link_libraries(CDemo
|
||||||
slvs)
|
slvs
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
@ -26,6 +26,10 @@ if(APPLE)
|
|||||||
${APPKIT_LIBRARY})
|
${APPKIT_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# sanitizers for all code in src and below
|
||||||
|
|
||||||
|
add_compile_options(${SANITIZE_FLAGS})
|
||||||
|
|
||||||
# libslvs
|
# libslvs
|
||||||
|
|
||||||
set(libslvs_SOURCES
|
set(libslvs_SOURCES
|
||||||
@ -55,7 +59,8 @@ target_include_directories(slvs
|
|||||||
|
|
||||||
target_link_libraries(slvs
|
target_link_libraries(slvs
|
||||||
${util_LIBRARIES}
|
${util_LIBRARIES}
|
||||||
mimalloc-static)
|
mimalloc-static
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
add_dependencies(slvs
|
add_dependencies(slvs
|
||||||
mimalloc-static)
|
mimalloc-static)
|
||||||
@ -225,7 +230,8 @@ target_link_libraries(solvespace-core
|
|||||||
${PNG_LIBRARY}
|
${PNG_LIBRARY}
|
||||||
${FREETYPE_LIBRARY}
|
${FREETYPE_LIBRARY}
|
||||||
flatbuffers
|
flatbuffers
|
||||||
mimalloc-static)
|
mimalloc-static
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
if(Backtrace_FOUND)
|
if(Backtrace_FOUND)
|
||||||
target_link_libraries(solvespace-core
|
target_link_libraries(solvespace-core
|
||||||
@ -332,7 +338,8 @@ if(ENABLE_GUI)
|
|||||||
solvespace-core
|
solvespace-core
|
||||||
${OPENGL_LIBRARIES}
|
${OPENGL_LIBRARIES}
|
||||||
${platform_LIBRARIES}
|
${platform_LIBRARIES}
|
||||||
${COVERAGE_LIBRARY})
|
${COVERAGE_LIBRARY}
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
set_target_properties(solvespace PROPERTIES
|
set_target_properties(solvespace PROPERTIES
|
||||||
@ -361,7 +368,8 @@ target_include_directories(solvespace-headless
|
|||||||
|
|
||||||
target_link_libraries(solvespace-headless
|
target_link_libraries(solvespace-headless
|
||||||
solvespace-core
|
solvespace-core
|
||||||
${CAIRO_LIBRARIES})
|
${CAIRO_LIBRARIES}
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
target_compile_options(solvespace-headless
|
target_compile_options(solvespace-headless
|
||||||
PRIVATE ${COVERAGE_FLAGS})
|
PRIVATE ${COVERAGE_FLAGS})
|
||||||
@ -375,7 +383,8 @@ if(ENABLE_CLI)
|
|||||||
|
|
||||||
target_link_libraries(solvespace-cli
|
target_link_libraries(solvespace-cli
|
||||||
solvespace-core
|
solvespace-core
|
||||||
solvespace-headless)
|
solvespace-headless
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
add_dependencies(solvespace-cli
|
add_dependencies(solvespace-cli
|
||||||
resources)
|
resources)
|
||||||
|
@ -11,6 +11,8 @@ if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
|
|||||||
add_definitions(-DTEST_BUILD_ON_WINDOWS)
|
add_definitions(-DTEST_BUILD_ON_WINDOWS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_compile_options(${SANITIZE_FLAGS})
|
||||||
|
|
||||||
# test suite
|
# test suite
|
||||||
|
|
||||||
set(testsuite_SOURCES
|
set(testsuite_SOURCES
|
||||||
@ -74,7 +76,8 @@ add_executable(solvespace-testsuite
|
|||||||
|
|
||||||
target_link_libraries(solvespace-testsuite
|
target_link_libraries(solvespace-testsuite
|
||||||
solvespace-headless
|
solvespace-headless
|
||||||
${COVERAGE_LIBRARY})
|
${COVERAGE_LIBRARY}
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
add_dependencies(solvespace-testsuite
|
add_dependencies(solvespace-testsuite
|
||||||
resources)
|
resources)
|
||||||
@ -132,7 +135,8 @@ add_executable(solvespace-debugtool
|
|||||||
|
|
||||||
target_link_libraries(solvespace-debugtool
|
target_link_libraries(solvespace-debugtool
|
||||||
solvespace-core
|
solvespace-core
|
||||||
solvespace-headless)
|
solvespace-headless
|
||||||
|
${SANITIZE_FLAGS})
|
||||||
|
|
||||||
add_dependencies(solvespace-debugtool
|
add_dependencies(solvespace-debugtool
|
||||||
resources)
|
resources)
|
||||||
|
Loading…
Reference in New Issue
Block a user