Browse Source

Merge pull request #1647 from enetheru/fix#1459

CMake: Align MSVC runtime (MD[d], MT) options to engine
David Snopek 8 months ago
parent
commit
3a8d7a25ae
2 changed files with 13 additions and 13 deletions
  1. 5 10
      cmake/windows.cmake
  2. 8 3
      tools/windows.py

+ 5 - 10
cmake/windows.cmake

@@ -11,10 +11,8 @@ function( windows_options )
 
 
     option( GODOT_USE_STATIC_CPP "Link MinGW/MSVC C++ runtime libraries statically" ON )
     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()
 endfunction()
 
 
 function( windows_generate TARGET_NAME )
 function( windows_generate TARGET_NAME )
@@ -23,10 +21,13 @@ function( windows_generate TARGET_NAME )
     set( NOT_MSVC "$<NOT:${IS_MSVC}>" )
     set( NOT_MSVC "$<NOT:${IS_MSVC}>" )
     set( STATIC_CPP "$<BOOL:${GODOT_USE_STATIC_CPP}>")
     set( STATIC_CPP "$<BOOL:${GODOT_USE_STATIC_CPP}>")
     set( DISABLE_EXCEPTIONS "$<BOOL:${GODOT_DISABLE_EXCEPTIONS}>")
     set( DISABLE_EXCEPTIONS "$<BOOL:${GODOT_DISABLE_EXCEPTIONS}>")
+    set( DEBUG_CRT "$<BOOL:${GODOT_DEBUG_CRT}>" )
 
 
     set_target_properties( ${TARGET_NAME}
     set_target_properties( ${TARGET_NAME}
             PROPERTIES
             PROPERTIES
             PDB_OUTPUT_DIRECTORY "$<1:${CMAKE_SOURCE_DIR}/bin>"
             PDB_OUTPUT_DIRECTORY "$<1:${CMAKE_SOURCE_DIR}/bin>"
+            INTERFACE_MSVC_RUNTIME_LIBRARY
+                "$<IF:${DEBUG_CRT},MultiThreadedDebugDLL,$<IF:${STATIC_CPP},MultiThreaded,MultiThreadedDLL>>"
     )
     )
 
 
     target_compile_definitions( ${TARGET_NAME}
     target_compile_definitions( ${TARGET_NAME}
@@ -38,12 +39,6 @@ function( windows_generate TARGET_NAME )
             >
             >
     )
     )
 
 
-    target_compile_options( ${TARGET_NAME}
-        PUBLIC
-            $<${IS_MSVC}:
-                $<IF:${STATIC_CPP},/MT,/MD>$<${IS_DEV}:d> # Link microsoft runtime
-            >
-    )
     target_link_options( ${TARGET_NAME}
     target_link_options( ${TARGET_NAME}
             PUBLIC
             PUBLIC
 
 

+ 8 - 3
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_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("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("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(BoolVariable("use_llvm", "Use the LLVM compiler (MVSC or MinGW depending on the use_mingw flag)", False))
     opts.Add("mingw_prefix", "MinGW prefix", mingw)
     opts.Add("mingw_prefix", "MinGW prefix", mingw)
 
 
@@ -117,10 +118,14 @@ def generate(env):
             env["CC"] = "clang-cl"
             env["CC"] = "clang-cl"
             env["CXX"] = "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:
         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"):
         if env["silence_msvc"] and not env.GetOption("clean"):
             silence_msvc(env)
             silence_msvc(env)