Skip to content

Commit 2bf983e

Browse files
committed
[SCons] Add "optimize" and "debug_symbols" options
optimize = auto|none|debug|speed|size|0|1|2|3 debug_symbol = True|False optimize == "auto" will produce: - "debug" for "debug" builds - "speed" for "release" builds
1 parent 024b6d2 commit 2bf983e

File tree

8 files changed

+71
-28
lines changed

8 files changed

+71
-28
lines changed

.github/workflows/ci.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ jobs:
9090
cd test
9191
scons platform=${{ matrix.platform }} target=debug ${{ matrix.flags }} build_library=no
9292
93-
- name: Build test and godot-cpp (release)
93+
- name: Build test and godot-cpp (release, with debug symbols)
9494
run: |
9595
cd test
96-
scons platform=${{ matrix.platform }} target=release ${{ matrix.flags }}
96+
scons platform=${{ matrix.platform }} target=release debug_symbols=yes ${{ matrix.flags }}
9797
9898
- name: Upload artifact
9999
uses: actions/upload-artifact@v3

SConstruct

+5
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ architecture_aliases = {
102102
}
103103
opts.Add(EnumVariable("arch", "CPU architecture", "", architecture_array, architecture_aliases))
104104

105+
# Targets flags tool (optimizations, debug symbols)
106+
target_tool = Tool("targets", toolpath=["tools"])
107+
target_tool.options(opts)
108+
105109
opts.Update(env)
106110
Help(opts.GenerateHelpText(env))
107111

@@ -135,6 +139,7 @@ if tool is None or not tool.exists(env):
135139
raise ValueError("Required toolchain not found for platform " + env["platform"])
136140

137141
tool.generate(env)
142+
target_tool.generate(env)
138143

139144
# Detect and print a warning listing unknown SCons variables to ease troubleshooting.
140145
unknown = opts.UnknownVariables()

tools/android.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,6 @@ def generate(env):
9696

9797
env.Append(
9898
CCFLAGS=["--target=" + arch_info["target"] + env["android_api_level"], "-march=" + arch_info["march"], "-fPIC"]
99-
) # , '-fPIE', '-fno-addrsig', '-Oz'])
99+
)
100100
env.Append(CCFLAGS=arch_info["ccflags"])
101101
env.Append(LINKFLAGS=["--target=" + arch_info["target"] + env["android_api_level"], "-march=" + arch_info["march"]])
102-
103-
if env["target"] == "debug":
104-
env.Append(CCFLAGS=["-Og", "-g"])
105-
elif env["target"] == "release":
106-
env.Append(CCFLAGS=["-O3"])

tools/ios.py

-5
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,3 @@ def generate(env):
7979

8080
env.Append(CCFLAGS=["-isysroot", env["IOS_SDK_PATH"]])
8181
env.Append(LINKFLAGS=["-isysroot", env["IOS_SDK_PATH"], "-F" + env["IOS_SDK_PATH"]])
82-
83-
if env["target"] == "debug":
84-
env.Append(CCFLAGS=["-Og", "-g"])
85-
elif env["target"] == "release":
86-
env.Append(CCFLAGS=["-O3"])

tools/linux.py

-5
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ def generate(env):
1818
env.Append(CCFLAGS=["-fPIC", "-Wwrite-strings"])
1919
env.Append(LINKFLAGS=["-Wl,-R,'$$ORIGIN'"])
2020

21-
if env["target"] == "debug":
22-
env.Append(CCFLAGS=["-Og", "-g"])
23-
elif env["target"] == "release":
24-
env.Append(CCFLAGS=["-O3"])
25-
2621
if env["arch"] == "x86_64":
2722
# -m64 and -m32 are x86-specific already, but it doesn't hurt to
2823
# be clear and also specify -march=x86-64. Similar with 32-bit.

tools/macos.py

-5
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,3 @@ def generate(env):
4848
"-Wl,-undefined,dynamic_lookup",
4949
]
5050
)
51-
52-
if env["target"] == "debug":
53-
env.Append(CCFLAGS=["-Og", "-g"])
54-
elif env["target"] == "release":
55-
env.Append(CCFLAGS=["-O3"])

tools/targets.py

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import os
2+
import sys
3+
from SCons.Variables import *
4+
5+
6+
def options(opts):
7+
opts.Add(
8+
EnumVariable(
9+
"optimize",
10+
"The desired optimization flags",
11+
"auto",
12+
("auto", "none", "debug", "speed", "size", "0", "1", "2", "3"),
13+
)
14+
)
15+
opts.Add(BoolVariable("debug_symbols", "Add debugging symbols to release builds", False))
16+
17+
18+
def exists(env):
19+
return True
20+
21+
22+
def generate(env):
23+
if env["optimize"] == "auto":
24+
env["optimize"] = "speed" if env["target"] == "release" else "debug"
25+
env["debug_symbols"] = env["debug_symbols"] or env["target"] == "debug"
26+
27+
if "is_msvc" in env and env["is_msvc"]:
28+
if env["debug_symbols"]:
29+
env.Append(CCFLAGS=["/Z7", "/D_DEBUG"])
30+
env.Append(LINKFLAGS=["/DEBUG:FULL"])
31+
else:
32+
env.Append(CCFLAGS=["/Z7", "/DNDEBUG"])
33+
34+
if env["optimize"] == "speed":
35+
env.Append(CCFLAGS=["/O2"])
36+
elif env["optimize"] == "size":
37+
env.Append(CCFLAGS=["/Os"])
38+
elif env["optimize"] == "debug":
39+
env.Append(CCFLAGS=["/Od"])
40+
elif env["optimize"] == "none":
41+
env.Append(CCFLAGS=["/Od"])
42+
else:
43+
env.Append(CCFLAGS=["/O%s" % env["optimize"]])
44+
else:
45+
if env["debug_symbols"]:
46+
env.Append(CCFLAGS=["-g"])
47+
48+
if env["optimize"] == "speed":
49+
env.Append(CCFLAGS=["-O3"])
50+
elif env["optimize"] == "size":
51+
env.Append(CCFLAGS=["-Os"])
52+
elif env["optimize"] == "debug":
53+
env.Append(CCFLAGS=["-Og"])
54+
elif env["optimize"] == "none":
55+
env.Append(CCFLAGS=["-O0"])
56+
else:
57+
env.Append(CCFLAGS=["-O%s" % env["optimize"]])

tools/windows.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ def generate(env):
2525
env["is_msvc"] = True
2626
msvc.generate(env)
2727
env.Append(CPPDEFINES=["TYPED_METHOD_BIND", "NOMINMAX"])
28+
env.Append(CCFLAGS=["/EHsc"])
2829
env.Append(LINKFLAGS=["/WX"])
29-
if env["target"] == "debug":
30-
env.Append(CCFLAGS=["/Z7", "/Od", "/EHsc", "/D_DEBUG", "/MDd"])
31-
env.Append(LINKFLAGS=["/DEBUG:FULL"])
32-
elif env["target"] == "release":
33-
env.Append(CCFLAGS=["/O2", "/EHsc", "/DNDEBUG", "/MD"])
30+
if env["debug_symbols"] or env["target"] == "debug":
31+
env.Append(CCFLAGS=["/MDd"])
32+
else:
33+
env.Append(CCFLAGS=["/MD"])
34+
3435
if env["use_clang_cl"]:
3536
env["CC"] = "clang-cl"
3637
env["CXX"] = "clang-cl"

0 commit comments

Comments
 (0)