summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Snopek <dsnopek@gmail.com>2023-08-09 18:53:16 -0500
committerGitHub <noreply@github.com>2023-08-09 18:53:16 -0500
commitc47bd60c734ea49c60d6122d075721adbfb2d16e (patch)
tree5584fa78267e441601c370a12055c7d3849077c9
parent5834e16a221fde8dc0b6ca4b7a6721cc4b258037 (diff)
parenta745c2ac478157586120e37e2e4ba19a206c4dd3 (diff)
downloadredot-cpp-c47bd60c734ea49c60d6122d075721adbfb2d16e.tar.gz
Merge pull request #1203 from dsnopek/1082-update
Statically link mingw/msvc runtime libraries on Windows
-rw-r--r--tools/targets.py12
-rw-r--r--tools/windows.py38
2 files changed, 34 insertions, 16 deletions
diff --git a/tools/targets.py b/tools/targets.py
index e9857dd..5f8e768 100644
--- a/tools/targets.py
+++ b/tools/targets.py
@@ -60,17 +60,17 @@ def generate(env):
env.Append(CCFLAGS=["/Zi", "/FS"])
env.Append(LINKFLAGS=["/DEBUG:FULL"])
- if env["optimize"] == "speed" or env["optimize"] == "speed_trace":
+ if env["optimize"] == "speed":
env.Append(CCFLAGS=["/O2"])
env.Append(LINKFLAGS=["/OPT:REF"])
+ elif env["optimize"] == "speed_trace":
+ env.Append(CCFLAGS=["/O2"])
+ env.Append(LINKFLAGS=["/OPT:REF", "/OPT:NOICF"])
elif env["optimize"] == "size":
env.Append(CCFLAGS=["/O1"])
env.Append(LINKFLAGS=["/OPT:REF"])
-
- if env["optimize"] == "debug" or env["optimize"] == "none":
- env.Append(CCFLAGS=["/MDd", "/Od"])
- else:
- env.Append(CCFLAGS=["/MD"])
+ elif env["optimize"] == "debug" or env["optimize"] == "none":
+ env.Append(CCFLAGS=["/Od"])
else:
if env["debug_symbols"]:
diff --git a/tools/windows.py b/tools/windows.py
index 979b56e..e156aef 100644
--- a/tools/windows.py
+++ b/tools/windows.py
@@ -9,6 +9,7 @@ from SCons.Variables import *
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):
@@ -37,6 +38,11 @@ def generate(env):
env["CC"] = "clang-cl"
env["CXX"] = "clang-cl"
+ if env["use_static_cpp"]:
+ env.Append(CCFLAGS=["/MT"])
+ else:
+ env.Append(CCFLAGS=["/MD"])
+
elif sys.platform == "win32" or sys.platform == "msys":
env["use_mingw"] = True
mingw.generate(env)
@@ -45,6 +51,18 @@ def generate(env):
env["SHLIBPREFIX"] = ""
# Want dll suffix
env["SHLIBSUFFIX"] = ".dll"
+
+ env.Append(CCFLAGS=["-Wwrite-strings"])
+ env.Append(LINKFLAGS=["-Wl,--no-undefined"])
+ if env["use_static_cpp"]:
+ env.Append(
+ LINKFLAGS=[
+ "-static",
+ "-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 +78,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"])
+ env.Append(LINKFLAGS=["-Wl,--no-undefined"])
+ if env["use_static_cpp"]:
+ env.Append(
+ LINKFLAGS=[
+ "-static",
+ "-static-libgcc",
+ "-static-libstdc++",
+ ]
+ )
env.Append(CPPDEFINES=["WINDOWS_ENABLED"])