MDEV-17279 Windows : link C runtime dynamically
Improve previous patch so we do not depend on (tiny) compiler-version dependent libraries, i.e vcruntime140.dll, and msvcp140.dll The remaining dependency is Universal CRT, is part of Win10+ OS, and should already be installed by Windows update on most downlevel systems.
This commit is contained in:
parent
93942dfe8f
commit
b60aee58c7
@ -65,7 +65,9 @@ FUNCTION(ENABLE_ASAN)
|
||||
ENDIF()
|
||||
# currently, asan is broken with static CRT.
|
||||
IF(NOT(MSVC_CRT_TYPE STREQUAL "/MD"))
|
||||
MESSAGE(FATAL_ERROR "-DWITH_ASAN cmake parameter also requires -DMSVC_CRT_TYPE=/MD")
|
||||
IF(NOT DYNAMIC_UCRT_LINK)
|
||||
MESSAGE(FATAL_ERROR "-DWITH_ASAN cmake parameter also requires -DMSVC_CRT_TYPE=/MD OR DYNAMIC_UCRT_LINK=ON")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
MESSAGE(FATAL_ERROR "-DWITH_ASAN on Windows requires 64bit build")
|
||||
@ -90,14 +92,10 @@ ENDFUNCTION()
|
||||
|
||||
|
||||
IF(MSVC)
|
||||
IF(WITH_ASAN)
|
||||
ENABLE_ASAN()
|
||||
ENDIF()
|
||||
|
||||
# Disable mingw based pkg-config found in Strawberry perl
|
||||
SET(PKG_CONFIG_EXECUTABLE 0 CACHE INTERNAL "")
|
||||
|
||||
SET(MSVC_CRT_TYPE /MD CACHE STRING
|
||||
SET(MSVC_CRT_TYPE /MT CACHE STRING
|
||||
"Runtime library - specify runtime library for linking (/MT,/MTd,/MD,/MDd)"
|
||||
)
|
||||
SET(VALID_CRT_TYPES /MTd /MDd /MD /MT)
|
||||
@ -105,7 +103,10 @@ IF(MSVC)
|
||||
MESSAGE(FATAL_ERROR "Invalid value ${MSVC_CRT_TYPE} for MSVC_CRT_TYPE, choose one of /MT,/MTd,/MD,/MDd ")
|
||||
ENDIF()
|
||||
|
||||
IF(MSVC_CRT_TYPE MATCHES "/MD")
|
||||
OPTION(DYNAMIC_UCRT_LINK "Link Universal CRT dynamically, if MSVC_CRT_TYPE=/MT" ON)
|
||||
SET(DYNAMIC_UCRT_LINKER_OPTION " /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
|
||||
|
||||
IF((MSVC_CRT_TYPE MATCHES "/MD") OR DYNAMIC_UCRT_LINK)
|
||||
# Dynamic runtime (DLLs), need to install CRT libraries.
|
||||
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT VCCRT)
|
||||
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
|
||||
@ -115,6 +116,10 @@ IF(MSVC)
|
||||
INCLUDE(InstallRequiredSystemLibraries)
|
||||
ENDIF()
|
||||
|
||||
IF(WITH_ASAN)
|
||||
ENABLE_ASAN()
|
||||
ENDIF()
|
||||
|
||||
# Enable debug info also in Release build,
|
||||
# and create PDB to be able to analyze crashes.
|
||||
FOREACH(type EXE SHARED MODULE)
|
||||
@ -170,6 +175,11 @@ IF(MSVC)
|
||||
STRING(REGEX REPLACE "/INCREMENTAL:([^ ]+)" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_DEBUG "${CMAKE_${type}_LINKER_FLAGS_DEBUG}")
|
||||
STRING(REGEX REPLACE "/INCREMENTAL$" "/INCREMENTAL:NO" CMAKE_${type}_LINKER_FLAGS_DEBUG "${CMAKE_${type}_LINKER_FLAGS_DEBUG}")
|
||||
SET(CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${type}_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /release")
|
||||
IF(DYNAMIC_UCRT_LINK AND (MSVC_CRT_TYPE STREQUAL "/MT"))
|
||||
FOREACH(config RELEASE RELWITHDEBINFO DEBUG MINSIZEREL)
|
||||
STRING(APPEND CMAKE_${type}_LINKER_FLAGS_${config} ${DYNAMIC_UCRT_LINKER_OPTION})
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
ENDFOREACH()
|
||||
|
||||
|
||||
@ -288,5 +298,6 @@ MACRO(FORCE_STATIC_CRT)
|
||||
CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
)
|
||||
STRING(REGEX REPLACE "/MD[d]?" "/MT" "${flag}" "${${flag}}" )
|
||||
STRING(REPLACE ${DYNAMIC_UCRT_LINKER_OPTION} "" "${flag}" "${${flag}}")
|
||||
ENDFOREACH()
|
||||
ENDMACRO()
|
||||
|
Loading…
x
Reference in New Issue
Block a user