use custom es6 modularization instead of MODULARIZE=1
authorKai Ninomiya <kainino@chromium.org>
Wed, 18 Sep 2019 06:53:30 +0000 (23:53 -0700)
committerKai Ninomiya <kainino@chromium.org>
Wed, 18 Sep 2019 07:04:09 +0000 (00:04 -0700)
CMakeLists.txt
glslang/OSDependent/Web/CMakeLists.txt
glslang/OSDependent/Web/glslang.after.js [new file with mode: 0644]

index 150ae7a..c2adeb0 100644 (file)
@@ -112,18 +112,9 @@ if(EMSCRIPTEN)
     add_link_options("SHELL: --closure 1")
     add_link_options("SHELL: -s ALLOW_MEMORY_GROWTH=1")
 
-    add_link_options("SHELL: -s MODULARIZE=1")
     if(ENABLE_EMSCRIPTEN_SINGLE_FILE)
         add_link_options("SHELL: -s SINGLE_FILE=1")
     endif(ENABLE_EMSCRIPTEN_SINGLE_FILE)
-
-    if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
-        add_link_options("SHELL: -s ENVIRONMENT=node")
-        add_link_options("SHELL: -s BINARYEN_ASYNC_COMPILATION=0")
-    else()
-        add_link_options("SHELL: -s ENVIRONMENT=web,worker")
-        add_link_options("SHELL: -s EXPORT_ES6=1")
-    endif()
 else()
     if(ENABLE_GLSLANG_WEB)
         if(MSVC)
index c73c345..e8238c3 100644 (file)
@@ -4,7 +4,21 @@ target_link_libraries(glslang.js glslang SPIRV)
 if(EMSCRIPTEN)
     set_target_properties(glslang.js PROPERTIES
         OUTPUT_NAME "glslang"
-        SUFFIX ".js"
-        LINK_FLAGS "--bind -s EXPORT_NAME=\"glslangModule\"")
+        SUFFIX ".js")
     em_link_pre_js(glslang.js "${CMAKE_CURRENT_SOURCE_DIR}/glslang.pre.js")
+
+    target_link_options(glslang.js PRIVATE
+        "SHELL:--bind -s MODULARIZE=1")
+    if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+        target_link_options(glslang.js PRIVATE
+            "SHELL:-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0")
+    else()
+        target_link_options(glslang.js PRIVATE
+            "SHELL:-s ENVIRONMENT=web,worker")
+    endif()
+
+    if(NOT ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE)
+        add_custom_command(TARGET glslang.js POST_BUILD
+            COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js)
+    endif()
 endif(EMSCRIPTEN)
diff --git a/glslang/OSDependent/Web/glslang.after.js b/glslang/OSDependent/Web/glslang.after.js
new file mode 100644 (file)
index 0000000..c2cfc35
--- /dev/null
@@ -0,0 +1,26 @@
+export default (() => {
+    const initialize = () => {
+        return new Promise(resolve => {
+            Module({
+                locateFile() {
+                    const i = import.meta.url.lastIndexOf('/')
+                    return import.meta.url.substring(0, i) + '/glslang.wasm';
+                },
+                onRuntimeInitialized() {
+                    resolve({
+                        compileGLSLZeroCopy: this.compileGLSLZeroCopy,
+                        compileGLSL: this.compileGLSL,
+                    });
+                },
+            });
+        });
+    };
+
+    let instance;
+    return () => {
+        if (!instance) {
+            instance = initialize();
+        }
+        return instance;
+    };
+})();