| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2022-08-23 22:21:46 +09:00
										 |  |  | from typing import TYPE_CHECKING | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-28 08:28:33 +03:00
										 |  |  | from methods import detect_darwin_sdk_path, get_compiler_version, is_vanilla_clang, print_error, print_warning | 
					
						
							| 
									
										
										
										
											2024-09-27 21:36:52 +03:00
										 |  |  | from platform_methods import detect_arch, detect_mvk, validate_arch | 
					
						
							| 
									
										
										
										
											2024-05-21 15:14:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-23 22:21:46 +09:00
										 |  |  | if TYPE_CHECKING: | 
					
						
							| 
									
										
										
										
											2023-11-24 13:31:05 -06:00
										 |  |  |     from SCons.Script.SConscript import SConsEnvironment | 
					
						
							| 
									
										
										
										
											2022-08-23 22:21:46 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-15 14:13:31 -03:00
										 |  |  | # To match other platforms | 
					
						
							|  |  |  | STACK_SIZE = 8388608 | 
					
						
							|  |  |  | STACK_SIZE_SANITIZERS = 30 * 1024 * 1024 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | def get_name(): | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  |     return "macOS" | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def can_build(): | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if sys.platform == "darwin" or ("OSXCROSS_ROOT" in os.environ): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |         return True | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return False | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_opts(): | 
					
						
							| 
									
										
										
										
											2018-01-26 22:39:08 +02:00
										 |  |  |     from SCons.Variables import BoolVariable, EnumVariable | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2020-07-20 20:30:40 +02:00
										 |  |  |         ("osxcross_sdk", "OSXCross SDK version", "darwin16"), | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ("MACOS_SDK_PATH", "Path to the macOS SDK", ""), | 
					
						
							| 
									
										
										
										
											2022-07-03 15:58:07 +03:00
										 |  |  |         ("vulkan_sdk_path", "Path to the Vulkan SDK", ""), | 
					
						
							| 
									
										
										
										
											2020-12-16 16:29:32 +01:00
										 |  |  |         EnumVariable("macports_clang", "Build using Clang from MacPorts", "no", ("no", "5.0", "devel")), | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         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_tsan", "Use LLVM/GCC compiler thread sanitizer (TSAN)", False), | 
					
						
							| 
									
										
										
										
											2021-10-28 15:00:19 -07:00
										 |  |  |         BoolVariable("use_coverage", "Use instrumentation codes in the binary (e.g. for code coverage)", False), | 
					
						
							| 
									
										
										
										
											2021-11-12 14:49:49 +02:00
										 |  |  |         ("angle_libs", "Path to the ANGLE static libraries", ""), | 
					
						
							| 
									
										
										
										
											2023-12-11 20:50:44 +02:00
										 |  |  |         ( | 
					
						
							|  |  |  |             "bundle_sign_identity", | 
					
						
							|  |  |  |             "The 'Full Name', 'Common Name' or SHA-1 hash of the signing identity used to sign editor .app bundle.", | 
					
						
							|  |  |  |             "-", | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |         BoolVariable("generate_bundle", "Generate an APP bundle after building iOS/macOS binaries", False), | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-19 12:23:22 +03:00
										 |  |  | def get_doc_classes(): | 
					
						
							|  |  |  |     return [ | 
					
						
							|  |  |  |         "EditorExportPlatformMacOS", | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_doc_path(): | 
					
						
							|  |  |  |     return "doc_classes" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_flags(): | 
					
						
							| 
									
										
										
										
											2024-05-19 09:41:03 -05:00
										 |  |  |     return { | 
					
						
							|  |  |  |         "arch": detect_arch(), | 
					
						
							|  |  |  |         "use_volk": False, | 
					
						
							| 
									
										
										
										
											2024-02-20 05:52:00 +11:00
										 |  |  |         "metal": True, | 
					
						
							| 
									
										
										
										
											2024-08-21 08:58:18 +02:00
										 |  |  |         "supported": ["metal", "mono"], | 
					
						
							| 
									
										
										
										
											2024-05-19 09:41:03 -05:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-07-03 15:58:07 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-24 13:31:05 -06:00
										 |  |  | def configure(env: "SConsEnvironment"): | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     # Validate arch. | 
					
						
							|  |  |  |     supported_arches = ["x86_64", "arm64"] | 
					
						
							| 
									
										
										
										
											2024-09-27 21:36:52 +03:00
										 |  |  |     validate_arch(env["arch"], get_name(), supported_arches) | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +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["target"] == "template_release": | 
					
						
							| 
									
										
										
										
											2020-07-24 17:54:34 +03:00
										 |  |  |         if env["arch"] != "arm64": | 
					
						
							|  |  |  |             env.Prepend(CCFLAGS=["-msse2"]) | 
					
						
							| 
									
										
											  
											
												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
										 |  |  |     elif env.dev_build: | 
					
						
							| 
									
										
										
										
											2020-08-15 01:55:36 +01:00
										 |  |  |         env.Prepend(LINKFLAGS=["-Xlinker", "-no_deduplicate"]) | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-19 23:36:34 +01:00
										 |  |  |     ## Compiler configuration | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-22 12:31:43 +01:00
										 |  |  |     # Save this in environment for use by other modules | 
					
						
							|  |  |  |     if "OSXCROSS_ROOT" in os.environ: | 
					
						
							|  |  |  |         env["osxcross"] = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     # CPU architecture. | 
					
						
							| 
									
										
										
										
											2020-07-20 20:30:40 +02:00
										 |  |  |     if env["arch"] == "arm64": | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |         print("Building for macOS 11.0+.") | 
					
						
							| 
									
										
										
										
											2022-07-01 11:29:21 +03:00
										 |  |  |         env.Append(ASFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"]) | 
					
						
							| 
									
										
										
										
											2022-02-08 16:20:07 +01:00
										 |  |  |         env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=11.0"]) | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     elif env["arch"] == "x86_64": | 
					
						
							| 
									
										
										
										
											2023-04-24 10:52:50 +03:00
										 |  |  |         print("Building for macOS 10.13+.") | 
					
						
							|  |  |  |         env.Append(ASFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"]) | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.13"]) | 
					
						
							| 
									
										
										
										
											2020-06-23 22:01:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-23 08:52:40 +03:00
										 |  |  |     env.Append(CCFLAGS=["-ffp-contract=off"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-25 21:08:36 +02:00
										 |  |  |     cc_version = get_compiler_version(env) | 
					
						
							| 
									
										
										
										
											2023-11-22 09:05:45 +02:00
										 |  |  |     cc_version_major = cc_version["apple_major"] | 
					
						
							|  |  |  |     cc_version_minor = cc_version["apple_minor"] | 
					
						
							| 
									
										
										
										
											2023-09-20 11:03:44 +03:00
										 |  |  |     vanilla = is_vanilla_clang(env) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Workaround for Xcode 15 linker bug. | 
					
						
							| 
									
										
										
										
											2023-11-22 09:05:45 +02:00
										 |  |  |     if not vanilla and cc_version_major == 1500 and cc_version_minor == 0: | 
					
						
							| 
									
										
										
										
											2023-09-20 11:03:44 +03:00
										 |  |  |         env.Prepend(LINKFLAGS=["-ld_classic"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-25 10:07:01 +02:00
										 |  |  |     env.Append(CCFLAGS=["-fobjc-arc"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-21 15:14:59 +02:00
										 |  |  |     if "osxcross" not in env:  # regular native build | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["macports_clang"] != "no": | 
					
						
							| 
									
										
										
										
											2017-12-14 16:15:06 +02:00
										 |  |  |             mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local") | 
					
						
							| 
									
										
										
										
											2017-12-14 20:41:50 +02:00
										 |  |  |             mpclangver = env["macports_clang"] | 
					
						
							|  |  |  |             env["CC"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/clang" | 
					
						
							|  |  |  |             env["CXX"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/clang++" | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env["AR"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-ar" | 
					
						
							|  |  |  |             env["RANLIB"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-ranlib" | 
					
						
							|  |  |  |             env["AS"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-as" | 
					
						
							| 
									
										
										
										
											2019-10-24 17:34:18 +03:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env["CC"] = "clang" | 
					
						
							|  |  |  |             env["CXX"] = "clang++" | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  |         detect_darwin_sdk_path("macos", env) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CCFLAGS=["-isysroot", "$MACOS_SDK_PATH"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-isysroot", "$MACOS_SDK_PATH"]) | 
					
						
							| 
									
										
										
										
											2018-08-24 02:03:57 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     else:  # osxcross build | 
					
						
							| 
									
										
										
										
											2022-08-29 18:01:15 +09:00
										 |  |  |         root = os.environ.get("OSXCROSS_ROOT", "") | 
					
						
							| 
									
										
										
										
											2020-07-20 20:30:40 +02:00
										 |  |  |         if env["arch"] == "arm64": | 
					
						
							|  |  |  |             basecmd = root + "/target/bin/arm64-apple-" + env["osxcross_sdk"] + "-" | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             basecmd = root + "/target/bin/x86_64-apple-" + env["osxcross_sdk"] + "-" | 
					
						
							| 
									
										
										
										
											2015-09-03 23:24:55 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-09 20:07:28 -04:00
										 |  |  |         ccache_path = os.environ.get("CCACHE") | 
					
						
							| 
									
										
										
										
											2018-10-27 01:18:15 +02:00
										 |  |  |         if ccache_path is None: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env["CC"] = basecmd + "cc" | 
					
						
							|  |  |  |             env["CXX"] = basecmd + "c++" | 
					
						
							| 
									
										
										
										
											2017-11-09 20:07:28 -04:00
										 |  |  |         else: | 
					
						
							| 
									
										
										
										
											2023-03-12 16:48:52 +00:00
										 |  |  |             # there aren't any ccache wrappers available for macOS cross-compile, | 
					
						
							| 
									
										
										
										
											2017-11-09 20:07:28 -04:00
										 |  |  |             # to enable caching we need to prepend the path to the ccache binary | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             env["CC"] = ccache_path + " " + basecmd + "cc" | 
					
						
							|  |  |  |             env["CXX"] = ccache_path + " " + basecmd + "c++" | 
					
						
							|  |  |  |         env["AR"] = basecmd + "ar" | 
					
						
							|  |  |  |         env["RANLIB"] = basecmd + "ranlib" | 
					
						
							|  |  |  |         env["AS"] = basecmd + "as" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-21 15:15:54 +02:00
										 |  |  |     # LTO | 
					
						
							| 
									
										
										
										
											2022-09-13 17:01:47 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if env["lto"] == "auto":  # LTO benefits for macOS (size, performance) haven't been clearly established yet. | 
					
						
							|  |  |  |         env["lto"] = "none" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-21 15:15:54 +02:00
										 |  |  |     if env["lto"] != "none": | 
					
						
							|  |  |  |         if env["lto"] == "thin": | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-flto=thin"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-flto=thin"]) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-flto"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-flto"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-13 17:01:47 +02:00
										 |  |  |     # Sanitizers | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-16 00:08:02 +03:00
										 |  |  |     if env["use_ubsan"] or env["use_asan"] or env["use_tsan"]: | 
					
						
							| 
									
										
										
										
											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"]) | 
					
						
							| 
									
										
										
										
											2020-01-29 13:12:38 +08: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"]) | 
					
						
							| 
									
										
										
										
											2021-04-16 00:08:02 +03:00
										 |  |  |             env.Append(CCFLAGS=["-fsanitize=nullability-return,nullability-arg,function,nullability-assign"]) | 
					
						
							| 
									
										
										
										
											2020-01-29 13:12:38 +08: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"]) | 
					
						
							| 
									
										
										
										
											2020-01-29 13:12:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         if env["use_tsan"]: | 
					
						
							|  |  |  |             env.Append(CCFLAGS=["-fsanitize=thread"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-fsanitize=thread"]) | 
					
						
							| 
									
										
										
										
											2020-01-29 13:12:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-15 14:13:31 -03:00
										 |  |  |         env.Append(LINKFLAGS=["-Wl,-stack_size," + hex(STACK_SIZE_SANITIZERS)]) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-Wl,-stack_size," + hex(STACK_SIZE)]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-28 15:00:19 -07:00
										 |  |  |     if env["use_coverage"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-ftest-coverage", "-fprofile-arcs"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-ftest-coverage", "-fprofile-arcs"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Dependencies | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-15 17:38:10 -08:00
										 |  |  |     if env["builtin_libtheora"] and env["arch"] == "x86_64": | 
					
						
							|  |  |  |         env["x86_libtheora_opt_gcc"] = True | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     ## Flags | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 09:28:22 +03:00
										 |  |  |     env.Prepend(CPPPATH=["#platform/macos"]) | 
					
						
							| 
									
										
										
										
											2022-09-02 12:37:48 +03:00
										 |  |  |     env.Append(CPPDEFINES=["MACOS_ENABLED", "UNIX_ENABLED", "COREAUDIO_ENABLED", "COREMIDI_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append( | 
					
						
							|  |  |  |         LINKFLAGS=[ | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "Cocoa", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "Carbon", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "AudioUnit", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "CoreAudio", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "CoreMIDI", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "IOKit", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							| 
									
										
										
										
											2023-08-16 02:42:12 -06:00
										 |  |  |             "GameController", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "CoreHaptics", | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |             "-framework", | 
					
						
							|  |  |  |             "CoreVideo", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "AVFoundation", | 
					
						
							|  |  |  |             "-framework", | 
					
						
							|  |  |  |             "CoreMedia", | 
					
						
							| 
									
										
										
										
											2022-10-25 22:20:54 +03:00
										 |  |  |             "-framework", | 
					
						
							|  |  |  |             "QuartzCore", | 
					
						
							| 
									
										
										
										
											2023-04-13 21:17:55 +02:00
										 |  |  |             "-framework", | 
					
						
							|  |  |  |             "Security", | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ] | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     env.Append(LIBS=["pthread", "z"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-02 12:27:38 +02:00
										 |  |  |     if env["opengl3"]: | 
					
						
							| 
									
										
										
										
											2023-01-21 00:20:30 +02:00
										 |  |  |         env.Append(CPPDEFINES=["GLES3_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2021-11-12 14:49:49 +02:00
										 |  |  |         if env["angle_libs"] != "": | 
					
						
							|  |  |  |             env.AppendUnique(CPPDEFINES=["EGL_STATIC"]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-L" + env["angle_libs"]]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-lANGLE.macos." + env["arch"]]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-lEGL.macos." + env["arch"]]) | 
					
						
							|  |  |  |             env.Append(LINKFLAGS=["-lGLES.macos." + env["arch"]]) | 
					
						
							|  |  |  |         env.Prepend(CPPPATH=["#thirdparty/angle/include"]) | 
					
						
							| 
									
										
										
										
											2021-11-02 12:27:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-26 11:01:27 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-rpath", "@executable_path/../Frameworks", "-rpath", "@executable_path"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-20 05:52:00 +11:00
										 |  |  |     if env["metal"] and env["arch"] != "arm64": | 
					
						
							| 
									
										
										
										
											2024-09-28 08:28:33 +03:00
										 |  |  |         print_warning("Target architecture '{}' does not support the Metal rendering driver".format(env["arch"])) | 
					
						
							| 
									
										
										
										
											2024-02-20 05:52:00 +11:00
										 |  |  |         env["metal"] = False | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     extra_frameworks = set() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if env["metal"]: | 
					
						
							|  |  |  |         env.AppendUnique(CPPDEFINES=["METAL_ENABLED", "RD_ENABLED"]) | 
					
						
							|  |  |  |         extra_frameworks.add("Metal") | 
					
						
							|  |  |  |         extra_frameworks.add("MetalKit") | 
					
						
							|  |  |  |         env.Prepend(CPPPATH=["#thirdparty/spirv-cross"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-12 14:24:54 +03:00
										 |  |  |     if env["vulkan"]: | 
					
						
							| 
									
										
										
										
											2024-02-20 05:52:00 +11:00
										 |  |  |         env.AppendUnique(CPPDEFINES=["VULKAN_ENABLED", "RD_ENABLED"]) | 
					
						
							|  |  |  |         extra_frameworks.add("Metal") | 
					
						
							|  |  |  |         extra_frameworks.add("IOSurface") | 
					
						
							| 
									
										
										
										
											2021-08-12 14:24:54 +03:00
										 |  |  |         if not env["use_volk"]: | 
					
						
							| 
									
										
										
										
											2022-07-03 15:58:07 +03:00
										 |  |  |             env.Append(LINKFLAGS=["-lMoltenVK"]) | 
					
						
							| 
									
										
										
										
											2024-03-09 20:21:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             mvk_path = "" | 
					
						
							|  |  |  |             arch_variants = ["macos-arm64_x86_64", "macos-" + env["arch"]] | 
					
						
							|  |  |  |             for arch in arch_variants: | 
					
						
							|  |  |  |                 mvk_path = detect_mvk(env, arch) | 
					
						
							|  |  |  |                 if mvk_path != "": | 
					
						
							|  |  |  |                     mvk_path = os.path.join(mvk_path, arch) | 
					
						
							|  |  |  |                     break | 
					
						
							| 
									
										
										
										
											2022-11-15 11:38:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-11 20:50:44 +02:00
										 |  |  |             if mvk_path != "": | 
					
						
							| 
									
										
										
										
											2024-03-09 20:21:17 +01:00
										 |  |  |                 env.Append(LINKFLAGS=["-L" + mvk_path]) | 
					
						
							| 
									
										
										
										
											2023-12-11 20:50:44 +02:00
										 |  |  |             else: | 
					
						
							| 
									
										
										
										
											2024-04-26 12:35:07 -05:00
										 |  |  |                 print_error( | 
					
						
							| 
									
										
										
										
											2022-07-03 15:58:07 +03:00
										 |  |  |                     "MoltenVK SDK installation directory not found, use 'vulkan_sdk_path' SCons parameter to specify SDK path." | 
					
						
							|  |  |  |                 ) | 
					
						
							|  |  |  |                 sys.exit(255) | 
					
						
							| 
									
										
										
										
											2024-02-20 05:52:00 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if len(extra_frameworks) > 0: | 
					
						
							|  |  |  |         frameworks = [item for key in extra_frameworks for item in ["-framework", key]] | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=frameworks) |