From b7dbd26d8f8b5d8220f1791096213a67443a842d Mon Sep 17 00:00:00 2001 From: Samuel Nicholas Date: Thu, 28 Nov 2024 08:55:00 +1030 Subject: [PATCH] Align MSVC runtime (MD[d], MT) options to engine #1647 Engine has an option to link to MDd debug_crt add flag to SCons options Add flag to CMAKE options --- cmake/windows.cmake | 15 +++++---------- tools/windows.py | 11 ++++++++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cmake/windows.cmake b/cmake/windows.cmake index c46519e8..bf17f74f 100644 --- a/cmake/windows.cmake +++ b/cmake/windows.cmake @@ -11,10 +11,8 @@ function( windows_options ) option( GODOT_USE_STATIC_CPP "Link MinGW/MSVC C++ runtime libraries statically" ON ) - # The below scons variables are controlled via toolchain files instead - # "mingw_prefix" "MinGW prefix" - # "use_llvm" "Use the LLVM compiler (MVSC or MinGW depending on the use_mingw flag)" - # "use_mingw" "Use the MinGW compiler instead of MSVC - only effective on Windows" + option( GODOT_DEBUG_CRT "Compile with MSVC's debug CRT (/MDd)" OFF ) + endfunction() function( windows_generate TARGET_NAME ) @@ -23,10 +21,13 @@ function( windows_generate TARGET_NAME ) set( NOT_MSVC "$" ) set( STATIC_CPP "$") set( DISABLE_EXCEPTIONS "$") + set( DEBUG_CRT "$" ) set_target_properties( ${TARGET_NAME} PROPERTIES PDB_OUTPUT_DIRECTORY "$<1:${CMAKE_SOURCE_DIR}/bin>" + INTERFACE_MSVC_RUNTIME_LIBRARY + "$>" ) target_compile_definitions( ${TARGET_NAME} @@ -38,12 +39,6 @@ function( windows_generate TARGET_NAME ) > ) - target_compile_options( ${TARGET_NAME} - PUBLIC - $<${IS_MSVC}: - $$<${IS_DEV}:d> # Link microsoft runtime - > - ) target_link_options( ${TARGET_NAME} PUBLIC diff --git a/tools/windows.py b/tools/windows.py index 490b9f71..f66bce42 100644 --- a/tools/windows.py +++ b/tools/windows.py @@ -78,6 +78,7 @@ def options(opts): opts.Add(BoolVariable("use_mingw", "Use the MinGW compiler instead of MSVC - only effective on Windows", False)) opts.Add(BoolVariable("use_static_cpp", "Link MinGW/MSVC C++ runtime libraries statically", True)) opts.Add(BoolVariable("silence_msvc", "Silence MSVC's cl/link stdout bloat, redirecting errors to stderr.", True)) + opts.Add(BoolVariable("debug_crt", "Compile with MSVC's debug CRT (/MDd)", False)) opts.Add(BoolVariable("use_llvm", "Use the LLVM compiler (MVSC or MinGW depending on the use_mingw flag)", False)) opts.Add("mingw_prefix", "MinGW prefix", mingw) @@ -117,10 +118,14 @@ def generate(env): env["CC"] = "clang-cl" env["CXX"] = "clang-cl" - if env["use_static_cpp"]: - env.Append(CCFLAGS=["/MT"]) + if env["debug_crt"]: + # Always use dynamic runtime, static debug CRT breaks thread_local. + env.AppendUnique(CCFLAGS=["/MDd"]) else: - env.Append(CCFLAGS=["/MD"]) + if env["use_static_cpp"]: + env.AppendUnique(CCFLAGS=["/MT"]) + else: + env.AppendUnique(CCFLAGS=["/MD"]) if env["silence_msvc"] and not env.GetOption("clean"): silence_msvc(env)