diff options
author | Glen Chung <kuchung@microsoft.com> | 2022-05-24 19:14:59 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-05-26 13:06:01 (GMT) |
commit | 5fcadc481e4b60e5dbbacb026b73631b69ca3746 (patch) | |
tree | 3c121306587bd873133dfb76e190f61be937f697 /Modules | |
parent | bb500723555940a29355a71898b44be196dec2a6 (diff) | |
download | CMake-5fcadc481e4b60e5dbbacb026b73631b69ca3746.zip CMake-5fcadc481e4b60e5dbbacb026b73631b69ca3746.tar.gz CMake-5fcadc481e4b60e5dbbacb026b73631b69ca3746.tar.bz2 |
MSVC: Default to -ZI instead of /Zi for x86 and x64
Add a policy for compatibility.
For more information, see [1].
[1] https://docs.microsoft.com/en-us/cpp/build/reference/z7-zi-zi-debug-information-format?view=msvc-170
Fixes: #10189
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/Platform/Windows-MSVC-C.cmake | 9 | ||||
-rw-r--r-- | Modules/Platform/Windows-MSVC-CXX.cmake | 9 | ||||
-rw-r--r-- | Modules/Platform/Windows-MSVC.cmake | 9 |
3 files changed, 25 insertions, 2 deletions
diff --git a/Modules/Platform/Windows-MSVC-C.cmake b/Modules/Platform/Windows-MSVC-C.cmake index 67b6827..7dfc033 100644 --- a/Modules/Platform/Windows-MSVC-C.cmake +++ b/Modules/Platform/Windows-MSVC-C.cmake @@ -2,6 +2,15 @@ include(Platform/Windows-MSVC) if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 18.0) set(_FS_C " /FS") endif() + +cmake_policy(GET CMP0138 _cmp0138) +if(_cmp0138 STREQUAL "NEW") + if(NOT _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM" AND NOT _MSVC_C_ARCHITECTURE_FAMILY STREQUAL "ARM64") + set(_ZiOrZI "-ZI") + endif() +endif() +unset(_cmp0138) + __windows_compiler_msvc(C) if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER) diff --git a/Modules/Platform/Windows-MSVC-CXX.cmake b/Modules/Platform/Windows-MSVC-CXX.cmake index 6fea617..ba9a260 100644 --- a/Modules/Platform/Windows-MSVC-CXX.cmake +++ b/Modules/Platform/Windows-MSVC-CXX.cmake @@ -3,6 +3,15 @@ set(_COMPILE_CXX " /TP") if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 18.0) set(_FS_CXX " /FS") endif() + +cmake_policy(GET CMP0138 _cmp0138) +if(_cmp0138 STREQUAL "NEW") + if(NOT _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM" AND NOT _MSVC_CXX_ARCHITECTURE_FAMILY STREQUAL "ARM64") + set(_ZiOrZI "-ZI") + endif() +endif() +unset(_cmp0138) + __windows_compiler_msvc(CXX) if((NOT DEFINED CMAKE_DEPENDS_USE_COMPILER OR CMAKE_DEPENDS_USE_COMPILER) diff --git a/Modules/Platform/Windows-MSVC.cmake b/Modules/Platform/Windows-MSVC.cmake index e74ec9e..acfd0d8 100644 --- a/Modules/Platform/Windows-MSVC.cmake +++ b/Modules/Platform/Windows-MSVC.cmake @@ -441,6 +441,10 @@ macro(__windows_compiler_msvc lang) endif() unset(_cmp0092) + if(NOT DEFINED _ZiOrZI) + set(_ZiOrZI "/Zi") + endif() + if(CMAKE_VS_PLATFORM_TOOLSET MATCHES "v[0-9]+_clang_.*") # note: MSVC 14 2015 Update 1 sets -fno-ms-compatibility by default, but this does not allow one to compile many projects # that include MS's own headers. CMake itself is affected project too. @@ -451,15 +455,16 @@ macro(__windows_compiler_msvc lang) string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "${_MD} -DNDEBUG") # TODO: Add '-Os' once VS generator maps it properly for Clang else() string(APPEND CMAKE_${lang}_FLAGS_INIT " ${_PLATFORM_DEFINES}${_PLATFORM_DEFINES_${lang}} /D_WINDOWS${_W3}${_FLAGS_${lang}}") - string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} /Zi /Ob0 /Od ${_RTC1}") + string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} ${_ZiOrZI} /Ob0 /Od ${_RTC1}") string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT "${_MD} /O2 /Ob2 /DNDEBUG") - string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} /Zi /O2 /Ob1 /DNDEBUG") + string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} ${_ZiOrZI} /O2 /Ob1 /DNDEBUG") string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "${_MD} /O1 /Ob1 /DNDEBUG") endif() unset(_Wall) unset(_W3) unset(_MDd) unset(_MD) + unset(_ZiOrZI) set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded -MT) set(CMAKE_${lang}_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL -MD) |