diff options
author | Brad King <brad.king@kitware.com> | 2022-06-09 16:11:49 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-06-09 16:24:33 (GMT) |
commit | 7d73e88d3a7490cf1047369da8292a57c0b60bce (patch) | |
tree | c2d19d741e502df1f4bf064b28037287085cd35d | |
parent | 84da420a29155e206cef48fc7b05bf818539feb6 (diff) | |
download | CMake-7d73e88d3a7490cf1047369da8292a57c0b60bce.zip CMake-7d73e88d3a7490cf1047369da8292a57c0b60bce.tar.gz CMake-7d73e88d3a7490cf1047369da8292a57c0b60bce.tar.bz2 |
MSVC: Revert "Default to -ZI instead of /Zi for x86 and x64"
Revert commit 5fcadc481e (MSVC: Default to -ZI instead of /Zi for x86
and x64, 2022-05-24). The `-ZI` flag is incompatible with the `-GL`
flag used for IPO, and so is not an unconditionally better default.
Revert the change pending future design of a first-class setting for
MSVC debug info format that can be automatically reconciled with IPO
settings.
That commit introduced policy CMP0138, but we already have later policy
numbers used too. Leave placeholder text to avoid policy renumbering.
Issue: #23607, #10189
-rw-r--r-- | Help/manual/cmake-policies.7.rst | 2 | ||||
-rw-r--r-- | Help/policy/CMP0138.rst | 32 | ||||
-rw-r--r-- | Help/release/3.24.rst | 3 | ||||
-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 | ||||
-rw-r--r-- | Source/cmPolicies.h | 5 | ||||
-rw-r--r-- | Tests/RunCMake/CMakeLists.txt | 3 | ||||
-rw-r--r-- | Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-NEW.cmake | 2 | ||||
-rw-r--r-- | Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-OLD.cmake | 2 | ||||
-rw-r--r-- | Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-WARN.cmake | 2 | ||||
-rw-r--r-- | Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-common.cmake | 20 | ||||
-rw-r--r-- | Tests/RunCMake/MSVCDebugInformationFormat/CMakeLists.txt | 3 | ||||
-rw-r--r-- | Tests/RunCMake/MSVCDebugInformationFormat/RunCMakeTest.cmake | 5 |
14 files changed, 6 insertions, 100 deletions
diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst index 1447c17..d99afe3 100644 --- a/Help/manual/cmake-policies.7.rst +++ b/Help/manual/cmake-policies.7.rst @@ -59,7 +59,7 @@ Policies Introduced by CMake 3.24 :maxdepth: 1 CMP0139: The if() command supports path comparisons using PATH_EQUAL operator. </policy/CMP0139> - CMP0138: MSVC compilers use -ZI instead of /Zi for x86 and x64 by default. </policy/CMP0138> + CMP0138: Placeholder for reverted policy. </policy/CMP0138> CMP0137: try_compile() passes platform variables in project mode. </policy/CMP0137> CMP0136: Watcom runtime library flags are selected by an abstraction. </policy/CMP0136> CMP0135: ExternalProject ignores timestamps in archives by default for the URL download method. </policy/CMP0135> diff --git a/Help/policy/CMP0138.rst b/Help/policy/CMP0138.rst index 5cf3948..c7f0e2d 100644 --- a/Help/policy/CMP0138.rst +++ b/Help/policy/CMP0138.rst @@ -3,37 +3,7 @@ CMP0138 .. versionadded:: 3.24 -MSVC compilers use ``-ZI`` instead of ``/Zi`` for x86 and x64 by default. - -When using MSVC C/C++ compilers in CMake 3.23 and below, debug information -format flag ``/Zi`` is added to :variable:`CMAKE_<LANG>_FLAGS_DEBUG` and -:variable:`CMAKE_<LANG>_FLAGS_RELWITHDEBINFO` by default. The ``/Zi`` flag -produces a separate PDB file that contains all the symbolic debugging -information for use with the debugger, however, it does not support Edit -and Continue feature in a debugging session. - -CMake 3.24 and above adds ``-ZI`` to :variable:`CMAKE_<LANG>_FLAGS_DEBUG` -and :variable:`CMAKE_<LANG>_FLAGS_RELWITHDEBINFO` instead to enable Edit -and Continue by default. - -This policy provides compatibility with projects that have not been updated -to expect the lack of warning flags. The policy setting takes effect as of -the first :command:`project` or :command:`enable_language` command that -initializes :variable:`CMAKE_<LANG>_FLAGS_DEBUG` and -:variable:`CMAKE_<LANG>_FLAGS_RELWITHDEBINFO` for a given language -``<LANG>`` using MSVC compilers. - -.. note:: - - Once the policy has taken effect at the top of a project for a given - language, that choice must be used throughout the tree for that language. - In projects that have nested projects in subdirectories, be sure to - convert everything together. - -The ``OLD`` behavior for this policy is to place ``/Zi`` in the default -:variable:`CMAKE_<LANG>_FLAGS_DEBUG` and -:variable:`CMAKE_<LANG>_FLAGS_RELWITHDEBINFO` cache entries. The ``NEW`` -behavior for this policy is to place ``-ZI`` in the default cache entries. +Placeholder for reverted policy. This policy was introduced in CMake version 3.24. Use the :command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly. diff --git a/Help/release/3.24.rst b/Help/release/3.24.rst index 05fd848..f347acb 100644 --- a/Help/release/3.24.rst +++ b/Help/release/3.24.rst @@ -319,9 +319,6 @@ Deprecated and Removed Features Other Changes ============= -* With MSVC compilers, debug configurations now use ``-ZI`` by default - instead of ``/Zi``. See policy :policy:`CMP0138`. - * CMake no longer sets environment variables like :envvar:`CC`, :envvar:`CXX`, etc. when enabling the corresponding language during the first CMake run in a build directory. See policy :policy:`CMP0132`. diff --git a/Modules/Platform/Windows-MSVC-C.cmake b/Modules/Platform/Windows-MSVC-C.cmake index 7dfc033..67b6827 100644 --- a/Modules/Platform/Windows-MSVC-C.cmake +++ b/Modules/Platform/Windows-MSVC-C.cmake @@ -2,15 +2,6 @@ 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 ba9a260..6fea617 100644 --- a/Modules/Platform/Windows-MSVC-CXX.cmake +++ b/Modules/Platform/Windows-MSVC-CXX.cmake @@ -3,15 +3,6 @@ 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 acfd0d8..e74ec9e 100644 --- a/Modules/Platform/Windows-MSVC.cmake +++ b/Modules/Platform/Windows-MSVC.cmake @@ -441,10 +441,6 @@ 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. @@ -455,16 +451,15 @@ 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} ${_ZiOrZI} /Ob0 /Od ${_RTC1}") + string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT "${_MDd} /Zi /Ob0 /Od ${_RTC1}") string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT "${_MD} /O2 /Ob2 /DNDEBUG") - string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} ${_ZiOrZI} /O2 /Ob1 /DNDEBUG") + string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "${_MD} /Zi /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) diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index 256d483..72a169a 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -415,9 +415,8 @@ class cmMakefile; SELECT(POLICY, CMP0137, \ "try_compile() passes platform variables in project mode", 3, 24, 0, \ cmPolicies::WARN) \ - SELECT(POLICY, CMP0138, \ - "MSVC compilers use -ZI instead of /Zi for x86 and x64 by default.", \ - 3, 24, 0, cmPolicies::WARN) \ + SELECT(POLICY, CMP0138, "Placeholder for reverted policy.", 3, 24, 0, \ + cmPolicies::WARN) \ SELECT( \ POLICY, CMP0139, \ "The if() command supports path comparisons using PATH_EQUAL operator.", \ diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 4b00212..5325a3a 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -355,9 +355,6 @@ if(MSVC) add_RunCMake_test(MSVCRuntimeLibrary) add_RunCMake_test(MSVCRuntimeTypeInfo) add_RunCMake_test(MSVCWarningFlags) - if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - add_RunCMake_test(MSVCDebugInformationFormat) - endif() endif() if(XCODE_VERSION) set(ObjectLibrary_ARGS -DXCODE_VERSION=${XCODE_VERSION}) diff --git a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-NEW.cmake b/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-NEW.cmake deleted file mode 100644 index 7dda266..0000000 --- a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-NEW.cmake +++ /dev/null @@ -1,2 +0,0 @@ -cmake_policy(SET CMP0138 NEW) -include(CMP0138-common.cmake) diff --git a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-OLD.cmake b/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-OLD.cmake deleted file mode 100644 index 43e4668..0000000 --- a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-OLD.cmake +++ /dev/null @@ -1,2 +0,0 @@ -cmake_policy(SET CMP0138 OLD) -include(CMP0138-common.cmake) diff --git a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-WARN.cmake b/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-WARN.cmake deleted file mode 100644 index 2a0dd0e..0000000 --- a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-WARN.cmake +++ /dev/null @@ -1,2 +0,0 @@ - -include(CMP0138-common.cmake) diff --git a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-common.cmake b/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-common.cmake deleted file mode 100644 index 89a5ca1..0000000 --- a/Tests/RunCMake/MSVCDebugInformationFormat/CMP0138-common.cmake +++ /dev/null @@ -1,20 +0,0 @@ -foreach(lang C CXX) - enable_language(${lang}) - - cmake_policy(GET CMP0138 cmp0138) - if(cmp0138 STREQUAL "NEW") - if(NOT " ${CMAKE_${lang}_FLAGS_DEBUG} " MATCHES " -ZI ") - message(SEND_ERROR "CMAKE_${lang}_FLAGS_DEBUG does not have '-ZI' under NEW behavior") - endif() - if(NOT " ${CMAKE_${lang}_FLAGS_RELWITHDEBINFO} " MATCHES " -ZI ") - message(SEND_ERROR "CMAKE_${lang}_FLAGS_RELWITHDEBINFO does not have '-ZI' under NEW behavior") - endif() - else() - if(NOT " ${CMAKE_${lang}_FLAGS_DEBUG} " MATCHES " /Zi ") - message(SEND_ERROR "CMAKE_${lang}_FLAGS_DEBUG does not have '/Zi' under OLD behavior") - endif() - if(NOT " ${CMAKE_${lang}_FLAGS_RELWITHDEBINFO} " MATCHES " /Zi ") - message(SEND_ERROR "CMAKE_${lang}_FLAGS_RELWITHDEBINFO does not have '/Zi' under OLD behavior") - endif() - endif() -endforeach() diff --git a/Tests/RunCMake/MSVCDebugInformationFormat/CMakeLists.txt b/Tests/RunCMake/MSVCDebugInformationFormat/CMakeLists.txt deleted file mode 100644 index 5ff8d3e..0000000 --- a/Tests/RunCMake/MSVCDebugInformationFormat/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -cmake_minimum_required(VERSION 3.23) -project(${RunCMake_TEST} NONE) -include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/MSVCDebugInformationFormat/RunCMakeTest.cmake b/Tests/RunCMake/MSVCDebugInformationFormat/RunCMakeTest.cmake deleted file mode 100644 index 7210fcd..0000000 --- a/Tests/RunCMake/MSVCDebugInformationFormat/RunCMakeTest.cmake +++ /dev/null @@ -1,5 +0,0 @@ -include(RunCMake) - -run_cmake(CMP0138-WARN) -run_cmake(CMP0138-OLD) -run_cmake(CMP0138-NEW) |