diff options
| author | Kevin Funk <kfunk@kde.org> | 2017-04-18 09:06:18 +0200 | 
|---|---|---|
| committer | Kevin Funk <kfunk@kde.org> | 2017-04-21 18:09:00 +0200 | 
| commit | c56cf46b4beb94558baffaa3f29e7c458f6b3f05 (patch) | |
| tree | cb7d24cf4c8a4f7bc5877a0a0bf0227240d24e86 | |
| parent | 77623d19b627cfa53a319145cafc11c79b54f00c (diff) | |
| download | extra-cmake-modules-c56cf46b4beb94558baffaa3f29e7c458f6b3f05.tar.gz extra-cmake-modules-c56cf46b4beb94558baffaa3f29e7c458f6b3f05.tar.bz2 | |
Sanitizers: Don't use GCC-like flags for e.g. MSVC
Summary:
Fixes compiler warnings such as:
```
cl : Command line warning D9002 : ignoring unknown option
'-fsanitize=address'
cl : Command line warning D9002 : ignoring unknown option
'-fno-omit-frame-pointer'
```
Reviewers: aacid, bcooksley
Reviewed By: aacid, bcooksley
Subscribers: #frameworks, #build_system
Tags: #frameworks, #build_system
Differential Revision: https://phabricator.kde.org/D5489
| -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() | 
