summaryrefslogtreecommitdiffstats
path: root/SConstruct
diff options
context:
space:
mode:
Diffstat (limited to 'SConstruct')
-rw-r--r--SConstruct14
1 files changed, 11 insertions, 3 deletions
diff --git a/SConstruct b/SConstruct
index 6968967380..7ea056f839 100644
--- a/SConstruct
+++ b/SConstruct
@@ -193,6 +193,7 @@ opts.Add(BoolVariable("vulkan", "Enable the vulkan rendering driver", True))
opts.Add(BoolVariable("opengl3", "Enable the OpenGL/GLES3 rendering driver", True))
opts.Add(BoolVariable("openxr", "Enable the OpenXR driver", True))
opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loader dynamically", True))
+opts.Add(BoolVariable("disable_exceptions", "Force disabling exception handling code", True))
opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "")
opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursively for each specified path.", True))
@@ -710,6 +711,16 @@ if selected_platform in platform_list:
)
Exit(255)
+ # Disable exception handling. Godot doesn't use exceptions anywhere, and this
+ # saves around 20% of binary size and very significant build time (GH-80513).
+ if env["disable_exceptions"]:
+ if env.msvc:
+ env.Append(CPPDEFINES=[("_HAS_EXCEPTIONS", 0)])
+ else:
+ env.Append(CCFLAGS=["-fno-exceptions"])
+ elif env.msvc:
+ env.Append(CCFLAGS=["/EHsc"])
+
# Configure compiler warnings
if env.msvc: # MSVC
if env["warnings"] == "no":
@@ -739,9 +750,6 @@ if selected_platform in platform_list:
]
)
- # Set exception handling model to avoid warnings caused by Windows system headers.
- env.Append(CCFLAGS=["/EHsc"])
-
if env["werror"]:
env.Append(CCFLAGS=["/WX"])
else: # GCC, Clang