61d4b8045c
This should fix some of the audio stuttering issues when the HTML5 export is compiled with threads support. The API should be ported to AudioWorklet to (hopefully) be perfect. That though, cannot be backported to 3.2 due to extra restriction of AudioWorklet (which only runs in SecureContext, and needs a polyfill for Safari).
71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import("env")
|
|
|
|
javascript_files = [
|
|
"audio_driver_javascript.cpp",
|
|
"http_client_javascript.cpp",
|
|
"javascript_eval.cpp",
|
|
"javascript_main.cpp",
|
|
"os_javascript.cpp",
|
|
]
|
|
|
|
build_targets = ["#bin/godot${PROGSUFFIX}.js", "#bin/godot${PROGSUFFIX}.wasm"]
|
|
if env["threads_enabled"]:
|
|
build_targets.append("#bin/godot${PROGSUFFIX}.worker.js")
|
|
|
|
build = env.add_program(build_targets, javascript_files)
|
|
|
|
js_libraries = [
|
|
"native/http_request.js",
|
|
"native/library_godot_audio.js",
|
|
]
|
|
for lib in js_libraries:
|
|
env.Append(LINKFLAGS=["--js-library", env.File(lib).path])
|
|
env.Depends(build, js_libraries)
|
|
|
|
js_pre = [
|
|
"native/id_handler.js",
|
|
"native/utils.js",
|
|
]
|
|
for js in js_pre:
|
|
env.Append(LINKFLAGS=["--pre-js", env.File(js).path])
|
|
env.Depends(build, js_pre)
|
|
|
|
engine = [
|
|
"engine/preloader.js",
|
|
"engine/utils.js",
|
|
"engine/engine.js",
|
|
]
|
|
externs = [env.File("#platform/javascript/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")
|
|
|
|
zip_dir = env.Dir("#bin/.javascript_zip")
|
|
binary_name = "godot.tools" if env["tools"] else "godot"
|
|
out_files = [
|
|
zip_dir.File(binary_name + ".js"),
|
|
zip_dir.File(binary_name + ".wasm"),
|
|
zip_dir.File(binary_name + ".html"),
|
|
]
|
|
html_file = "#misc/dist/html/full-size.html"
|
|
in_files = [js_wrapped, build[1], html_file]
|
|
if env["threads_enabled"]:
|
|
in_files.append(build[2])
|
|
out_files.append(zip_dir.File(binary_name + ".worker.js"))
|
|
|
|
zip_files = env.InstallAs(out_files, in_files)
|
|
env.Zip(
|
|
"#bin/godot",
|
|
zip_files,
|
|
ZIPROOT=zip_dir,
|
|
ZIPSUFFIX="${PROGSUFFIX}${ZIPSUFFIX}",
|
|
ZIPCOMSTR="Archiving $SOURCES as $TARGET",
|
|
)
|