summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGlen Chung <kuchung@microsoft.com>2022-05-24 19:14:59 (GMT)
committerBrad King <brad.king@kitware.com>2022-05-26 13:06:01 (GMT)
commit5fcadc481e4b60e5dbbacb026b73631b69ca3746 (patch)
tree3c121306587bd873133dfb76e190f61be937f697 /Modules
parentbb500723555940a29355a71898b44be196dec2a6 (diff)
downloadCMake-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.cmake9
-rw-r--r--Modules/Platform/Windows-MSVC-CXX.cmake9
-rw-r--r--Modules/Platform/Windows-MSVC.cmake9
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)