diff options
| -rw-r--r-- | modules/ECMEnableSanitizers.cmake | 43 | 
1 files changed, 25 insertions, 18 deletions
| diff --git a/modules/ECMEnableSanitizers.cmake b/modules/ECMEnableSanitizers.cmake index b2bc519b..06cc0b66 100644 --- a/modules/ECMEnableSanitizers.cmake +++ b/modules/ECMEnableSanitizers.cmake @@ -145,22 +145,29 @@ macro (enable_sanitizer_flags sanitize_option)      endif ()  endmacro () -# for each element of the ECM_ENABLE_SANITIZERS list -foreach ( CUR_SANITIZER ${ECM_ENABLE_SANITIZERS} ) -    # lowercase filter -    string(TOLOWER ${CUR_SANITIZER} CUR_SANITIZER) -    # check option and enable appropriate flags -    enable_sanitizer_flags ( ${CUR_SANITIZER} ) -    # TODO: GCC will not link pthread library if enabled ASan -    if(CMAKE_C_COMPILER_ID MATCHES "Clang") -      set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${XSAN_COMPILE_FLAGS}" ) +if (ECM_ENABLE_SANITIZERS) +    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") +        # for each element of the ECM_ENABLE_SANITIZERS list +        foreach ( CUR_SANITIZER ${ECM_ENABLE_SANITIZERS} ) +            # lowercase filter +            string(TOLOWER ${CUR_SANITIZER} CUR_SANITIZER) +            # check option and enable appropriate flags +            enable_sanitizer_flags ( ${CUR_SANITIZER} ) +            # TODO: GCC will not link pthread library if enabled ASan +            if(CMAKE_C_COMPILER_ID MATCHES "Clang") +              set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${XSAN_COMPILE_FLAGS}" ) +            endif() +            set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${XSAN_COMPILE_FLAGS}" ) +            if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") +              link_libraries(${XSAN_LINKER_FLAGS}) +            endif() +            if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +                string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") +                string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") +            endif () +        endforeach() +    else() +        message(STATUS "Tried to enable sanitizers (-DECM_ENABLE_SANITIZERS=${ECM_ENABLE_SANITIZERS}), \ +but compiler (${CMAKE_CXX_COMPILER_ID}) does not have sanitizer support")      endif() -    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${XSAN_COMPILE_FLAGS}" ) -    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") -      link_libraries(${XSAN_LINKER_FLAGS}) -    endif() -    if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") -        string(REPLACE "-Wl,--no-undefined" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") -        string(REPLACE "-Wl,--no-undefined" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -    endif () -endforeach () +endif() | 
