summaryrefslogtreecommitdiff
path: root/SConstruct
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-02-08 15:35:13 +0100
committerRémi Verschelde <rverschelde@gmail.com>2022-02-08 15:45:22 +0100
commitd4553c51262e347b8c877d57ca251d94faf4dc30 (patch)
treef33f6d17c22876a01fcd63fdd3973088461d9ac9 /SConstruct
parent4a2f22daf47c275a7839c0f85924366d1162c8f0 (diff)
SCons: Add `fast_unsafe` option for faster rebuilds
This reverts #53828 which had caused a significant drop in incremental rebuild time for debug builds (from 10s to 23s on my laptop). The "faster but unsafe" options are re-added, as well as adding `max_drift=60` which we didn't use previously. These options speed up SCons' own processing of the codebase to decide what to build/rebuild (i.e. the first step before actually calling the compiler). This will therefore not make much difference for scratch builds, and is mostly useful for incremental rebuilds (including "null" rebuilds with no change). These options are enabled automatically for `debug` builds, unless `fast_unsafe=no` is passed. They are disabled by default for `release` and `release_debug` builds, unless `fast_unsafe=yes` is passed.
Diffstat (limited to 'SConstruct')
-rw-r--r--SConstruct14
1 files changed, 13 insertions, 1 deletions
diff --git a/SConstruct b/SConstruct
index b8063589c6..127fefeb27 100644
--- a/SConstruct
+++ b/SConstruct
@@ -179,9 +179,10 @@ opts.Add(BoolVariable("use_volk", "Use the volk library to load the Vulkan loade
# Advanced options
opts.Add(BoolVariable("dev", "If yes, alias for verbose=yes warnings=extra werror=yes", False))
-opts.Add(BoolVariable("progress", "Show a progress indicator during compilation", True))
opts.Add(BoolVariable("tests", "Build the unit tests", False))
+opts.Add(BoolVariable("fast_unsafe", "Enable unsafe options for faster rebuilds", False))
opts.Add(BoolVariable("verbose", "Enable verbose output for the compilation", False))
+opts.Add(BoolVariable("progress", "Show a progress indicator during compilation", True))
opts.Add(EnumVariable("warnings", "Level of compilation warnings", "all", ("extra", "all", "moderate", "no")))
opts.Add(BoolVariable("werror", "Treat compiler warnings as errors", False))
opts.Add("extra_suffix", "Custom extra suffix added to the base filename of all generated binary files", "")
@@ -360,6 +361,17 @@ if env_base["target"] == "debug":
# working on the engine itself.
env_base.Append(CPPDEFINES=["DEV_ENABLED"])
+# SCons speed optimization controlled by the `fast_unsafe` option, which provide
+# more than 10 s speed up for incremental rebuilds.
+# Unsafe as they reduce the certainty of rebuilding all changed files, so it's
+# enabled by default for `debug` builds, and can be overridden from command line.
+# Ref: https://github.com/SCons/scons/wiki/GoFastButton
+if methods.get_cmdline_bool("fast_unsafe", env_base["target"] == "debug"):
+ # Renamed to `content-timestamp` in SCons >= 4.2, keeping MD5 for compat.
+ env_base.Decider("MD5-timestamp")
+ env_base.SetOption("implicit_cache", 1)
+ env_base.SetOption("max_drift", 60)
+
if env_base["use_precise_math_checks"]:
env_base.Append(CPPDEFINES=["PRECISE_MATH_CHECKS"])