e2083871eb
The API is implemented in javascript, and generates C functions that can be called from godot. This allows much cleaner code replacing all `EM_ASM` calls in our C++ code with plain C function calls. This also gets rid of few hacks and comes with few optimizations (e.g. custom cursor shapes should be much faster now).
73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
Import("env")
|
|
|
|
javascript_files = [
|
|
"audio_driver_javascript.cpp",
|
|
"display_server_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"),
|
|
]
|
|
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]
|
|
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",
|
|
)
|