bbfe054175
The "webgl/webgl2.h" include provides that function, but it's not available in emscripten versions < 2.0.17 . Since we need to support emscripten 1.39.9 (mono builds), this commit adds a JS function in library_godot_display.js as a compatibility layer for it, and implement glGetBufferSubData by funneling the call to that function (so we don't have name collisions JS-side with recent emcc). All those hacks are now moved to the platform directory instead of being ifdefs inside the drivers implementations.
91 lines
3.4 KiB
Python
91 lines
3.4 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import("env")
|
|
|
|
javascript_files = [
|
|
"audio_driver_javascript.cpp",
|
|
"godot_webgl2.cpp",
|
|
"http_client_javascript.cpp",
|
|
"javascript_singleton.cpp",
|
|
"javascript_main.cpp",
|
|
"os_javascript.cpp",
|
|
"api/javascript_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])
|
|
for js in env["JS_PRE"]:
|
|
sys_env.Append(LINKFLAGS=["--pre-js", env.File(js).path])
|
|
for ext in env["JS_EXTERNS"]:
|
|
sys_env["ENV"]["EMCC_CLOSURE_ARGS"] += " --externs " + ext.path
|
|
|
|
build = []
|
|
if env["gdnative_enabled"]:
|
|
build_targets = ["#bin/godot${PROGSUFFIX}.js", "#bin/godot${PROGSUFFIX}.wasm"]
|
|
# 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.Append(CCFLAGS=["-s", "MAIN_MODULE=1"])
|
|
sys_env.Append(LINKFLAGS=["-s", "MAIN_MODULE=1"])
|
|
sys_env.Append(CCFLAGS=["-s", "EXPORT_ALL=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, ["javascript_runtime.cpp"])
|
|
|
|
# The side library, containing all Godot code.
|
|
wasm_env = env.Clone()
|
|
wasm_env.Append(CPPDEFINES=["WASM_GDNATIVE"]) # So that OS knows it can run GDNative libraries.
|
|
wasm_env.Append(CCFLAGS=["-s", "SIDE_MODULE=2"])
|
|
wasm_env.Append(LINKFLAGS=["-s", "SIDE_MODULE=2"])
|
|
wasm = wasm_env.add_program("#bin/godot.side${PROGSUFFIX}.wasm", javascript_files)
|
|
build = [sys[0], sys[1], wasm[0]]
|
|
else:
|
|
build_targets = ["#bin/godot${PROGSUFFIX}.js", "#bin/godot${PROGSUFFIX}.wasm"]
|
|
if env["threads_enabled"]:
|
|
build_targets.append("#bin/godot${PROGSUFFIX}.worker.js")
|
|
# 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, javascript_files + ["javascript_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/javascript/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")
|
|
|
|
# Extra will be the thread worker, or the GDNative side, or None
|
|
extra = build[2] if len(build) > 2 else None
|
|
env.CreateTemplateZip(js_wrapped, build[1], extra)
|