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