diff options
| author | Gleb Popov <6yearold@gmail.com> | 2016-08-25 11:16:01 +0300 | 
|---|---|---|
| committer | Gleb Popov <6yearold@gmail.com> | 2016-09-30 11:02:47 +0300 | 
| commit | 4b8e8dcc8856d8f438860783e7641d02d1c05630 (patch) | |
| tree | c703cb299f1b768eb26d0aa217bb1d225002981b | |
| parent | 0cc2de65d111ee1244f3d3ce53c83b3b55b58dfb (diff) | |
| download | extra-cmake-modules-4b8e8dcc8856d8f438860783e7641d02d1c05630.tar.gz extra-cmake-modules-4b8e8dcc8856d8f438860783e7641d02d1c05630.tar.bz2 | |
Teach KDECompilerSettings about clang-cl, a mode of Clang compiler that simulates MSVC.
REVIEW: 128779
| -rw-r--r-- | kde-modules/KDECompilerSettings.cmake | 40 | ||||
| -rw-r--r-- | kde-modules/KDEFrameworkCompilerSettings.cmake | 2 | 
2 files changed, 25 insertions, 17 deletions
| diff --git a/kde-modules/KDECompilerSettings.cmake b/kde-modules/KDECompilerSettings.cmake index dfa29f7e..290c2dac 100644 --- a/kde-modules/KDECompilerSettings.cmake +++ b/kde-modules/KDECompilerSettings.cmake @@ -84,6 +84,8 @@ macro(_kde_compiler_min_version min_version)      endif()  endmacro() +set(CLANG_AS_MSVC (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" AND "x${CMAKE_C_SIMULATE_ID}" STREQUAL "xMSVC")) +  if (MSVC)      # MSVC_VERSION 1600 = VS 10.0 = Windows SDK 7      # See: cmake --help-variable MSVC_VERSION @@ -189,15 +191,17 @@ endif()  # Pick sensible versions of the C and C++ standards.  # Note that MSVC does not have equivalent flags; the features are either  # supported or they are not. -if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") -    # We use the C89 standard because that is what is common to all our -    # compilers (in particular, MSVC 2010 does not support C99) -    set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -std=iso9899:1990") -endif() -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") -    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32) -    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +if (NOT CLANG_AS_MSVC) +    if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") +        # We use the C89 standard because that is what is common to all our +        # compilers (in particular, MSVC 2010 does not support C99) +        set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -std=iso9899:1990") +    endif() +    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32) +        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +    endif()  endif()  # Do not merge uninitialized global variables. @@ -255,7 +259,7 @@ endif()  # Turn off exceptions by default  if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") -elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CLANG_AS_MSVC)      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")  elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32)      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") @@ -267,7 +271,7 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32)  endif()  macro(_kdecompilersettings_append_exception_flag VAR) -    if (MSVC) +    if (MSVC OR CLANG_AS_MSVC)          set(${VAR} "${${VAR}} -EHsc")      elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")          if (WIN32) @@ -300,13 +304,17 @@ endfunction()  function(KDE_TARGET_ENABLE_EXCEPTIONS target mode)      target_compile_options(${target} ${mode} "$<$<CXX_COMPILER_ID:MSVC>:-EHsc>") +    target_compile_options(${target} ${mode} "$<$<CXX_COMPILER_ID:GNU>:-fexceptions>")      if (WIN32)          target_compile_options(${target} ${mode} "$<$<CXX_COMPILER_ID:Intel>:-EHsc>")      else()          target_compile_options(${target} ${mode} "$<$<CXX_COMPILER_ID:Intel>:-fexceptions>")      endif() -    target_compile_options(${target} ${mode} -        "$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>>:-fexceptions>") +    if(CLANG_AS_MSVC) +        target_compile_options(${target} ${mode} "$<$<CXX_COMPILER_ID:Clang>:-EHsc>") +    else() +        target_compile_options(${target} ${mode} "$<$<CXX_COMPILER_ID:Clang>:-fexceptions>") +    endif()  endfunction()  function(KDE_ENABLE_EXCEPTIONS) @@ -333,7 +341,7 @@ endfunction()  ############################################################  if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR -        (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT APPLE) OR +        (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT APPLE AND NOT "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") OR          (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32))      # Linker warnings should be treated as errors      set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings ${CMAKE_SHARED_LINKER_FLAGS}") @@ -365,7 +373,7 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel" AND NOT WIN32)      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -w1 -Wpointer-arith")  endif() -if (MSVC) +if (MSVC OR CLANG_AS_MSVC)      # FIXME: do we not want to set the warning level up to level 3? (/W3)      # Disable warnings:      # C4250: 'class1' : inherits 'class2::member' via dominance @@ -419,7 +427,7 @@ if (APPLE)  endif()  if (WIN32) -    if (MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel") +    if (MSVC OR CLANG_AS_MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "Intel")          # MSVC has four incompatible C runtime libraries: static (libcmt),          # static debug (libcmtd), shared (msvcrt) and shared debug (msvcrtd):          # see http://support.microsoft.com/kb/154753 diff --git a/kde-modules/KDEFrameworkCompilerSettings.cmake b/kde-modules/KDEFrameworkCompilerSettings.cmake index 038ddc3b..3fb32694 100644 --- a/kde-modules/KDEFrameworkCompilerSettings.cmake +++ b/kde-modules/KDEFrameworkCompilerSettings.cmake @@ -63,7 +63,7 @@ endif()  if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic") -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CLANG_AS_MSVC)     # -Wgnu-zero-variadic-macro-arguments is triggered by every qCDebug() call and therefore results     # in a lot of noise. This warning is only notifying us that clang is emulating the GCC behaviour     # instead of the exact standard wording so we can safely ignore it | 
