summaryrefslogtreecommitdiff
path: root/platform/javascript/SCsub
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2020-03-11 11:55:28 +0100
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2020-03-11 16:09:31 +0100
commit919bbf8077e25b9250bf3ee84220b3c4b46a3e3f (patch)
treea4f6f9774b058982c075be89603be5fd303c2b6f /platform/javascript/SCsub
parent87d50da9fc6d8e2ed6b09e830bae9473c5a13388 (diff)
[HTML5] Refactor JS, threads support, closures.
- Refactored the Engine code, splitted across files. - Use MODULARIZE option to build emscripten code into it's own closure. - Enable lto support (saves ~2MiB in release). - Enable optional closure compiler pass for JS and generated code. - Enable optional pthreads support. - Can now build with tools=yes (not much to see yet). - Dropped some deprecated code for older toolchains.
Diffstat (limited to 'platform/javascript/SCsub')
-rw-r--r--platform/javascript/SCsub41
1 files changed, 32 insertions, 9 deletions
diff --git a/platform/javascript/SCsub b/platform/javascript/SCsub
index 85a633442e..d3cd8f76b7 100644
--- a/platform/javascript/SCsub
+++ b/platform/javascript/SCsub
@@ -10,8 +10,11 @@ javascript_files = [
'os_javascript.cpp',
]
-build = env.add_program(['#bin/godot${PROGSUFFIX}.js', '#bin/godot${PROGSUFFIX}.wasm'], javascript_files);
-js, wasm = build
+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 = [
'http_request.js',
@@ -27,18 +30,38 @@ for module in js_modules:
env.Append(LINKFLAGS=['--pre-js', env.File(module).path])
env.Depends(build, js_modules)
-wrapper_start = env.File('pre.js')
-wrapper_end = env.File('engine.js')
-js_wrapped = env.Textfile('#bin/godot', [wrapper_start, js, wrapper_end], TEXTFILESUFFIX='${PROGSUFFIX}.wrapped.js')
+engine = [
+ 'engine/preloader.js',
+ 'engine/loader.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')
-zip_files = env.InstallAs([
+out_files = [
zip_dir.File('godot.js'),
zip_dir.File('godot.wasm'),
zip_dir.File('godot.html')
-], [
+]
+in_files = [
js_wrapped,
- wasm,
+ build[1],
'#misc/dist/html/full-size.html'
-])
+]
+if env['threads_enabled']:
+ in_files.append(build[2])
+ out_files.append(zip_dir.File('godot.worker.js'))
+
+zip_files = env.InstallAs(out_files, in_files)
env.Zip('#bin/godot', zip_files, ZIPROOT=zip_dir, ZIPSUFFIX='${PROGSUFFIX}${ZIPSUFFIX}', ZIPCOMSTR='Archving $SOURCES as $TARGET')