|
@@ -170,7 +170,7 @@ opts.Add(EnumVariable("arch", "CPU architecture", "auto", ["auto"] + architectur
|
|
|
opts.Add(EnumVariable("float", "Floating-point precision", "32", ("32", "64")))
|
|
|
opts.Add(EnumVariable("optimize", "Optimization type", "speed", ("speed", "size", "none")))
|
|
|
opts.Add(BoolVariable("production", "Set defaults to build Godot for use in production", False))
|
|
|
-opts.Add(BoolVariable("use_lto", "Use link-time optimization", False))
|
|
|
+opts.Add(EnumVariable("lto", "Link-time optimization (for production buids)", "none", ("none", "thin", "full")))
|
|
|
|
|
|
# Components
|
|
|
opts.Add(BoolVariable("deprecated", "Enable compatibility code for deprecated and removed features", True))
|
|
@@ -438,35 +438,6 @@ if selected_platform in platform_list:
|
|
|
)
|
|
|
env.SetOption("num_jobs", safer_cpu_count)
|
|
|
|
|
|
- # 'dev' and 'production' are aliases to set default options if they haven't been set
|
|
|
- # manually by the user.
|
|
|
- if env["dev"]:
|
|
|
- env["verbose"] = methods.get_cmdline_bool("verbose", True)
|
|
|
- env["warnings"] = ARGUMENTS.get("warnings", "extra")
|
|
|
- env["werror"] = methods.get_cmdline_bool("werror", True)
|
|
|
- if env["tools"]:
|
|
|
- env["tests"] = methods.get_cmdline_bool("tests", True)
|
|
|
- if env["production"]:
|
|
|
- env["use_static_cpp"] = methods.get_cmdline_bool("use_static_cpp", True)
|
|
|
- env["use_lto"] = methods.get_cmdline_bool("use_lto", True)
|
|
|
- env["debug_symbols"] = methods.get_cmdline_bool("debug_symbols", False)
|
|
|
- if not env["tools"] and env["target"] == "debug":
|
|
|
- print(
|
|
|
- "WARNING: Requested `production` build with `tools=no target=debug`, "
|
|
|
- "this will give you a full debug template (use `target=release_debug` "
|
|
|
- "for an optimized template with debug features)."
|
|
|
- )
|
|
|
- if env.msvc:
|
|
|
- print(
|
|
|
- "WARNING: For `production` Windows builds, you should use MinGW with GCC "
|
|
|
- "or Clang instead of Visual Studio, as they can better optimize the "
|
|
|
- "GDScript VM in a very significant way. MSVC LTO also doesn't work "
|
|
|
- "reliably for our use case."
|
|
|
- "If you want to use MSVC nevertheless for production builds, set "
|
|
|
- "`debug_symbols=no use_lto=no` instead of the `production=yes` option."
|
|
|
- )
|
|
|
- Exit(255)
|
|
|
-
|
|
|
env.extra_suffix = ""
|
|
|
|
|
|
if env["extra_suffix"] != "":
|
|
@@ -517,6 +488,37 @@ if selected_platform in platform_list:
|
|
|
# We apply it to CCFLAGS (both C and C++ code) in case it impacts C features.
|
|
|
env.Prepend(CCFLAGS=["/std:c++17"])
|
|
|
|
|
|
+ # 'dev' and 'production' are aliases to set default options if they haven't been set
|
|
|
+ # manually by the user.
|
|
|
+ if env["dev"]:
|
|
|
+ env["verbose"] = methods.get_cmdline_bool("verbose", True)
|
|
|
+ env["warnings"] = ARGUMENTS.get("warnings", "extra")
|
|
|
+ env["werror"] = methods.get_cmdline_bool("werror", True)
|
|
|
+ if env["tools"]:
|
|
|
+ env["tests"] = methods.get_cmdline_bool("tests", True)
|
|
|
+ if env["production"]:
|
|
|
+ env["use_static_cpp"] = methods.get_cmdline_bool("use_static_cpp", True)
|
|
|
+ env["lto"] = ARGUMENTS.get("lto", "full")
|
|
|
+ env["debug_symbols"] = methods.get_cmdline_bool("debug_symbols", False)
|
|
|
+ if not env["tools"] and env["target"] == "debug":
|
|
|
+ print(
|
|
|
+ "WARNING: Requested `production` build with `tools=no target=debug`, "
|
|
|
+ "this will give you a full debug template (use `target=release_debug` "
|
|
|
+ "for an optimized template with debug features)."
|
|
|
+ )
|
|
|
+ if env.msvc:
|
|
|
+ print(
|
|
|
+ "WARNING: For `production` Windows builds, you should use MinGW with GCC "
|
|
|
+ "or Clang instead of Visual Studio, as they can better optimize the "
|
|
|
+ "GDScript VM in a very significant way. MSVC LTO also doesn't work "
|
|
|
+ "reliably for our use case."
|
|
|
+ "If you want to use MSVC nevertheless for production builds, set "
|
|
|
+ "`debug_symbols=no lto=none` instead of the `production=yes` option."
|
|
|
+ )
|
|
|
+ Exit(255)
|
|
|
+ if env["lto"] != "none":
|
|
|
+ print("Using LTO: " + env["lto"])
|
|
|
+
|
|
|
# Enforce our minimal compiler version requirements
|
|
|
cc_version = methods.get_compiler_version(env) or {
|
|
|
"major": None,
|