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:
Maximilian Federle 2020-10-22 23:09:17 +02:00
parent c674bc8fb9
commit 68b1abf77f
4 changed files with 27 additions and 15 deletions

View File

@ -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

View File

@ -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})

View File

@ -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)

View File

@ -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)