From f62b5858ac29d093bc70bbb0f53c26063123c1d9 Mon Sep 17 00:00:00 2001 From: Alexander Haase Date: Thu, 28 Jan 2016 17:41:24 +0100 Subject: [PATCH] Compile flags will now be set per-source file. Thus C can be mixed with Fortran and the objects can be build with different compilers, not both may support AddressSanitizer. --- cmake/FindASan.cmake | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cmake/FindASan.cmake b/cmake/FindASan.cmake index 248a77a..2654f2d 100644 --- a/cmake/FindASan.cmake +++ b/cmake/FindASan.cmake @@ -115,13 +115,29 @@ if (ASan_FOUND) endif () + function (sanitize_address TARGET) - if (NOT SANITIZE_ADDRESS) + if (NOT SANITIZE_ADDRESS OR NOT ASan_FOUND) return() endif () - set_property(TARGET ${TARGET} APPEND_STRING PROPERTY - COMPILE_FLAGS " ${ASAN_C_FLAGS}") + get_property(ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) + get_target_property(SOURCE_FILES ${TARGET} SOURCES) + foreach (SOURCE_FILE ${SOURCE_FILES}) + foreach (LANG ${ENABLED_LANGUAGES}) + get_filename_component(FILE_EXT "${SOURCE_FILE}" EXT) + string(TOLOWER "${FILE_EXT}" FILE_EXT) + string(SUBSTRING "${FILE_EXT}" 1 -1 FILE_EXT) + list(FIND CMAKE_${LANG}_SOURCE_FILE_EXTENSIONS "${FILE_EXT}" TEMP) + if (NOT ${TEMP} EQUAL -1) + if (DEFINED ASAN_${LANG}_FLAGS}) + set_property(SOURCE ${SOURCE_FILE} APPEND_STRING PROPERTY + COMPILE_FLAGS " ${ASAN_${LANG}_FLAGS}") + endif () + endif () + endforeach() + endforeach (SOURCE_FILE) + set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " ${ASAN_C_FLAGS}") endfunction ()