6d939b72f0
Rewrote AudioDriverJavaScript to support multiple processor nodes. The old (and deprecated) ScriptProcessorNode when threads are not available, and the new AudioWorklet API when threads are enabled. The new implementation uses two ring buffers and a shared state to communicated with the AudioWorklet thread. The audio.worklet.js JavaScript file is always added to the export template, but only really used (and download) in the thread build.
73 lines
2.1 KiB
Python
73 lines
2.1 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",
|
|
"api/javascript_tools_editor_plugin.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)
|
|
|
|
env.AddJSLibraries(
|
|
[
|
|
"native/http_request.js",
|
|
"native/library_godot_audio.js",
|
|
"native/library_godot_display.js",
|
|
"native/library_godot_os.js",
|
|
]
|
|
)
|
|
|
|
if env["tools"]:
|
|
env.AddJSLibraries(["native/library_godot_editor_tools.js"])
|
|
if env["javascript_eval"]:
|
|
env.AddJSLibraries(["native/library_godot_eval.js"])
|
|
for lib in env["JS_LIBS"]:
|
|
env.Append(LINKFLAGS=["--js-library", lib])
|
|
env.Depends(build, env["JS_LIBS"])
|
|
|
|
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"),
|
|
zip_dir.File(binary_name + ".audio.worklet.js"),
|
|
]
|
|
html_file = "#misc/dist/html/editor.html" if env["tools"] else "#misc/dist/html/full-size.html"
|
|
in_files = [js_wrapped, build[1], html_file, "#platform/javascript/native/audio.worklet.js"]
|
|
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",
|
|
)
|