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,
|
2021-03-08 15:39:14 +01:00
|
|
|
create_template_zip,
|
2021-01-25 04:48:11 +01:00
|
|
|
)
|
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
|
2022-08-23 22:21:46 +09:00
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
from SCons import Environment
|
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 get_name():
|
2022-08-28 20:27:45 +02:00
|
|
|
return "Web"
|
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 [
|
2021-06-14 07:57:28 +02:00
|
|
|
("initial_memory", "Initial WASM memory (in MiB)", 32),
|
2020-12-10 13:57:27 +01:00
|
|
|
BoolVariable("use_assertions", "Use Emscripten runtime assertions", False),
|
|
|
|
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),
|
2022-08-29 15:56:28 +02:00
|
|
|
BoolVariable(
|
|
|
|
"dlink_enabled", "Enable WebAssembly dynamic linking (GDExtension 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
|
|
|
|
2023-04-19 12:23:22 +03:00
|
|
|
def get_doc_classes():
|
|
|
|
return [
|
|
|
|
"EditorExportPlatformWeb",
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def get_doc_path():
|
|
|
|
return "doc_classes"
|
|
|
|
|
|
|
|
|
2014-02-09 22:10:30 -03:00
|
|
|
def get_flags():
|
2016-10-30 18:44:57 +01:00
|
|
|
return [
|
2021-12-15 17:38:10 -08:00
|
|
|
("arch", "wasm32"),
|
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
|
|
|
("target", "template_debug"),
|
2020-03-30 08:28:32 +02:00
|
|
|
("builtin_pcre2_with_jit", False),
|
2021-05-25 18:26:38 +02:00
|
|
|
("vulkan", False),
|
2023-09-16 00:21:31 +02:00
|
|
|
# Embree is heavy and requires too much memory (GH-70621).
|
|
|
|
("module_raycast_enabled", False),
|
2022-08-29 15:56:28 +02: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.
|
|
|
|
("optimize", "size"),
|
SCons: Re-disable exceptions for Android, iOS, and Web
We made a mistake when cherry-picking #80612 with 269b115d9cff1ad1bf1cd8675cd26c8a24065c89,
where the global flag was defaulted to false to preserve the 4.1-stable behavior for desktop
platforms, but we forgot that the refactoring removed the force disabling of exceptions for
Android, iOS, and Web.
This reintroduces this behavior so it should be back to the same as in 4.1/4.1.1, and the
export templates should get back to their original size.
Only difference, the old code used to keep exceptions for the Web editor, but I see no reason
for it, so I disable them like with the templates.
2023-11-01 22:14:49 +01:00
|
|
|
("disable_exceptions", True), # Reduces size.
|
2016-10-30 18:44:57 +01: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 = ["wasm32"]
|
|
|
|
if env["arch"] not in supported_arches:
|
|
|
|
print(
|
|
|
|
'Unsupported CPU architecture "%s" for iOS. Supported architectures are: %s.'
|
|
|
|
% (env["arch"], ", ".join(supported_arches))
|
|
|
|
)
|
|
|
|
sys.exit()
|
|
|
|
|
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
|
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.debug_features:
|
|
|
|
# Retain function names for backtraces at the cost of file size.
|
|
|
|
env.Append(LINKFLAGS=["--profiling-funcs"])
|
|
|
|
else:
|
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"])
|
|
|
|
|
2023-08-14 13:02:40 +02:00
|
|
|
if env.editor_build and env["initial_memory"] < 64:
|
|
|
|
print('Note: Forcing "initial_memory=64" as it is required for the web editor.')
|
|
|
|
env["initial_memory"] = 64
|
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
|
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":
|
|
|
|
env.Append(CCFLAGS=["-flto=thin"])
|
|
|
|
env.Append(LINKFLAGS=["-flto=thin"])
|
|
|
|
else:
|
|
|
|
env.Append(CCFLAGS=["-flto"])
|
|
|
|
env.Append(LINKFLAGS=["-flto"])
|
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(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
|
|
|
|
2020-03-11 11:55:28 +01:00
|
|
|
# Add method that joins/compiles our Engine files.
|
|
|
|
env.AddMethod(create_engine_file, "CreateEngineFile")
|
|
|
|
|
2021-03-08 15:39:14 +01:00
|
|
|
# Add method for creating the final zip file
|
|
|
|
env.AddMethod(create_template_zip, "CreateTemplateZip")
|
|
|
|
|
2020-03-11 11:55:28 +01:00
|
|
|
# Closure compiler extern and support for ecmascript specs (const, let, etc).
|
2024-02-06 09:19:07 +01:00
|
|
|
env["ENV"]["EMCC_CLOSURE_ARGS"] = "--language_in ECMASCRIPT_2021"
|
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
|
|
|
|
2022-08-29 15:56:28 +02:00
|
|
|
# All intermediate files are just object files.
|
2020-03-30 08:28:32 +02:00
|
|
|
env["OBJPREFIX"] = ""
|
2022-08-29 15:56:28 +02:00
|
|
|
env["OBJSUFFIX"] = ".o"
|
2020-03-30 08:28:32 +02:00
|
|
|
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"
|
2021-04-29 16:46:36 +02:00
|
|
|
env["LIBSUFFIX"] = ".a"
|
2020-03-30 08:28:32 +02:00
|
|
|
env["LIBPREFIXES"] = ["$LIBPREFIX"]
|
|
|
|
env["LIBSUFFIXES"] = ["$LIBSUFFIX"]
|
2015-03-20 07:47:06 +05:30
|
|
|
|
2022-08-28 20:27:45 +02:00
|
|
|
env.Prepend(CPPPATH=["#platform/web"])
|
|
|
|
env.Append(CPPDEFINES=["WEB_ENABLED", "UNIX_ENABLED"])
|
2016-10-30 18:44:57 +01:00
|
|
|
|
2024-02-05 11:42:28 -05:00
|
|
|
# Get version info for checks below.
|
|
|
|
cc_version = get_compiler_version(env)
|
|
|
|
cc_semver = (cc_version["major"], cc_version["minor"], cc_version["patch"])
|
|
|
|
|
2021-10-25 19:16:40 +02:00
|
|
|
if env["opengl3"]:
|
|
|
|
env.AppendUnique(CPPDEFINES=["GLES3_ENABLED"])
|
|
|
|
# This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1.
|
|
|
|
env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"])
|
|
|
|
# Allow use to take control of swapping WebGL buffers.
|
|
|
|
env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"])
|
2024-02-05 11:42:28 -05:00
|
|
|
# Breaking change since emscripten 3.1.51
|
|
|
|
# https://github.com/emscripten-core/emscripten/blob/main/ChangeLog.md#3151---121323
|
|
|
|
if cc_semver >= (3, 1, 51):
|
|
|
|
# Enables the use of *glGetProcAddress()
|
|
|
|
env.Append(LINKFLAGS=["-s", "GL_ENABLE_GET_PROC_ADDRESS=1"])
|
2021-10-25 19:16:40 +02: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-03-11 11:55:28 +01:00
|
|
|
# Thread support (via SharedArrayBuffer).
|
2022-08-29 15:56:28 +02:00
|
|
|
env.Append(CPPDEFINES=["PTHREAD_NO_RENAME"])
|
|
|
|
env.Append(CCFLAGS=["-s", "USE_PTHREADS=1"])
|
|
|
|
env.Append(LINKFLAGS=["-s", "USE_PTHREADS=1"])
|
|
|
|
env.Append(LINKFLAGS=["-s", "PTHREAD_POOL_SIZE=8"])
|
|
|
|
env.Append(LINKFLAGS=["-s", "WASM_MEM_MAX=2048MB"])
|
2020-03-11 11:55:28 +01:00
|
|
|
|
2023-09-18 16:32:13 +02:00
|
|
|
if env["lto"] != "none":
|
|
|
|
# Workaround https://github.com/emscripten-core/emscripten/issues/19781.
|
|
|
|
if cc_semver >= (3, 1, 42) and cc_semver < (3, 1, 46):
|
|
|
|
env.Append(LINKFLAGS=["-Wl,-u,scalbnf"])
|
2024-02-04 15:24:24 -05:00
|
|
|
# Workaround https://github.com/emscripten-core/emscripten/issues/16836.
|
|
|
|
if cc_semver >= (3, 1, 47):
|
|
|
|
env.Append(LINKFLAGS=["-Wl,-u,_emscripten_run_callback_on_thread"])
|
2023-09-18 16:32:13 +02:00
|
|
|
|
2022-08-29 15:56:28 +02:00
|
|
|
if env["dlink_enabled"]:
|
|
|
|
if cc_semver < (3, 1, 14):
|
|
|
|
print("GDExtension support requires emscripten >= 3.1.14, detected: %s.%s.%s" % cc_semver)
|
2020-12-07 18:50:27 +01:00
|
|
|
sys.exit(255)
|
2022-06-14 22:23:20 +07:00
|
|
|
|
2022-08-29 15:56:28 +02:00
|
|
|
env.Append(CCFLAGS=["-s", "SIDE_MODULE=2"])
|
|
|
|
env.Append(LINKFLAGS=["-s", "SIDE_MODULE=2"])
|
|
|
|
env.extra_suffix = ".dlink" + env.extra_suffix
|
2020-10-24 16:02:09 +02:00
|
|
|
|
2024-02-20 08:19:56 -05:00
|
|
|
# WASM_BIGINT is needed since emscripten ≥ 3.1.41
|
|
|
|
if cc_semver >= (3, 1, 41):
|
|
|
|
env.Append(LINKFLAGS=["-s", "WASM_BIGINT"])
|
|
|
|
|
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
|
|
|
|
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
|
|
|
|
2021-04-29 16:46:36 +02:00
|
|
|
# callMain for manual start, cwrap for the mono version.
|
|
|
|
env.Append(LINKFLAGS=["-s", "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"])
|
2022-09-08 09:44:14 +02:00
|
|
|
|
|
|
|
# This workaround creates a closure that prevents the garbage collector from freeing the WebGL context.
|
|
|
|
# We also only use WebGL2, and changing context version is not widely supported anyway.
|
|
|
|
env.Append(LINKFLAGS=["-s", "GL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0"])
|