| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2014-11-20 00:09:39 +03:00
										 |  |  | import platform | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2022-07-21 11:35:38 +02:00
										 |  |  | from methods import get_compiler_version, using_gcc | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | from platform_methods import detect_arch | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-23 22:21:46 +09:00
										 |  |  | from typing import TYPE_CHECKING | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if TYPE_CHECKING: | 
					
						
							|  |  |  |     from SCons import Environment | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-04 21:40:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def is_active(): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return True | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_name(): | 
					
						
							| 
									
										
										
										
											2020-03-03 10:36:29 -03:00
										 |  |  |     return "LinuxBSD" | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def can_build(): | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if os.name != "posix" or sys.platform == "darwin": | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         return False | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 03:42:15 +02:00
										 |  |  |     pkgconf_error = os.system("pkg-config --version > /dev/null") | 
					
						
							|  |  |  |     if pkgconf_error: | 
					
						
							| 
									
										
										
										
											2021-08-31 16:17:56 +02:00
										 |  |  |         print("Error: pkg-config not found. Aborting.") | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         return False | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     return True | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_opts(): | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     from SCons.Variables import BoolVariable, EnumVariable | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2022-07-21 11:35:38 +02:00
										 |  |  |         EnumVariable("linker", "Linker program", "default", ("default", "bfd", "gold", "lld", "mold")), | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         BoolVariable("use_llvm", "Use the LLVM compiler", False), | 
					
						
							| 
									
										
										
										
											2021-02-01 14:26:16 +01:00
										 |  |  |         BoolVariable("use_static_cpp", "Link libgcc and libstdc++ statically for better portability", True), | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         BoolVariable("use_coverage", "Test Godot coverage", False), | 
					
						
							|  |  |  |         BoolVariable("use_ubsan", "Use LLVM/GCC compiler undefined behavior sanitizer (UBSAN)", False), | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |         BoolVariable("use_asan", "Use LLVM/GCC compiler address sanitizer (ASAN)", False), | 
					
						
							|  |  |  |         BoolVariable("use_lsan", "Use LLVM/GCC compiler leak sanitizer (LSAN)", False), | 
					
						
							|  |  |  |         BoolVariable("use_tsan", "Use LLVM/GCC compiler thread sanitizer (TSAN)", False), | 
					
						
							|  |  |  |         BoolVariable("use_msan", "Use LLVM compiler memory sanitizer (MSAN)", False), | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         BoolVariable("use_sowrap", "Dynamically load system libraries", True), | 
					
						
							| 
									
										
										
										
											2023-01-12 10:49:20 +02:00
										 |  |  |         BoolVariable("alsa", "Use ALSA", True), | 
					
						
							|  |  |  |         BoolVariable("pulseaudio", "Use PulseAudio", True), | 
					
						
							|  |  |  |         BoolVariable("dbus", "Use D-Bus to handle screensaver and portal desktop settings", True), | 
					
						
							|  |  |  |         BoolVariable("speechd", "Use Speech Dispatcher for Text-to-Speech support", True), | 
					
						
							|  |  |  |         BoolVariable("fontconfig", "Use fontconfig for system fonts support", True), | 
					
						
							| 
									
										
										
										
											2021-02-01 14:40:15 +01:00
										 |  |  |         BoolVariable("udev", "Use udev for gamepad connection callbacks", True), | 
					
						
							| 
									
										
										
										
											2021-05-25 18:26:38 +02:00
										 |  |  |         BoolVariable("x11", "Enable X11 display", True), | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         BoolVariable("touch", "Enable touch events", True), | 
					
						
							|  |  |  |         BoolVariable("execinfo", "Use libexecinfo on systems where glibc is not available", False), | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-19 12:23:22 +03:00
										 |  |  | def get_doc_classes(): | 
					
						
							|  |  |  |     return [ | 
					
						
							|  |  |  |         "EditorExportPlatformLinuxBSD", | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_doc_path(): | 
					
						
							|  |  |  |     return "doc_classes" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_flags(): | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     return [ | 
					
						
							|  |  |  |         ("arch", detect_arch()), | 
					
						
							|  |  |  |     ] | 
					
						
							| 
									
										
										
										
											2016-04-02 20:26:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-23 22:21:46 +09:00
										 |  |  | def configure(env: "Environment"): | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     # Validate arch. | 
					
						
							|  |  |  |     supported_arches = ["x86_32", "x86_64", "arm32", "arm64", "rv64", "ppc32", "ppc64"] | 
					
						
							|  |  |  |     if env["arch"] not in supported_arches: | 
					
						
							|  |  |  |         print( | 
					
						
							|  |  |  |             'Unsupported CPU architecture "%s" for Linux / *BSD. Supported architectures are: %s.' | 
					
						
							|  |  |  |             % (env["arch"], ", ".join(supported_arches)) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-03-09 09:56:50 +01:00
										 |  |  |         sys.exit(255) | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Build type | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
  * Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
  * Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
  * Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
  enables generating debug symbols, does not define `NDEBUG` so `assert()`
  works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
											
										 
											2022-09-22 08:28:55 +02:00
										 |  |  |     if env.dev_build: | 
					
						
							|  |  |  |         # This is needed for our crash handler to work properly. | 
					
						
							|  |  |  |         # gdb works fine without it though, so maybe our crash handler could too. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LINKFLAGS=["-rdynamic"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     # CPU architecture flags. | 
					
						
							| 
									
										
										
										
											2021-08-28 17:40:32 -05:00
										 |  |  |     if env["arch"] == "rv64": | 
					
						
							|  |  |  |         # G = General-purpose extensions, C = Compression extension (very common). | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-march=rv64gc"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Compiler configuration | 
					
						
							| 
									
										
										
										
											2014-10-07 01:31:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if "CXX" in env and "clang" in os.path.basename(env["CXX"]): | 
					
						
							| 
									
										
										
										
											2017-10-27 19:18:22 +02:00
										 |  |  |         # Convenience check to enforce the use_llvm overrides when CXX is clang(++) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env["use_llvm"] = True | 
					
						
							| 
									
										
										
										
											2017-10-27 19:18:22 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["use_llvm"]: | 
					
						
							|  |  |  |         if "clang++" not in os.path.basename(env["CXX"]): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:57:40 +01:00
										 |  |  |             env["CC"] = "clang" | 
					
						
							|  |  |  |             env["CXX"] = "clang++" | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |         env.extra_suffix = ".llvm" + env.extra_suffix | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-21 11:35:38 +02:00
										 |  |  |     if env["linker"] != "default": | 
					
						
							|  |  |  |         print("Using linker program: " + env["linker"]) | 
					
						
							|  |  |  |         if env["linker"] == "mold" and using_gcc(env):  # GCC < 12.1 doesn't support -fuse-ld=mold. | 
					
						
							|  |  |  |             cc_version = get_compiler_version(env) | 
					
						
							|  |  |  |             cc_semver = (int(cc_version["major"]), int(cc_version["minor"])) | 
					
						
							|  |  |  |             if cc_semver < (12, 1): | 
					
						
							|  |  |  |                 found_wrapper = False | 
					
						
							|  |  |  |                 for path in ["/usr/libexec", "/usr/local/libexec", "/usr/lib", "/usr/local/lib"]: | 
					
						
							|  |  |  |                     if os.path.isfile(path + "/mold/ld"): | 
					
						
							|  |  |  |                         env.Append(LINKFLAGS=["-B" + path + "/mold"]) | 
					
						
							|  |  |  |                         found_wrapper = True | 
					
						
							|  |  |  |                         break | 
					
						
							|  |  |  |                 if not found_wrapper: | 
					
						
							|  |  |  |                     print("Couldn't locate mold installation path. Make sure it's installed in /usr or /usr/local.") | 
					
						
							|  |  |  |                     sys.exit(255) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 env.Append(LINKFLAGS=["-fuse-ld=mold"]) | 
					
						
							| 
									
										
										
										
											2019-03-18 14:37:25 +01:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2022-07-21 11:35:38 +02:00
										 |  |  |             env.Append(LINKFLAGS=["-fuse-ld=%s" % env["linker"]]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["use_coverage"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-ftest-coverage", "-fprofile-arcs"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-ftest-coverage", "-fprofile-arcs"]) | 
					
						
							| 
									
										
										
										
											2020-02-26 19:43:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-28 20:40:27 -06:00
										 |  |  |     if env["use_ubsan"] or env["use_asan"] or env["use_lsan"] or env["use_tsan"] or env["use_msan"]: | 
					
						
							| 
									
										
										
										
											2021-12-10 10:10:47 -06:00
										 |  |  |         env.extra_suffix += ".san" | 
					
						
							| 
									
										
										
										
											2022-04-01 13:15:35 +03:00
										 |  |  |         env.Append(CCFLAGS=["-DSANITIZERS_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2019-01-20 20:53:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["use_ubsan"]: | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |             env.Append( | 
					
						
							|  |  |  |                 CCFLAGS=[ | 
					
						
							|  |  |  |                     "-fsanitize=undefined,shift,shift-exponent,integer-divide-by-zero,unreachable,vla-bound,null,return,signed-integer-overflow,bounds,float-divide-by-zero,float-cast-overflow,nonnull-attribute,returns-nonnull-attribute,bool,enum,vptr,pointer-overflow,builtin" | 
					
						
							|  |  |  |                 ] | 
					
						
							|  |  |  |             ) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env.Append(LINKFLAGS=["-fsanitize=undefined"]) | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |             if env["use_llvm"]: | 
					
						
							|  |  |  |                 env.Append( | 
					
						
							|  |  |  |                     CCFLAGS=[ | 
					
						
							| 
									
										
										
										
											2021-04-16 00:08:02 +03:00
										 |  |  |                         "-fsanitize=nullability-return,nullability-arg,function,nullability-assign,implicit-integer-sign-change" | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |                     ] | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 env.Append(CCFLAGS=["-fsanitize=bounds-strict"]) | 
					
						
							| 
									
										
										
										
											2019-01-20 20:53:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["use_asan"]: | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |             env.Append(CCFLAGS=["-fsanitize=address,pointer-subtract,pointer-compare"]) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env.Append(LINKFLAGS=["-fsanitize=address"]) | 
					
						
							| 
									
										
										
										
											2019-01-20 20:53:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["use_lsan"]: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-fsanitize=leak"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-fsanitize=leak"]) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["use_tsan"]: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-fsanitize=thread"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-fsanitize=thread"]) | 
					
						
							| 
									
										
										
										
											2019-08-07 12:01:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |         if env["use_msan"] and env["use_llvm"]: | 
					
						
							| 
									
										
										
										
											2020-11-28 20:40:27 -06:00
										 |  |  |             env.Append(CCFLAGS=["-fsanitize=memory"]) | 
					
						
							| 
									
										
										
										
											2020-08-01 08:35:37 +02:00
										 |  |  |             env.Append(CCFLAGS=["-fsanitize-memory-track-origins"]) | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-fsanitize-recover=memory"]) | 
					
						
							| 
									
										
										
										
											2020-11-28 20:40:27 -06:00
										 |  |  |             env.Append(LINKFLAGS=["-fsanitize=memory"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-21 15:15:54 +02:00
										 |  |  |     # LTO | 
					
						
							| 
									
										
										
										
											2022-09-13 17:01:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if env["lto"] == "auto":  # Full LTO for production. | 
					
						
							|  |  |  |         env["lto"] = "full" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-21 15:15:54 +02:00
										 |  |  |     if env["lto"] != "none": | 
					
						
							|  |  |  |         if env["lto"] == "thin": | 
					
						
							|  |  |  |             if not env["use_llvm"]: | 
					
						
							|  |  |  |                 print("ThinLTO is only compatible with LLVM, use `use_llvm=yes` or `lto=full`.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							| 
									
										
										
										
											2022-07-21 11:35:38 +02:00
										 |  |  |             env.Append(CCFLAGS=["-flto=thin"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-flto=thin"]) | 
					
						
							|  |  |  |         elif not env["use_llvm"] and env.GetOption("num_jobs") > 1: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env.Append(CCFLAGS=["-flto"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-flto=" + str(env.GetOption("num_jobs"))]) | 
					
						
							| 
									
										
										
										
											2017-09-26 14:22:49 +02:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2022-07-21 11:35:38 +02:00
										 |  |  |             env.Append(CCFLAGS=["-flto"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-flto"]) | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if not env["use_llvm"]: | 
					
						
							|  |  |  |             env["RANLIB"] = "gcc-ranlib" | 
					
						
							|  |  |  |             env["AR"] = "gcc-ar" | 
					
						
							| 
									
										
										
										
											2017-01-25 12:40:54 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append(CCFLAGS=["-pipe"]) | 
					
						
							| 
									
										
										
										
											2015-05-22 22:14:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Dependencies | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |     if env["use_sowrap"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["SOWRAP_ENABLED"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["touch"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["TOUCH_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2017-11-29 21:01:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     # FIXME: Check for existence of the libs before parsing their flags with pkg-config | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  |     # freetype depends on libpng and zlib, so bundling one of them while keeping others | 
					
						
							| 
									
										
										
										
											2023-02-16 12:15:16 +01:00
										 |  |  |     # as shared libraries leads to weird issues. And graphite and harfbuzz need freetype. | 
					
						
							|  |  |  |     ft_linked_deps = [ | 
					
						
							|  |  |  |         env["builtin_freetype"], | 
					
						
							|  |  |  |         env["builtin_libpng"], | 
					
						
							|  |  |  |         env["builtin_zlib"], | 
					
						
							|  |  |  |         env["builtin_graphite"], | 
					
						
							|  |  |  |         env["builtin_harfbuzz"], | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |     if (not all(ft_linked_deps)) and any(ft_linked_deps):  # All or nothing. | 
					
						
							|  |  |  |         print( | 
					
						
							|  |  |  |             "These libraries should be either all builtin, or all system provided:\n" | 
					
						
							|  |  |  |             "freetype, libpng, zlib, graphite, harfbuzz.\n" | 
					
						
							|  |  |  |             "Please specify `builtin_<name>=no` for all of them, or none." | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2023-03-09 09:56:50 +01:00
										 |  |  |         sys.exit(255) | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_freetype"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config freetype2 --cflags --libs") | 
					
						
							| 
									
										
										
										
											2015-09-10 21:40:34 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-11 12:10:23 +03:00
										 |  |  |     if not env["builtin_graphite"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config graphite2 --cflags --libs") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 12:15:16 +01:00
										 |  |  |     if not env["builtin_icu4c"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config icu-i18n icu-uc --cflags --libs") | 
					
						
							| 
									
										
										
										
											2020-08-11 12:10:23 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if not env["builtin_harfbuzz"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config harfbuzz harfbuzz-icu --cflags --libs") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_libpng"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libpng16 --cflags --libs") | 
					
						
							| 
									
										
										
										
											2016-10-14 21:57:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_enet"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libenet --cflags --libs") | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_squish"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libsquish --cflags --libs") | 
					
						
							| 
									
										
										
										
											2016-10-13 21:48:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_zstd"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libzstd --cflags --libs") | 
					
						
							| 
									
										
										
										
											2017-09-23 23:46:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     # Sound and video libraries | 
					
						
							|  |  |  |     # Keep the order as it triggers chained dependencies (ogg needed by others, etc.) | 
					
						
							| 
									
										
										
										
											2016-10-13 19:40:40 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_libtheora"]: | 
					
						
							|  |  |  |         env["builtin_libogg"] = False  # Needed to link against system libtheora | 
					
						
							|  |  |  |         env["builtin_libvorbis"] = False  # Needed to link against system libtheora | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config theora theoradec --cflags --libs") | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |         if env["arch"] in ["x86_64", "x86_32"]: | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |             env["x86_libtheora_opt_gcc"] = True | 
					
						
							| 
									
										
										
										
											2016-10-12 20:37:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_libvorbis"]: | 
					
						
							|  |  |  |         env["builtin_libogg"] = False  # Needed to link against system libvorbis | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config vorbis vorbisfile --cflags --libs") | 
					
						
							| 
									
										
										
										
											2016-10-12 20:37:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_libogg"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config ogg --cflags --libs") | 
					
						
							| 
									
										
										
										
											2016-10-12 20:37:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_libwebp"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libwebp --cflags --libs") | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_mbedtls"]: | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |         # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LIBS=["mbedtls", "mbedcrypto", "mbedx509"]) | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_wslay"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libwslay --cflags --libs") | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_miniupnpc"]: | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |         # No pkgconfig file so far, hardcode default paths. | 
					
						
							| 
									
										
										
										
											2019-04-30 13:12:02 +02:00
										 |  |  |         env.Prepend(CPPPATH=["/usr/include/miniupnpc"]) | 
					
						
							| 
									
										
										
										
											2018-06-07 10:41:11 +02:00
										 |  |  |         env.Append(LIBS=["miniupnpc"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-07 23:13:15 +08:00
										 |  |  |     # On Linux wchar_t should be 32-bits | 
					
						
							| 
									
										
										
										
											2023-01-21 12:25:29 +01:00
										 |  |  |     # 16-bit library shouldn't be required due to compiler optimizations | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_pcre2"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config libpcre2-32 --cflags --libs") | 
					
						
							| 
									
										
										
										
											2017-08-07 23:13:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-16 12:15:16 +01:00
										 |  |  |     if not env["builtin_recastnavigation"]: | 
					
						
							|  |  |  |         # No pkgconfig file so far, hardcode default paths. | 
					
						
							|  |  |  |         env.Prepend(CPPPATH=["/usr/include/recastnavigation"]) | 
					
						
							|  |  |  |         env.Append(LIBS=["Recast"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-03 14:02:05 +01:00
										 |  |  |     if not env["builtin_embree"] and env["arch"] in ["x86_64", "arm64"]: | 
					
						
							| 
									
										
										
										
											2021-05-04 12:06:54 +02:00
										 |  |  |         # No pkgconfig file so far, hardcode expected lib name. | 
					
						
							|  |  |  |         env.Append(LIBS=["embree3"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-27 21:07:21 +03:00
										 |  |  |     if env["fontconfig"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         if not env["use_sowrap"]: | 
					
						
							|  |  |  |             if os.system("pkg-config --exists fontconfig") == 0:  # 0 means found | 
					
						
							|  |  |  |                 env.ParseConfig("pkg-config fontconfig --cflags --libs") | 
					
						
							|  |  |  |                 env.Append(CPPDEFINES=["FONTCONFIG_ENABLED"]) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 print("Warning: fontconfig development libraries not found. Disabling the system fonts support.") | 
					
						
							|  |  |  |                 env["fontconfig"] = False | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             env.Append(CPPDEFINES=["FONTCONFIG_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2022-07-08 15:38:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-12 10:49:20 +02:00
										 |  |  |     if env["alsa"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         if not env["use_sowrap"]: | 
					
						
							|  |  |  |             if os.system("pkg-config --exists alsa") == 0:  # 0 means found | 
					
						
							|  |  |  |                 env.ParseConfig("pkg-config alsa --cflags --libs") | 
					
						
							|  |  |  |                 env.Append(CPPDEFINES=["ALSA_ENABLED", "ALSAMIDI_ENABLED"]) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 print("Warning: ALSA development libraries not found. Disabling the ALSA audio driver.") | 
					
						
							|  |  |  |                 env["alsa"] = False | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             env.Append(CPPDEFINES=["ALSA_ENABLED", "ALSAMIDI_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2015-12-21 22:39:03 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["pulseaudio"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         if not env["use_sowrap"]: | 
					
						
							|  |  |  |             if os.system("pkg-config --exists libpulse") == 0:  # 0 means found | 
					
						
							|  |  |  |                 env.ParseConfig("pkg-config libpulse --cflags --libs") | 
					
						
							| 
									
										
										
										
											2023-03-09 16:05:52 +01:00
										 |  |  |                 env.Append(CPPDEFINES=["PULSEAUDIO_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 print("Warning: PulseAudio development libraries not found. Disabling the PulseAudio audio driver.") | 
					
						
							|  |  |  |                 env["pulseaudio"] = False | 
					
						
							| 
									
										
										
										
											2023-03-09 16:05:52 +01:00
										 |  |  |         else: | 
					
						
							|  |  |  |             env.Append(CPPDEFINES=["PULSEAUDIO_ENABLED", "_REENTRANT"]) | 
					
						
							| 
									
										
										
										
											2014-12-19 13:44:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-02 23:46:34 +02:00
										 |  |  |     if env["dbus"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         if not env["use_sowrap"]: | 
					
						
							|  |  |  |             if os.system("pkg-config --exists dbus-1") == 0:  # 0 means found | 
					
						
							|  |  |  |                 env.ParseConfig("pkg-config dbus-1 --cflags --libs") | 
					
						
							|  |  |  |                 env.Append(CPPDEFINES=["DBUS_ENABLED"]) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 print("Warning: D-Bus development libraries not found. Disabling screensaver prevention.") | 
					
						
							|  |  |  |                 env["dbus"] = False | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             env.Append(CPPDEFINES=["DBUS_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2020-04-02 23:46:34 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-04 14:33:37 +02:00
										 |  |  |     if env["speechd"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         if not env["use_sowrap"]: | 
					
						
							|  |  |  |             if os.system("pkg-config --exists speech-dispatcher") == 0:  # 0 means found | 
					
						
							|  |  |  |                 env.ParseConfig("pkg-config speech-dispatcher --cflags --libs") | 
					
						
							|  |  |  |                 env.Append(CPPDEFINES=["SPEECHD_ENABLED"]) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 print("Warning: speech-dispatcher development libraries not found. Disabling text to speech support.") | 
					
						
							|  |  |  |                 env["speechd"] = False | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             env.Append(CPPDEFINES=["SPEECHD_ENABLED"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not env["use_sowrap"]: | 
					
						
							|  |  |  |         if os.system("pkg-config --exists xkbcommon") == 0:  # 0 means found | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xkbcommon --cflags --libs") | 
					
						
							|  |  |  |             env.Append(CPPDEFINES=["XKB_ENABLED"]) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             print( | 
					
						
							|  |  |  |                 "Warning: libxkbcommon development libraries not found. Disabling dead key composition and key label support." | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["XKB_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2021-11-04 14:33:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if platform.system() == "Linux": | 
					
						
							| 
									
										
										
										
											2019-07-03 09:16:20 +02:00
										 |  |  |         env.Append(CPPDEFINES=["JOYDEV_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["udev"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |             if not env["use_sowrap"]: | 
					
						
							|  |  |  |                 if os.system("pkg-config --exists libudev") == 0:  # 0 means found | 
					
						
							|  |  |  |                     env.ParseConfig("pkg-config libudev --cflags --libs") | 
					
						
							|  |  |  |                     env.Append(CPPDEFINES=["UDEV_ENABLED"]) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     print("Warning: libudev development libraries not found. Disabling controller hotplugging support.") | 
					
						
							|  |  |  |                     env["udev"] = False | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 env.Append(CPPDEFINES=["UDEV_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2021-02-17 11:28:27 +01:00
										 |  |  |     else: | 
					
						
							|  |  |  |         env["udev"] = False  # Linux specific | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Linkflags below this line should typically stay the last ones | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if not env["builtin_zlib"]: | 
					
						
							|  |  |  |         env.ParseConfig("pkg-config zlib --cflags --libs") | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |     env.Prepend(CPPPATH=["#platform/linuxbsd"]) | 
					
						
							|  |  |  |     if env["use_sowrap"]: | 
					
						
							|  |  |  |         env.Prepend(CPPPATH=["#thirdparty/linuxbsd_headers"]) | 
					
						
							| 
									
										
										
										
											2021-05-25 18:26:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-16 17:01:35 +01:00
										 |  |  |     env.Append( | 
					
						
							|  |  |  |         CPPDEFINES=[ | 
					
						
							|  |  |  |             "LINUXBSD_ENABLED", | 
					
						
							|  |  |  |             "UNIX_ENABLED", | 
					
						
							|  |  |  |             ("_FILE_OFFSET_BITS", 64), | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-05-25 18:26:38 +02:00
										 |  |  |     if env["x11"]: | 
					
						
							| 
									
										
										
										
											2023-02-15 14:13:56 +02:00
										 |  |  |         if not env["use_sowrap"]: | 
					
						
							|  |  |  |             if os.system("pkg-config --exists x11"): | 
					
						
							|  |  |  |                 print("Error: X11 libraries not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config x11 --cflags --libs") | 
					
						
							|  |  |  |             if os.system("pkg-config --exists xcursor"): | 
					
						
							|  |  |  |                 print("Error: Xcursor library not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xcursor --cflags --libs") | 
					
						
							|  |  |  |             if os.system("pkg-config --exists xinerama"): | 
					
						
							|  |  |  |                 print("Error: Xinerama library not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xinerama --cflags --libs") | 
					
						
							|  |  |  |             if os.system("pkg-config --exists xext"): | 
					
						
							|  |  |  |                 print("Error: Xext library not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xext --cflags --libs") | 
					
						
							|  |  |  |             if os.system("pkg-config --exists xrandr"): | 
					
						
							|  |  |  |                 print("Error: XrandR library not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xrandr --cflags --libs") | 
					
						
							|  |  |  |             if os.system("pkg-config --exists xrender"): | 
					
						
							|  |  |  |                 print("Error: XRender library not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xrender --cflags --libs") | 
					
						
							|  |  |  |             if os.system("pkg-config --exists xi"): | 
					
						
							|  |  |  |                 print("Error: Xi library not found. Aborting.") | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							|  |  |  |             env.ParseConfig("pkg-config xi --cflags --libs") | 
					
						
							| 
									
										
										
										
											2021-05-25 18:26:38 +02:00
										 |  |  |         env.Append(CPPDEFINES=["X11_ENABLED"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if env["vulkan"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["VULKAN_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2021-08-12 14:24:54 +03:00
										 |  |  |         if not env["use_volk"]: | 
					
						
							| 
									
										
										
										
											2021-05-25 18:26:38 +02:00
										 |  |  |             env.ParseConfig("pkg-config vulkan --cflags --libs") | 
					
						
							|  |  |  |         if not env["builtin_glslang"]: | 
					
						
							| 
									
										
										
										
											2022-04-26 09:34:49 +02:00
										 |  |  |             # No pkgconfig file so far, hardcode expected lib name. | 
					
						
							| 
									
										
										
										
											2021-05-25 18:26:38 +02:00
										 |  |  |             env.Append(LIBS=["glslang", "SPIRV"]) | 
					
						
							| 
									
										
										
										
											2019-07-12 16:18:30 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 03:42:15 +02:00
										 |  |  |     if env["opengl3"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["GLES3_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2019-06-22 19:34:26 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append(LIBS=["pthread"]) | 
					
						
							| 
									
										
										
										
											2017-01-08 17:13:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if platform.system() == "Linux": | 
					
						
							|  |  |  |         env.Append(LIBS=["dl"]) | 
					
						
							| 
									
										
										
										
											2014-10-07 01:31:49 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-06 04:20:54 +02:00
										 |  |  |     if not env["execinfo"] and platform.libc_ver()[0] != "glibc": | 
					
						
							|  |  |  |         # The default crash handler depends on glibc, so if the host uses | 
					
						
							|  |  |  |         # a different libc (BSD libc, musl), fall back to libexecinfo. | 
					
						
							|  |  |  |         print("Note: Using `execinfo=yes` for the crash handler as required on platforms where glibc is missing.") | 
					
						
							| 
									
										
										
										
											2022-10-11 21:45:29 +02:00
										 |  |  |         env["execinfo"] = True | 
					
						
							| 
									
										
										
										
											2018-07-22 19:03:36 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if env["execinfo"]: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LIBS=["execinfo"]) | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
											  
											
												SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
  * Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
  * Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
  * Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
  enables generating debug symbols, does not define `NDEBUG` so `assert()`
  works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
											
										 
											2022-09-22 08:28:55 +02:00
										 |  |  |     if not env.editor_build: | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  |         import subprocess | 
					
						
							|  |  |  |         import re | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-26 14:06:56 +02:00
										 |  |  |         linker_version_str = subprocess.check_output( | 
					
						
							|  |  |  |             [env.subst(env["LINK"]), "-Wl,--version"] + env.subst(env["LINKFLAGS"]) | 
					
						
							|  |  |  |         ).decode("utf-8") | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         gnu_ld_version = re.search("^GNU ld [^$]*(\d+\.\d+)$", linker_version_str, re.MULTILINE) | 
					
						
							| 
									
										
										
										
											2020-01-22 19:42:10 +01:00
										 |  |  |         if not gnu_ld_version: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             print( | 
					
						
							| 
									
										
										
										
											2023-02-13 10:55:23 +01:00
										 |  |  |                 "Warning: Creating export template binaries enabled for PCK embedding is currently only supported with GNU ld, not gold, LLD or mold." | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             ) | 
					
						
							| 
									
										
										
										
											2020-01-16 17:47:37 +01:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2020-01-22 19:42:10 +01:00
										 |  |  |             if float(gnu_ld_version.group(1)) >= 2.30: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |                 env.Append(LINKFLAGS=["-T", "platform/linuxbsd/pck_embed.ld"]) | 
					
						
							| 
									
										
										
										
											2020-01-22 19:42:10 +01:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |                 env.Append(LINKFLAGS=["-T", "platform/linuxbsd/pck_embed.legacy.ld"]) | 
					
						
							| 
									
										
										
										
											2017-10-17 16:50:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-03 11:46:29 +03:00
										 |  |  |     if platform.system() == "FreeBSD": | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-lkvm"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Cross-compilation | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     # TODO: Support cross-compilation on architectures other than x86. | 
					
						
							|  |  |  |     host_is_64_bit = sys.maxsize > 2**32 | 
					
						
							|  |  |  |     if host_is_64_bit and env["arch"] == "x86_32": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CCFLAGS=["-m32"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-m32", "-L/usr/lib/i386-linux-gnu"]) | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     elif not host_is_64_bit and env["arch"] == "x86_64": | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CCFLAGS=["-m64"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-m64", "-L/usr/lib/i686-linux-gnu"]) | 
					
						
							| 
									
										
										
										
											2014-02-26 14:25:42 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-16 18:24:46 +01:00
										 |  |  |     # Link those statically for portability | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["use_static_cpp"]: | 
					
						
							| 
									
										
										
										
											2021-04-26 13:34:35 +02:00
										 |  |  |         env.Append(LINKFLAGS=["-static-libgcc", "-static-libstdc++"]) | 
					
						
							| 
									
										
										
										
											2021-10-29 18:24:57 +02:00
										 |  |  |         if env["use_llvm"] and platform.system() != "FreeBSD": | 
					
						
							| 
									
										
										
										
											2021-02-23 14:51:44 +01:00
										 |  |  |             env["LINKCOM"] = env["LINKCOM"] + " -l:libatomic.a" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     else: | 
					
						
							| 
									
										
										
										
											2021-10-29 18:24:57 +02:00
										 |  |  |         if env["use_llvm"] and platform.system() != "FreeBSD": | 
					
						
							| 
									
										
										
										
											2021-02-23 14:51:44 +01:00
										 |  |  |             env.Append(LIBS=["atomic"]) |