diff --git a/tools/targets.py b/tools/targets.py index e9857dd156..6c92b01330 100644 --- a/tools/targets.py +++ b/tools/targets.py @@ -69,6 +69,8 @@ def generate(env): if env["optimize"] == "debug" or env["optimize"] == "none": env.Append(CCFLAGS=["/MDd", "/Od"]) + elif env["use_static_cpp"]: + env.Append(CCFLAGS=["/MT"]) else: env.Append(CCFLAGS=["/MD"]) diff --git a/tools/windows.py b/tools/windows.py index 979b56eb79..a2ae9cfb4b 100644 --- a/tools/windows.py +++ b/tools/windows.py @@ -9,6 +9,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_clang_cl", "Use the clang driver instead of MSVC - only effective on Windows", False)) + opts.Add(BoolVariable("use_static_cpp", "Link MinGW/MSVC C++ runtime libraries statically", True)) def exists(env): @@ -45,6 +46,18 @@ def generate(env): env["SHLIBPREFIX"] = "" # Want dll suffix env["SHLIBSUFFIX"] = ".dll" + + env.Append(CCFLAGS=["-Wwrite-strings"]) + if env["use_static_cpp"]: + env.Append( + LINKFLAGS=[ + "-static", + "-Wl,--no-undefined", + "-static-libgcc", + "-static-libstdc++", + ] + ) + # Long line hack. Use custom spawn, quick AR append (to avoid files with the same names to override each other). my_spawn.configure(env) @@ -60,15 +73,15 @@ def generate(env): # Want dll suffix env["SHLIBSUFFIX"] = ".dll" - # These options are for a release build even using target=debug - env.Append(CCFLAGS=["-O3", "-Wwrite-strings"]) - env.Append( - LINKFLAGS=[ - "--static", - "-Wl,--no-undefined", - "-static-libgcc", - "-static-libstdc++", - ] - ) + env.Append(CCFLAGS=["-Wwrite-strings"]) + if env["use_static_cpp"]: + env.Append( + LINKFLAGS=[ + "-static", + "-Wl,--no-undefined", + "-static-libgcc", + "-static-libstdc++", + ] + ) env.Append(CPPDEFINES=["WINDOWS_ENABLED"])