diff --git a/build/common_compiler_flags.py b/build/common_compiler_flags.py index a9e0822..67e5ac1 100644 --- a/build/common_compiler_flags.py +++ b/build/common_compiler_flags.py @@ -63,6 +63,9 @@ def generate(env): elif env["optimize"] == "debug": env.Append(CPPDEFINES=["OPT_DEBUG_ENABLED"]) + if env["harden_memory"] == "fast": + env.Append(CPPDEFINES=["_GLIBCXX_ASSERTIONS", ("_LIBCPP_HARDENING_MODE", "_LIBCPP_HARDENING_MODE_FAST"), ("_MSVC_STL_HARDENING", 1)]) + # Set optimize and debug_symbols flags. # "custom" means do nothing and let users set their own optimization flags. if env.get("is_msvc", False): diff --git a/tools/targets.py b/tools/targets.py index 34044e9..1a562aa 100644 --- a/tools/targets.py +++ b/tools/targets.py @@ -59,6 +59,14 @@ def options(opts): ) opts.Add(BoolVariable("debug_symbols", "Build with debugging symbols", True)) opts.Add(BoolVariable("dev_build", "Developer build with dev-only debugging code (DEV_ENABLED)", False)) + opts.Add(EnumVariable( + "harden_memory", + "Library memory hardening (by default inferred from 'dev_build')", + "auto", + ["auto", "none", "fast"], + ignorecase=2 + ) + ) def exists(env): @@ -89,6 +97,13 @@ def generate(env): opt_level = "speed" env["optimize"] = ARGUMENTS.get("optimize", opt_level) + if env["harden_memory"] == "auto": + if env.dev_build: + harden_level = "none" + else: + harden_level = "fast" + env["harden_memory"] = ARGUMENTS.get("harden_memory", harden_level) + env["debug_symbols"] = get_cmdline_bool("debug_symbols", env.dev_build) if env.use_hot_reload: