| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-25 04:48:11 +01:00
										 |  |  | from emscripten_helpers import ( | 
					
						
							|  |  |  |     run_closure_compiler, | 
					
						
							|  |  |  |     create_engine_file, | 
					
						
							|  |  |  |     add_js_libraries, | 
					
						
							|  |  |  |     add_js_pre, | 
					
						
							|  |  |  |     add_js_externs, | 
					
						
							|  |  |  |     get_build_version, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  | from methods import get_compiler_version | 
					
						
							| 
									
										
										
										
											2020-10-03 15:46:52 +02:00
										 |  |  | from SCons.Util import WhereIs | 
					
						
							| 
									
										
										
										
											2016-10-30 19:05:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-08 16:55:01 +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-30 08:28:32 +02:00
										 |  |  |     return "JavaScript" | 
					
						
							| 
									
										
										
										
											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-10-03 15:46:52 +02:00
										 |  |  |     return WhereIs("emcc") is not None | 
					
						
							| 
									
										
										
										
											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(): | 
					
						
							| 
									
										
										
										
											2017-09-25 00:37:17 -04:00
										 |  |  |     from SCons.Variables import BoolVariable | 
					
						
							| 
									
										
										
										
											2020-05-08 16:55:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |         ("initial_memory", "Initial WASM memory (in MiB)", 16), | 
					
						
							| 
									
										
										
										
											2020-12-10 13:57:27 +01:00
										 |  |  |         BoolVariable("use_assertions", "Use Emscripten runtime assertions", False), | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |         BoolVariable("use_thinlto", "Use ThinLTO", False), | 
					
						
							| 
									
										
										
										
											2020-12-10 13:57:27 +01:00
										 |  |  |         BoolVariable("use_ubsan", "Use Emscripten undefined behavior sanitizer (UBSAN)", False), | 
					
						
							|  |  |  |         BoolVariable("use_asan", "Use Emscripten address sanitizer (ASAN)", False), | 
					
						
							|  |  |  |         BoolVariable("use_lsan", "Use Emscripten leak sanitizer (LSAN)", False), | 
					
						
							|  |  |  |         BoolVariable("use_safe_heap", "Use Emscripten SAFE_HEAP sanitizer", False), | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  |         # eval() can be a security concern, so it can be disabled. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         BoolVariable("javascript_eval", "Enable JavaScript eval interface", True), | 
					
						
							|  |  |  |         BoolVariable("threads_enabled", "Enable WebAssembly Threads support (limited browser support)", False), | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |         BoolVariable("gdnative_enabled", "Enable WebAssembly GDNative support (produces bigger binaries)", False), | 
					
						
							| 
									
										
										
										
											2020-05-01 14:45:45 +02:00
										 |  |  |         BoolVariable("use_closure_compiler", "Use closure compiler to minimize JavaScript code", 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | def get_flags(): | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     return [ | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ("tools", False), | 
					
						
							|  |  |  |         ("builtin_pcre2_with_jit", False), | 
					
						
							| 
									
										
										
										
											2018-02-08 22:00:55 +01:00
										 |  |  |         # Disabling the mbedtls module reduces file size. | 
					
						
							| 
									
										
										
										
											2018-01-25 09:07:07 +01:00
										 |  |  |         # The module has little use due to the limited networking functionality | 
					
						
							|  |  |  |         # in this platform. For the available networking methods, the browser | 
					
						
							|  |  |  |         # manages TLS. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         ("module_mbedtls_enabled", False), | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def configure(env): | 
					
						
							| 
									
										
										
										
											2021-01-28 19:23:49 +00:00
										 |  |  |     try: | 
					
						
							|  |  |  |         env["initial_memory"] = int(env["initial_memory"]) | 
					
						
							|  |  |  |     except Exception: | 
					
						
							|  |  |  |         print("Initial memory must be a valid integer") | 
					
						
							|  |  |  |         sys.exit(255) | 
					
						
							| 
									
										
										
										
											2016-06-14 11:27:16 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  |     ## Build type | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["target"] == "release": | 
					
						
							| 
									
										
										
										
											2018-01-07 00:13:04 +01:00
										 |  |  |         # Use -Os to prioritize optimizing for reduced file size. This is | 
					
						
							|  |  |  |         # particularly valuable for the web platform because it directly | 
					
						
							|  |  |  |         # decreases download time. | 
					
						
							|  |  |  |         # -Os reduces file size by around 5 MiB over -O3. -Oz only saves about | 
					
						
							|  |  |  |         # 100 KiB over -Os, which does not justify the negative impact on | 
					
						
							|  |  |  |         # run-time performance. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CCFLAGS=["-Os"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-Os"]) | 
					
						
							|  |  |  |     elif env["target"] == "release_debug": | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-Os"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-Os"]) | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["DEBUG_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |         # Retain function names for backtraces at the cost of file size. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LINKFLAGS=["--profiling-funcs"]) | 
					
						
							| 
									
										
										
										
											2020-05-08 16:55:01 +02:00
										 |  |  |     else:  # "debug" | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CPPDEFINES=["DEBUG_ENABLED"]) | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-O1", "-g"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-O1", "-g"]) | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |         env["use_assertions"] = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if env["use_assertions"]: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LINKFLAGS=["-s", "ASSERTIONS=1"]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if env["tools"]: | 
					
						
							|  |  |  |         if not env["threads_enabled"]: | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |             print("Threads must be enabled to build the editor. Please add the 'threads_enabled=yes' option") | 
					
						
							|  |  |  |             sys.exit(255) | 
					
						
							| 
									
										
										
										
											2021-02-15 16:40:44 +01:00
										 |  |  |         if env["initial_memory"] < 64: | 
					
						
							|  |  |  |             print("Editor build requires at least 64MiB of initial memory. Forcing it.") | 
					
						
							|  |  |  |             env["initial_memory"] = 64 | 
					
						
							| 
									
										
										
										
											2020-08-11 12:10:23 +03:00
										 |  |  |     elif env["builtin_icu"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-frtti"]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     else: | 
					
						
							|  |  |  |         # Disable exceptions and rtti on non-tools (template) builds | 
					
						
							|  |  |  |         # These flags help keep the file size down. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CCFLAGS=["-fno-exceptions", "-fno-rtti"]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |         # Don't use dynamic_cast, necessary with no-rtti. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CPPDEFINES=["NO_SAFE_CAST"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "INITIAL_MEMORY=%sMB" % env["initial_memory"]]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     ## Copy env variables. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["ENV"] = os.environ | 
					
						
							| 
									
										
										
										
											2018-03-28 06:10:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     # LTO | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |     if env["use_thinlto"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-flto=thin"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-flto=thin"]) | 
					
						
							|  |  |  |     elif env["use_lto"]: | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |         env.Append(CCFLAGS=["-flto=full"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-flto=full"]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |     # Sanitizers | 
					
						
							|  |  |  |     if env["use_ubsan"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-fsanitize=undefined"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-fsanitize=undefined"]) | 
					
						
							|  |  |  |     if env["use_asan"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-fsanitize=address"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-fsanitize=address"]) | 
					
						
							|  |  |  |     if env["use_lsan"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-fsanitize=leak"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-fsanitize=leak"]) | 
					
						
							|  |  |  |     if env["use_safe_heap"]: | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-s", "SAFE_HEAP=1"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-s", "SAFE_HEAP=1"]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     # Closure compiler | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["use_closure_compiler"]: | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |         # For emscripten support code. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LINKFLAGS=["--closure", "1"]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |         # Register builder for our Engine files | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         jscc = env.Builder(generator=run_closure_compiler, suffix=".cc.js", src_suffix=".js") | 
					
						
							|  |  |  |         env.Append(BUILDERS={"BuildJS": jscc}) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-10 12:19:35 +01:00
										 |  |  |     # Add helper method for adding libraries, externs, pre-js. | 
					
						
							|  |  |  |     env["JS_LIBS"] = [] | 
					
						
							|  |  |  |     env["JS_PRE"] = [] | 
					
						
							|  |  |  |     env["JS_EXTERNS"] = [] | 
					
						
							| 
									
										
										
										
											2020-10-23 18:33:20 +02:00
										 |  |  |     env.AddMethod(add_js_libraries, "AddJSLibraries") | 
					
						
							| 
									
										
										
										
											2020-09-26 17:15:21 -05:00
										 |  |  |     env.AddMethod(add_js_pre, "AddJSPre") | 
					
						
							|  |  |  |     env.AddMethod(add_js_externs, "AddJSExterns") | 
					
						
							| 
									
										
										
										
											2020-10-23 18:33:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-25 04:48:11 +01:00
										 |  |  |     # Add method for getting build version string. | 
					
						
							|  |  |  |     env.AddMethod(get_build_version, "GetBuildVersion") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     # Add method that joins/compiles our Engine files. | 
					
						
							|  |  |  |     env.AddMethod(create_engine_file, "CreateEngineFile") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Closure compiler extern and support for ecmascript specs (const, let, etc). | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["ENV"]["EMCC_CLOSURE_ARGS"] = "--language_in ECMASCRIPT6" | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["CC"] = "emcc" | 
					
						
							|  |  |  |     env["CXX"] = "em++" | 
					
						
							| 
									
										
										
										
											2015-03-20 07:47:06 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["AR"] = "emar" | 
					
						
							|  |  |  |     env["RANLIB"] = "emranlib" | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # Use TempFileMunge since some AR invocations are too long for cmd.exe. | 
					
						
							|  |  |  |     # Use POSIX-style paths, required with TempFileMunge. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["ARCOM_POSIX"] = env["ARCOM"].replace("$TARGET", "$TARGET.posix").replace("$SOURCES", "$SOURCES.posix") | 
					
						
							|  |  |  |     env["ARCOM"] = "${TEMPFILE(ARCOM_POSIX)}" | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # All intermediate files are just LLVM bitcode. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["OBJPREFIX"] = "" | 
					
						
							|  |  |  |     env["OBJSUFFIX"] = ".bc" | 
					
						
							|  |  |  |     env["PROGPREFIX"] = "" | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  |     # Program() output consists of multiple files, so specify suffixes manually at builder. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env["PROGSUFFIX"] = "" | 
					
						
							|  |  |  |     env["LIBPREFIX"] = "lib" | 
					
						
							|  |  |  |     env["LIBSUFFIX"] = ".bc" | 
					
						
							|  |  |  |     env["LIBPREFIXES"] = ["$LIBPREFIX"] | 
					
						
							|  |  |  |     env["LIBSUFFIXES"] = ["$LIBSUFFIX"] | 
					
						
							| 
									
										
										
										
											2015-03-20 07:47:06 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Prepend(CPPPATH=["#platform/javascript"]) | 
					
						
							|  |  |  |     env.Append(CPPDEFINES=["JAVASCRIPT_ENABLED", "UNIX_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2016-10-30 18:44:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["javascript_eval"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["JAVASCRIPT_EVAL_ENABLED"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |     if env["threads_enabled"] and env["gdnative_enabled"]: | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |         print("Threads and GDNative support can't be both enabled due to WebAssembly limitations") | 
					
						
							|  |  |  |         sys.exit(255) | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     # Thread support (via SharedArrayBuffer). | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     if env["threads_enabled"]: | 
					
						
							|  |  |  |         env.Append(CPPDEFINES=["PTHREAD_NO_RENAME"]) | 
					
						
							|  |  |  |         env.Append(CCFLAGS=["-s", "USE_PTHREADS=1"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-s", "USE_PTHREADS=1"]) | 
					
						
							| 
									
										
										
										
											2020-10-12 15:53:53 +02:00
										 |  |  |         env.Append(LINKFLAGS=["-s", "PTHREAD_POOL_SIZE=8"]) | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(LINKFLAGS=["-s", "WASM_MEM_MAX=2048MB"]) | 
					
						
							| 
									
										
										
										
											2020-09-30 19:13:59 +02:00
										 |  |  |         env.extra_suffix = ".threads" + env.extra_suffix | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |         env.Append(CPPDEFINES=["NO_THREADS"]) | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |     if env["gdnative_enabled"]: | 
					
						
							| 
									
										
										
										
											2020-12-07 18:50:27 +01:00
										 |  |  |         major, minor, patch = get_compiler_version(env) | 
					
						
							|  |  |  |         if major < 2 or (major == 2 and minor == 0 and patch < 10): | 
					
						
							|  |  |  |             print("GDNative support requires emscripten >= 2.0.10, detected: %s.%s.%s" % (major, minor, patch)) | 
					
						
							|  |  |  |             sys.exit(255) | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |         env.Append(CCFLAGS=["-s", "RELOCATABLE=1"]) | 
					
						
							|  |  |  |         env.Append(LINKFLAGS=["-s", "RELOCATABLE=1"]) | 
					
						
							|  |  |  |         env.extra_suffix = ".gdnative" + env.extra_suffix | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-11 11:55:28 +01:00
										 |  |  |     # Reduce code size by generating less support code (e.g. skip NodeJS support). | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "ENVIRONMENT=web,worker"]) | 
					
						
							| 
									
										
										
										
											2017-06-30 19:21:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |     # Wrap the JavaScript support code around a closure named Godot. | 
					
						
							| 
									
										
										
										
											2020-05-01 14:45:45 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "MODULARIZE=1", "-s", "EXPORT_NAME='Godot'"]) | 
					
						
							| 
									
										
										
										
											2019-12-02 14:10:46 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  |     # Allow increasing memory buffer size during runtime. This is efficient | 
					
						
							|  |  |  |     # when using WebAssembly (in comparison to asm.js) and works well for | 
					
						
							|  |  |  |     # us since we don't know requirements at compile-time. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "ALLOW_MEMORY_GROWTH=1"]) | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"]) | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |     # Do not call main immediately when the support code is ready. | 
					
						
							| 
									
										
										
										
											2020-03-30 08:28:32 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "INVOKE_RUN=0"]) | 
					
						
							| 
									
										
										
										
											2018-03-21 15:51:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-01 14:45:45 +02:00
										 |  |  |     # Allow use to take control of swapping WebGL buffers. | 
					
						
							|  |  |  |     env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"]) | 
					
						
							| 
									
										
										
										
											2020-05-01 14:36:41 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  |     # callMain for manual start. | 
					
						
							| 
									
										
										
										
											2021-02-16 01:04:44 -08:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "EXTRA_EXPORTED_RUNTIME_METHODS=['callMain','cwrap']"]) | 
					
						
							| 
									
										
										
										
											2020-10-24 16:02:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-01 14:36:41 +02:00
										 |  |  |     # Add code that allow exiting runtime. | 
					
						
							| 
									
										
										
										
											2020-05-01 14:45:45 +02:00
										 |  |  |     env.Append(LINKFLAGS=["-s", "EXIT_RUNTIME=1"]) | 
					
						
							| 
									
										
										
										
											2021-02-15 16:40:44 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # TODO remove once we have GLES support back (temporary fix undefined symbols due to dead code elimination). | 
					
						
							|  |  |  |     env.Append( | 
					
						
							|  |  |  |         LINKFLAGS=[ | 
					
						
							|  |  |  |             "-s", | 
					
						
							|  |  |  |             "EXPORTED_FUNCTIONS=['_main', '_emscripten_webgl_get_current_context', '_emscripten_webgl_commit_frame', '_emscripten_webgl_create_context']", | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |     ) |