f958f00283
Update export names (web[_dlink]_[release|debug].zip). The Build with dynamic linking is broken due to high number of imports in output wasm (likely emscripten regression issue 15487).
88 lines
3.1 KiB
Python
88 lines
3.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import("env")
|
|
|
|
web_files = [
|
|
"audio_driver_web.cpp",
|
|
"display_server_web.cpp",
|
|
"http_client_web.cpp",
|
|
"javascript_singleton.cpp",
|
|
"web_main.cpp",
|
|
"os_web.cpp",
|
|
"api/web_tools_editor_plugin.cpp",
|
|
]
|
|
|
|
sys_env = env.Clone()
|
|
sys_env.AddJSLibraries(
|
|
[
|
|
"js/libs/library_godot_audio.js",
|
|
"js/libs/library_godot_display.js",
|
|
"js/libs/library_godot_fetch.js",
|
|
"js/libs/library_godot_os.js",
|
|
"js/libs/library_godot_runtime.js",
|
|
"js/libs/library_godot_input.js",
|
|
]
|
|
)
|
|
|
|
if env["javascript_eval"]:
|
|
sys_env.AddJSLibraries(["js/libs/library_godot_javascript_singleton.js"])
|
|
|
|
for lib in sys_env["JS_LIBS"]:
|
|
sys_env.Append(LINKFLAGS=["--js-library", lib.abspath])
|
|
for js in env["JS_PRE"]:
|
|
sys_env.Append(LINKFLAGS=["--pre-js", js.abspath])
|
|
for ext in env["JS_EXTERNS"]:
|
|
sys_env["ENV"]["EMCC_CLOSURE_ARGS"] += " --externs " + ext.abspath
|
|
|
|
build = []
|
|
build_targets = ["#bin/godot${PROGSUFFIX}.js", "#bin/godot${PROGSUFFIX}.wasm", "#bin/godot${PROGSUFFIX}.worker.js"]
|
|
if env["dlink_enabled"]:
|
|
# Reset libraries. The main runtime will only link emscripten libraries, not godot ones.
|
|
sys_env["LIBS"] = []
|
|
# We use IDBFS. Since Emscripten 1.39.1 it needs to be linked explicitly.
|
|
sys_env.Append(LIBS=["idbfs.js"])
|
|
# Configure it as a main module (dynamic linking support).
|
|
sys_env["CCFLAGS"].remove("SIDE_MODULE=2")
|
|
sys_env["LINKFLAGS"].remove("SIDE_MODULE=2")
|
|
sys_env.Append(CCFLAGS=["-s", "MAIN_MODULE=1"])
|
|
sys_env.Append(LINKFLAGS=["-s", "MAIN_MODULE=1"])
|
|
sys_env.Append(LINKFLAGS=["-s", "EXPORT_ALL=1"])
|
|
sys_env.Append(LINKFLAGS=["-s", "WARN_ON_UNDEFINED_SYMBOLS=0"])
|
|
# Force exporting the standard library (printf, malloc, etc.)
|
|
sys_env["ENV"]["EMCC_FORCE_STDLIBS"] = "libc,libc++,libc++abi"
|
|
# The main emscripten runtime, with exported standard libraries.
|
|
sys = sys_env.Program(build_targets, ["web_runtime.cpp"])
|
|
|
|
# The side library, containing all Godot code.
|
|
wasm = env.add_program("#bin/godot.side${PROGSUFFIX}.wasm", web_files)
|
|
build = sys + [wasm[0]]
|
|
else:
|
|
# We use IDBFS. Since Emscripten 1.39.1 it needs to be linked explicitly.
|
|
sys_env.Append(LIBS=["idbfs.js"])
|
|
build = sys_env.Program(build_targets, web_files + ["web_runtime.cpp"])
|
|
|
|
sys_env.Depends(build[0], sys_env["JS_LIBS"])
|
|
sys_env.Depends(build[0], sys_env["JS_PRE"])
|
|
sys_env.Depends(build[0], sys_env["JS_EXTERNS"])
|
|
|
|
engine = [
|
|
"js/engine/preloader.js",
|
|
"js/engine/config.js",
|
|
"js/engine/engine.js",
|
|
]
|
|
externs = [env.File("#platform/web/js/engine/engine.externs.js")]
|
|
js_engine = env.CreateEngineFile("#bin/godot${PROGSUFFIX}.engine.js", engine, externs)
|
|
env.Depends(js_engine, externs)
|
|
|
|
wrap_list = [
|
|
build[0],
|
|
js_engine,
|
|
]
|
|
js_wrapped = env.Textfile("#bin/godot", [env.File(f) for f in wrap_list], TEXTFILESUFFIX="${PROGSUFFIX}.wrapped.js")
|
|
|
|
# 0 - unwrapped js file (use wrapped one instead)
|
|
# 1 - wasm file
|
|
# 2 - worker file
|
|
# 3 - wasm side (when dlink is enabled).
|
|
env.CreateTemplateZip(js_wrapped, build[1], build[2], build[3] if len(build) > 3 else None)
|