From 79bd708b3c29398f82738aae8d933c4cf1077a46 Mon Sep 17 00:00:00 2001 From: JohnMcPMS Date: Wed, 24 Jun 2026 11:30:07 -0700 Subject: [PATCH 1/2] Add hybrid CRT link for windows binaries --- CMakeLists.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index c88fbb8e90..6f2a671129 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,6 +328,15 @@ if (${TARGET_PLATFORM} STREQUAL "x64") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /CETCOMPAT") endif() +# Hybrid CRT: static-link the C++ runtime and STL (/MT|/MTd from CMAKE_MSVC_RUNTIME_LIBRARY), +# but dynamic-link the Universal CRT (ucrt.dll) which is an OS component on Windows 10+. +# This eliminates the VCRUNTIME/MSVCP redistributable dependency while avoiding the size +# cost of statically linking the UCRT. See https://aka.ms/hybridcrt for details. +set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /defaultlib:ucrt.lib") +set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /defaultlib:ucrt.lib") +set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libucrtd.lib /defaultlib:ucrtd.lib") +set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libucrtd.lib /defaultlib:ucrtd.lib") + # Common link libraries link_directories(${WSLDEPS_SOURCE_DIR}/lib/) set(COMMON_LINK_LIBRARIES From b793180498890bf3e84991f9bcb2e92bbd8cfb62 Mon Sep 17 00:00:00 2001 From: JohnMcPMS Date: Wed, 24 Jun 2026 13:32:36 -0700 Subject: [PATCH 2/2] apply to all release variants --- CMakeLists.txt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f2a671129..f0b8830316 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -332,10 +332,12 @@ endif() # but dynamic-link the Universal CRT (ucrt.dll) which is an OS component on Windows 10+. # This eliminates the VCRUNTIME/MSVCP redistributable dependency while avoiding the size # cost of statically linking the UCRT. See https://aka.ms/hybridcrt for details. -set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /defaultlib:ucrt.lib") -set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /defaultlib:ucrt.lib") -set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libucrtd.lib /defaultlib:ucrtd.lib") -set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libucrtd.lib /defaultlib:ucrtd.lib") +foreach(config RELEASE RELWITHDEBINFO MINSIZEREL) + set(CMAKE_SHARED_LINKER_FLAGS_${config} "${CMAKE_SHARED_LINKER_FLAGS_${config}} /NODEFAULTLIB:libucrt.lib /defaultlib:ucrt.lib") + set(CMAKE_EXE_LINKER_FLAGS_${config} "${CMAKE_EXE_LINKER_FLAGS_${config}} /NODEFAULTLIB:libucrt.lib /defaultlib:ucrt.lib") +endforeach() +set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libucrtd.lib /defaultlib:ucrtd.lib") +set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:libucrtd.lib /defaultlib:ucrtd.lib") # Common link libraries link_directories(${WSLDEPS_SOURCE_DIR}/lib/)