Fix MSVC static runtime build with CMake >= 3.15 (#38623)

Since Cmake 3.15 there is no /MD flag in CMAKE_<LANG>_FLAGS(_<BUILD_TYPE>) variable like `CMAKE_CXX_FLAGS_DEBUG`. So we can't replace in with /MT.
Use new cmake functionality with `CMAKE_MSVC_RUNTIME_LIBRARY`.
The change is similar to similar to protobuf 2d4414f384/CMakeLists.txt (L213)
But grpc requires minimum cmake version 3.16 so we may simply replace old code with the new one

Closes #38623

COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/38623 from RomantsovS:fix_msvc_static_runtime 169b2f1cee
PiperOrigin-RevId: 733475217
This commit is contained in:
RomantsovS
2025-03-04 14:53:46 -08:00
committed by Copybara-Service
parent f409bf12e7
commit 0021f7e2f6

View File

@@ -16,15 +16,7 @@ option(gRPC_MSVC_STATIC_RUNTIME "Link with static msvc runtime libraries" OFF)
if(gRPC_MSVC_STATIC_RUNTIME)
# switch from dynamic to static linking of msvcrt
foreach(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif()
endforeach()
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>)
else()
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded$<$<CONFIG:Debug>:Debug>DLL)
endif()