Forráskód Böngészése

Added fix for javascript build for godot 4.x

Added changes to tools/javascript.py to add PFlags to fix SharedArrayBuffer memory error.
Corrected some small errors in tools/javascript.py to support new target names.
Also updated ci to include validation for web build.
Nick Maltbie 1 éve
szülő
commit
2b4bcbb0ce
3 módosított fájl, 25 hozzáadás és 9 törlés
  1. 17 0
      .github/workflows/ci.yml
  2. 2 0
      test/project/example.gdextension
  3. 6 9
      tools/javascript.py

+ 17 - 0
.github/workflows/ci.yml

@@ -78,8 +78,18 @@ jobs:
             run-tests: false
             cache-name: ios-arm64
 
+          - name: 🌐 Web (wasm32)
+            os: ubuntu-20.04
+            platform: javascript
+            artifact-name: godot-cpp-javascript-wasm32-release
+            artifact-path: bin/libgodot-cpp.javascript.template_release.wasm32.a
+            run-tests: false
+            cache-name: javascript-wasm32
+
     env:
       SCONS_CACHE: ${{ github.workspace }}/.scons-cache/
+      EM_VERSION: 3.1.45
+      EM_CACHE_FOLDER: "emsdk-cache"
 
     steps:
       - name: Checkout
@@ -104,6 +114,13 @@ jobs:
           sudo apt-get update -qq
           sudo apt-get install -qqq build-essential pkg-config
 
+      - name: Web dependencies
+        if: ${{ matrix.platform == 'javascript' }}
+        uses: mymindstorm/setup-emsdk@v12
+        with:
+          version: ${{env.EM_VERSION}}
+          actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
+
       - name: Install scons
         run: |
           python -m pip install scons==4.0.0

+ 2 - 0
test/project/example.gdextension

@@ -21,3 +21,5 @@ android.debug.x86_64 = "res://bin/libgdexample.android.template_debug.x86_64.so"
 android.release.x86_64 = "res://bin/libgdexample.android.template_release.x86_64.so"
 android.debug.arm64 = "res://bin/libgdexample.android.template_debug.arm64.so"
 android.release.arm64 = "res://bin/libgdexample.android.template_release.arm64.so"
+web.debug.wasm32 = "res://bin/libgdexample.javascript.template_debug.wasm32.wasm"
+web.release.wasm32 = "res://bin/libgdexample.javascript.template_release.wasm32.wasm"

+ 6 - 9
tools/javascript.py

@@ -1,8 +1,9 @@
 import os
+from SCons.Util import WhereIs
 
 
 def exists(env):
-    return "EM_CONFIG" in os.environ
+    return WhereIs("emcc") is not None
 
 
 def generate(env):
@@ -10,9 +11,6 @@ def generate(env):
         print("Only wasm32 supported on web. Exiting.")
         env.Exit(1)
 
-    if "EM_CONFIG" in os.environ:
-        env["ENV"] = os.environ
-
     env["CC"] = "emcc"
     env["CXX"] = "em++"
     env["AR"] = "emar"
@@ -26,6 +24,10 @@ def generate(env):
     env["ARCOM_POSIX"] = env["ARCOM"].replace("$TARGET", "$TARGET.posix").replace("$SOURCES", "$SOURCES.posix")
     env["ARCOM"] = "${TEMPFILE(ARCOM_POSIX)}"
 
+    # Thread support (via SharedArrayBuffer).
+    env.Append(CCFLAGS=["-s", "USE_PTHREADS=1"])
+    env.Append(LINKFLAGS=["-s", "USE_PTHREADS=1"])
+
     # All intermediate files are just LLVM bitcode.
     env["OBJPREFIX"] = ""
     env["OBJSUFFIX"] = ".bc"
@@ -39,9 +41,4 @@ def generate(env):
     env.Replace(SHLINKFLAGS="$LINKFLAGS")
     env.Replace(SHLINKFLAGS="$LINKFLAGS")
 
-    if env["target"] == "debug":
-        env.Append(CCFLAGS=["-O0", "-g"])
-    elif env["target"] == "release":
-        env.Append(CCFLAGS=["-O3"])
-
     env.Append(CPPDEFINES=["WEB_ENABLED", "UNIX_ENABLED"])