Skip to content

Commit 2b4bcbb

Browse files
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.
1 parent 0d6de7a commit 2b4bcbb

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

.github/workflows/ci.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,18 @@ jobs:
7878
run-tests: false
7979
cache-name: ios-arm64
8080

81+
- name: 🌐 Web (wasm32)
82+
os: ubuntu-20.04
83+
platform: javascript
84+
artifact-name: godot-cpp-javascript-wasm32-release
85+
artifact-path: bin/libgodot-cpp.javascript.template_release.wasm32.a
86+
run-tests: false
87+
cache-name: javascript-wasm32
88+
8189
env:
8290
SCONS_CACHE: ${{ github.workspace }}/.scons-cache/
91+
EM_VERSION: 3.1.45
92+
EM_CACHE_FOLDER: "emsdk-cache"
8393

8494
steps:
8595
- name: Checkout
@@ -104,6 +114,13 @@ jobs:
104114
sudo apt-get update -qq
105115
sudo apt-get install -qqq build-essential pkg-config
106116
117+
- name: Web dependencies
118+
if: ${{ matrix.platform == 'javascript' }}
119+
uses: mymindstorm/setup-emsdk@v12
120+
with:
121+
version: ${{env.EM_VERSION}}
122+
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
123+
107124
- name: Install scons
108125
run: |
109126
python -m pip install scons==4.0.0

test/project/example.gdextension

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,5 @@ android.debug.x86_64 = "res://bin/libgdexample.android.template_debug.x86_64.so"
2121
android.release.x86_64 = "res://bin/libgdexample.android.template_release.x86_64.so"
2222
android.debug.arm64 = "res://bin/libgdexample.android.template_debug.arm64.so"
2323
android.release.arm64 = "res://bin/libgdexample.android.template_release.arm64.so"
24+
web.debug.wasm32 = "res://bin/libgdexample.javascript.template_debug.wasm32.wasm"
25+
web.release.wasm32 = "res://bin/libgdexample.javascript.template_release.wasm32.wasm"

tools/javascript.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
import os
2+
from SCons.Util import WhereIs
23

34

45
def exists(env):
5-
return "EM_CONFIG" in os.environ
6+
return WhereIs("emcc") is not None
67

78

89
def generate(env):
910
if env["arch"] not in ("wasm32"):
1011
print("Only wasm32 supported on web. Exiting.")
1112
env.Exit(1)
1213

13-
if "EM_CONFIG" in os.environ:
14-
env["ENV"] = os.environ
15-
1614
env["CC"] = "emcc"
1715
env["CXX"] = "em++"
1816
env["AR"] = "emar"
@@ -26,6 +24,10 @@ def generate(env):
2624
env["ARCOM_POSIX"] = env["ARCOM"].replace("$TARGET", "$TARGET.posix").replace("$SOURCES", "$SOURCES.posix")
2725
env["ARCOM"] = "${TEMPFILE(ARCOM_POSIX)}"
2826

27+
# Thread support (via SharedArrayBuffer).
28+
env.Append(CCFLAGS=["-s", "USE_PTHREADS=1"])
29+
env.Append(LINKFLAGS=["-s", "USE_PTHREADS=1"])
30+
2931
# All intermediate files are just LLVM bitcode.
3032
env["OBJPREFIX"] = ""
3133
env["OBJSUFFIX"] = ".bc"
@@ -39,9 +41,4 @@ def generate(env):
3941
env.Replace(SHLINKFLAGS="$LINKFLAGS")
4042
env.Replace(SHLINKFLAGS="$LINKFLAGS")
4143

42-
if env["target"] == "debug":
43-
env.Append(CCFLAGS=["-O0", "-g"])
44-
elif env["target"] == "release":
45-
env.Append(CCFLAGS=["-O3"])
46-
4744
env.Append(CPPDEFINES=["WEB_ENABLED", "UNIX_ENABLED"])

0 commit comments

Comments
 (0)