summaryrefslogtreecommitdiff
path: root/SConstruct
diff options
context:
space:
mode:
Diffstat (limited to 'SConstruct')
-rw-r--r--SConstruct42
1 files changed, 33 insertions, 9 deletions
diff --git a/SConstruct b/SConstruct
index 03a4726dd6..684abee29f 100644
--- a/SConstruct
+++ b/SConstruct
@@ -4,10 +4,12 @@ EnsureSConsVersion(3, 0, 0)
EnsurePythonVersion(3, 5)
# System
+import atexit
import glob
import os
import pickle
import sys
+import time
from collections import OrderedDict
# Local
@@ -25,6 +27,8 @@ active_platform_ids = []
platform_exporters = []
platform_apis = []
+time_at_start = time.time()
+
for x in sorted(glob.glob("platform/*")):
if not os.path.isdir(x) or not os.path.exists(x + "/detect.py"):
continue
@@ -138,6 +142,7 @@ opts.Add("extra_suffix", "Custom extra suffix added to the base filename of all
opts.Add(BoolVariable("vsproj", "Generate a Visual Studio solution", False))
opts.Add(BoolVariable("disable_3d", "Disable 3D nodes for a smaller executable", False))
opts.Add(BoolVariable("disable_advanced_gui", "Disable advanced GUI nodes and behaviors", False))
+opts.Add("disable_classes", "Disable given classes (comma separated)", "")
opts.Add(BoolVariable("modules_enabled_by_default", "If no, disable all modules except ones explicitly enabled", True))
opts.Add(BoolVariable("no_editor_splash", "Don't use the custom splash screen for the editor", False))
opts.Add("system_certs_path", "Use this path as SSL certificates default for editor (for package maintainers)", "")
@@ -507,13 +512,17 @@ if selected_platform in platform_list:
if env["werror"]:
env.Append(CCFLAGS=["/WX"])
else: # GCC, Clang
- gcc_common_warnings = []
+ common_warnings = []
if methods.using_gcc(env):
- gcc_common_warnings += ["-Wshadow-local", "-Wno-misleading-indentation"]
+ common_warnings += ["-Wshadow-local", "-Wno-misleading-indentation"]
+ elif methods.using_clang(env) or methods.using_emcc(env):
+ # We often implement `operator<` for structs of pointers as a requirement
+ # for putting them in `Set` or `Map`. We don't mind about unreliable ordering.
+ common_warnings += ["-Wno-ordered-compare-function-pointers"]
if env["warnings"] == "extra":
- env.Append(CCFLAGS=["-Wall", "-Wextra", "-Wwrite-strings", "-Wno-unused-parameter"] + gcc_common_warnings)
+ env.Append(CCFLAGS=["-Wall", "-Wextra", "-Wwrite-strings", "-Wno-unused-parameter"] + common_warnings)
env.Append(CXXFLAGS=["-Wctor-dtor-privacy", "-Wnon-virtual-dtor"])
if methods.using_gcc(env):
env.Append(
@@ -529,12 +538,12 @@ if selected_platform in platform_list:
env.Append(CXXFLAGS=["-Wplacement-new=1"])
if cc_version_major >= 9:
env.Append(CCFLAGS=["-Wattribute-alias=2"])
- elif methods.using_clang(env):
+ elif methods.using_clang(env) or methods.using_emcc(env):
env.Append(CCFLAGS=["-Wimplicit-fallthrough"])
elif env["warnings"] == "all":
- env.Append(CCFLAGS=["-Wall"] + gcc_common_warnings)
+ env.Append(CCFLAGS=["-Wall"] + common_warnings)
elif env["warnings"] == "moderate":
- env.Append(CCFLAGS=["-Wall", "-Wno-unused"] + gcc_common_warnings)
+ env.Append(CCFLAGS=["-Wall", "-Wno-unused"] + common_warnings)
else: # 'no'
env.Append(CCFLAGS=["-w"])
@@ -545,7 +554,7 @@ if selected_platform in platform_list:
env.Append(CXXFLAGS=["-Wno-error=cpp"])
if cc_version_major == 7: # Bogus warning fixed in 8+.
env.Append(CCFLAGS=["-Wno-error=strict-overflow"])
- else:
+ elif methods.using_clang(env) or methods.using_emcc(env):
env.Append(CXXFLAGS=["-Wno-error=#warnings"])
else: # always enable those errors
env.Append(CCFLAGS=["-Werror=return-type"])
@@ -557,11 +566,10 @@ if selected_platform in platform_list:
if env["target"] == "release":
if env["tools"]:
- print("Tools can only be built with targets 'debug' and 'release_debug'.")
+ print("Error: The editor can only be built with `target=debug` or `target=release_debug`.")
Exit(255)
suffix += ".opt"
env.Append(CPPDEFINES=["NDEBUG"])
-
elif env["target"] == "release_debug":
if env["tools"]:
suffix += ".opt.tools"
@@ -569,8 +577,14 @@ if selected_platform in platform_list:
suffix += ".opt.debug"
else:
if env["tools"]:
+ print(
+ "Note: Building a debug binary (which will run slowly). Use `target=release_debug` to build an optimized release binary."
+ )
suffix += ".tools"
else:
+ print(
+ "Note: Building a debug binary (which will run slowly). Use `target=release` to build an optimized release binary."
+ )
suffix += ".debug"
if env["arch"] != "":
@@ -639,6 +653,7 @@ if selected_platform in platform_list:
if env["tools"]:
env.Append(CPPDEFINES=["TOOLS_ENABLED"])
+ methods.write_disabled_classes(env["disable_classes"].split(","))
if env["disable_3d"]:
if env["tools"]:
print(
@@ -749,3 +764,12 @@ if "env" in locals():
# TODO: replace this with `env.Dump(format="json")`
# once we start requiring SCons 4.0 as min version.
methods.dump(env)
+
+
+def print_elapsed_time():
+ elapsed_time_sec = round(time.time() - time_at_start, 3)
+ time_ms = round((elapsed_time_sec % 1) * 1000)
+ print("[Time elapsed: {}.{:03}]".format(time.strftime("%H:%M:%S", time.gmtime(elapsed_time_sec)), time_ms))
+
+
+atexit.register(print_elapsed_time)