diff options
-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) |