[HTML5] Better editor HTML, small refactor.

Side and GDNative libraries are now added by engine.js , the dynlink pre
js had been deleted.
This commit is contained in:
Fabio Alessandrelli 2021-01-25 04:48:11 +01:00
parent 6d5daac3e4
commit 276b831c45
6 changed files with 38 additions and 9 deletions

View file

@ -4,7 +4,7 @@
<meta charset='utf-8' /> <meta charset='utf-8' />
<meta name='viewport' content='width=device-width, user-scalable=no' /> <meta name='viewport' content='width=device-width, user-scalable=no' />
<link id='-gd-engine-icon' rel='icon' type='image/png' href='favicon.png' /> <link id='-gd-engine-icon' rel='icon' type='image/png' href='favicon.png' />
<title></title> <title>Godot Engine Web Editor ($GODOT_VERSION)</title>
<style type='text/css'> <style type='text/css'>
*:focus { *:focus {
@ -189,8 +189,17 @@
<br /> <br />
<img src="logo.svg" width="1024" height="414" style="width: auto; height: auto; max-width: 85%; max-height: 250px" /> <img src="logo.svg" width="1024" height="414" style="width: auto; height: auto; max-width: 85%; max-height: 250px" />
<br /> <br />
$GODOT_VERSION
<br />
<a href="releases/">Need an old version?</a>
<br />
<br />
<br />
<label for="zip-file" style="margin-right: 1rem">Preload project ZIP:</label> <input id="zip-file" type="file" id="files" name="files" style="margin-bottom: 1rem"/> <label for="zip-file" style="margin-right: 1rem">Preload project ZIP:</label> <input id="zip-file" type="file" id="files" name="files" style="margin-bottom: 1rem"/>
<br /> <br />
<a href="demo.zip">(Try this for example)</a>
<br />
<br />
<button id="startButton" class="btn" style="margin-bottom: 4rem">Start Godot editor</button> <button id="startButton" class="btn" style="margin-bottom: 4rem">Start Godot editor</button>
<br /> <br />
<button class="btn" onclick="clearPersistence()">Clear persistent data</button> <button class="btn" onclick="clearPersistence()">Clear persistent data</button>

View file

@ -41,8 +41,6 @@ if env["gdnative_enabled"]:
sys_env["LIBS"] = [] sys_env["LIBS"] = []
# We use IDBFS. Since Emscripten 1.39.1 it needs to be linked explicitly. # We use IDBFS. Since Emscripten 1.39.1 it needs to be linked explicitly.
sys_env.Append(LIBS=["idbfs.js"]) sys_env.Append(LIBS=["idbfs.js"])
# JS prepended to the module code loading the side library.
sys_env.Append(LINKFLAGS=["--pre-js", sys_env.File("js/dynlink.pre.js")])
# Configure it as a main module (dynamic linking support). # Configure it as a main module (dynamic linking support).
sys_env.Append(CCFLAGS=["-s", "MAIN_MODULE=1"]) sys_env.Append(CCFLAGS=["-s", "MAIN_MODULE=1"])
sys_env.Append(LINKFLAGS=["-s", "MAIN_MODULE=1"]) sys_env.Append(LINKFLAGS=["-s", "MAIN_MODULE=1"])
@ -52,7 +50,6 @@ if env["gdnative_enabled"]:
sys_env["ENV"]["EMCC_FORCE_STDLIBS"] = "libc,libc++,libc++abi" sys_env["ENV"]["EMCC_FORCE_STDLIBS"] = "libc,libc++,libc++abi"
# The main emscripten runtime, with exported standard libraries. # The main emscripten runtime, with exported standard libraries.
sys = sys_env.Program(build_targets, ["javascript_runtime.cpp"]) sys = sys_env.Program(build_targets, ["javascript_runtime.cpp"])
sys_env.Depends(sys, "js/dynlink.pre.js")
# The side library, containing all Godot code. # The side library, containing all Godot code.
wasm_env = env.Clone() wasm_env = env.Clone()
@ -96,7 +93,13 @@ out_files = [
zip_dir.File(binary_name + ".html"), zip_dir.File(binary_name + ".html"),
zip_dir.File(binary_name + ".audio.worklet.js"), 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" html_file = "#misc/dist/html/full-size.html"
if env["tools"]:
subst_dict = {"\$GODOT_VERSION": env.GetBuildVersion()}
html_file = env.Substfile(
target="#bin/godot${PROGSUFFIX}.html", source="#misc/dist/html/editor.html", SUBST_DICT=subst_dict
)
in_files = [js_wrapped, build[1], html_file, "#platform/javascript/js/libs/audio.worklet.js"] in_files = [js_wrapped, build[1], html_file, "#platform/javascript/js/libs/audio.worklet.js"]
if env["gdnative_enabled"]: if env["gdnative_enabled"]:
in_files.append(build[2]) # Runtime in_files.append(build[2]) # Runtime

View file

@ -1,7 +1,14 @@
import os import os
import sys import sys
from emscripten_helpers import run_closure_compiler, create_engine_file, add_js_libraries, add_js_pre, add_js_externs from emscripten_helpers import (
run_closure_compiler,
create_engine_file,
add_js_libraries,
add_js_pre,
add_js_externs,
get_build_version,
)
from methods import get_compiler_version from methods import get_compiler_version
from SCons.Util import WhereIs from SCons.Util import WhereIs
@ -57,7 +64,6 @@ def configure(env):
sys.exit(255) sys.exit(255)
## Build type ## Build type
if env["target"] == "release": if env["target"] == "release":
# Use -Os to prioritize optimizing for reduced file size. This is # Use -Os to prioritize optimizing for reduced file size. This is
# particularly valuable for the web platform because it directly # particularly valuable for the web platform because it directly
@ -139,6 +145,9 @@ def configure(env):
env.AddMethod(add_js_pre, "AddJSPre") env.AddMethod(add_js_pre, "AddJSPre")
env.AddMethod(add_js_externs, "AddJSExterns") env.AddMethod(add_js_externs, "AddJSExterns")
# Add method for getting build version string.
env.AddMethod(get_build_version, "GetBuildVersion")
# Add method that joins/compiles our Engine files. # Add method that joins/compiles our Engine files.
env.AddMethod(create_engine_file, "CreateEngineFile") env.AddMethod(create_engine_file, "CreateEngineFile")

View file

@ -15,6 +15,15 @@ def run_closure_compiler(target, source, env, for_signature):
return " ".join(cmd) return " ".join(cmd)
def get_build_version(env):
import version
name = "custom_build"
if os.getenv("BUILD_NAME") != None:
name = os.getenv("BUILD_NAME")
return "%d.%d.%d.%s.%s" % (version.major, version.minor, version.patch, version.status, name)
def create_engine_file(env, target, source, externs): def create_engine_file(env, target, source, externs):
if env["use_closure_compiler"]: if env["use_closure_compiler"]:
return env.BuildJS(target, source, JSEXTERNS=externs) return env.BuildJS(target, source, JSEXTERNS=externs)

View file

@ -1 +0,0 @@
Module['dynamicLibraries'] = [Module['thisProgram'] + '.side.wasm'].concat(Module['dynamicLibraries'] ? Module['dynamicLibraries'] : []);

View file

@ -62,7 +62,7 @@ const Engine = (function () {
// Emscripten configuration. // Emscripten configuration.
config['thisProgram'] = me.executableName; config['thisProgram'] = me.executableName;
config['noExitRuntime'] = true; config['noExitRuntime'] = true;
config['dynamicLibraries'] = me.gdnativeLibs; config['dynamicLibraries'] = [`${me.executableName}.side.wasm`].concat(me.gdnativeLibs);
Godot(config).then(function (module) { Godot(config).then(function (module) {
module['initFS'](me.persistentPaths).then(function (fs_err) { module['initFS'](me.persistentPaths).then(function (fs_err) {
me.rtenv = module; me.rtenv = module;