aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author深淵の鴿子 <71170059+ZerxZ@users.noreply.github.com>2024-10-27 20:51:48 -0700
committerGitHub <noreply@github.com>2024-10-28 11:51:48 +0800
commit3387abbfe072cbfe1ed1e7a3d71668603831591b (patch)
tree22a7601ed657750ae57ad45d5d3ee8f6d88b18f3
parent1334c0ae67fdf4cb1377e0e7a3ef291f5cf694c0 (diff)
downloadyuescript-3387abbfe072cbfe1ed1e7a3d71668603831591b.tar.gz
yuescript-3387abbfe072cbfe1ed1e7a3d71668603831591b.tar.bz2
yuescript-3387abbfe072cbfe1ed1e7a3d71668603831591b.zip
Add Support WASM ESM and CommonJs module, Typescript. (#176)
-rw-r--r--.github/workflows/wasm.yml23
-rw-r--r--makefile122
-rw-r--r--wasm/package.json64
3 files changed, 208 insertions, 1 deletions
diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml
new file mode 100644
index 0000000..a0910ba
--- /dev/null
+++ b/.github/workflows/wasm.yml
@@ -0,0 +1,23 @@
1name: Wasm Build
2
3on:
4 workflow_dispatch:
5
6jobs:
7 build:
8 name: Build
9 runs-on: macos-latest
10 steps:
11 - name: Checkout
12 uses: actions/checkout@v3
13 - name: Build Wasm
14 run: |
15 brew upgrade -f python
16 brew install emscripten
17 make wasm-node
18 - name: Upload artifact
19 uses: actions/upload-artifact@v4
20 with:
21 name: yuescript-wasm
22 path: ./wasm
23 retention-days: 7
diff --git a/makefile b/makefile
index 49698fb..aa9bc4a 100644
--- a/makefile
+++ b/makefile
@@ -207,11 +207,131 @@ endif
207 @echo -n "Total build time: " 207 @echo -n "Total build time: "
208 @$(END_TIME) 208 @$(END_TIME)
209 209
210.PHONY: wasm-node
211wasm-node: clean
212 @$(MAKE) generic CC='emcc' AR='emar rcu' RANLIB='emranlib' -C $(SRC_PATH)/3rdParty/lua
213 @mkdir -p wasm/dist
214 @mkdir -p wasm/dist/esm
215 @mkdir -p wasm/dist/cjs
216 # ESM Module
217 @emcc $(SRC_PATH)/yue_wasm.cpp \
218 $(SRC_PATH)/yuescript/ast.cpp \
219 $(SRC_PATH)/yuescript/yue_ast.cpp \
220 $(SRC_PATH)/yuescript/parser.cpp \
221 $(SRC_PATH)/yuescript/yue_compiler.cpp \
222 $(SRC_PATH)/yuescript/yue_parser.cpp \
223 $(SRC_PATH)/yuescript/yuescript.cpp \
224 $(SRC_PATH)/3rdParty/lua/liblua.a \
225 -O2 \
226 -o wasm/dist/esm/yuescript.mjs \
227 -I $(SRC_PATH) \
228 -I $(SRC_PATH)/3rdParty/lua \
229 -std=c++17 \
230 --bind \
231 -fexceptions \
232 -Wno-deprecated-declarations \
233 -gsource-map \
234 --emit-tsd="yuescript.d.ts" \
235 -s EXPORT_NAME="'_createYuescriptModule'" \
236 -s EXPORT_EXCEPTION_HANDLING_HELPERS \
237 -s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
238 -sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
239 -s FORCE_FILESYSTEM=1 \
240 -s TOTAL_MEMORY=20971520 \
241 -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
242 -s EXPORT_ALL=1 \
243 -s FS_DEBUG=1 \
244 -s STACK_SIZE=5MB \
245 -s AUTO_JS_LIBRARIES=0 \
246 -s AUTO_NATIVE_LIBRARIES=0 \
247 -s NODEJS_CATCH_EXIT=0 \
248 -s NODEJS_CATCH_REJECTION=0 \
249 -sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0 \
250 -s USE_ZLIB \
251 -s USE_BZIP2 \
252 -s WASM_BIGINT \
253 -s MODULARIZE=1 \
254 -s LZ4=1
255 # CommonJS Module
256 @emcc $(SRC_PATH)/yue_wasm.cpp \
257 $(SRC_PATH)/yuescript/ast.cpp \
258 $(SRC_PATH)/yuescript/yue_ast.cpp \
259 $(SRC_PATH)/yuescript/parser.cpp \
260 $(SRC_PATH)/yuescript/yue_compiler.cpp \
261 $(SRC_PATH)/yuescript/yue_parser.cpp \
262 $(SRC_PATH)/yuescript/yuescript.cpp \
263 $(SRC_PATH)/3rdParty/lua/liblua.a \
264 -O2 \
265 -o wasm/dist/cjs/yuescript.cjs \
266 --emit-tsd="yuescript.d.ts" \
267 -I $(SRC_PATH) \
268 -I $(SRC_PATH)/3rdParty/lua \
269 -std=c++17 \
270 --bind \
271 -fexceptions \
272 -Wno-deprecated-declarations \
273 -gsource-map \
274 -s EXPORT_NAME="'_createYuescriptModule'" \
275 -s EXPORT_EXCEPTION_HANDLING_HELPERS \
276 -s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
277 -sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
278 -s FORCE_FILESYSTEM=1 \
279 -s TOTAL_MEMORY=20971520 \
280 -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
281 -s EXPORT_ALL=1 \
282 -s FS_DEBUG=1 \
283 -s STACK_SIZE=5MB \
284 -s AUTO_JS_LIBRARIES=0 \
285 -s AUTO_NATIVE_LIBRARIES=0 \
286 -s NODEJS_CATCH_EXIT=0 \
287 -s NODEJS_CATCH_REJECTION=0 \
288 -sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0 \
289 -s USE_ZLIB \
290 -s USE_BZIP2 \
291 -s WASM_BIGINT\
292 -s MODULARIZE=1\
293 -s LZ4=1
294 @${MAKE} clean
295
210.PHONY: wasm 296.PHONY: wasm
211wasm: clean 297wasm: clean
212 @$(MAKE) generic CC='emcc' AR='emar rcu' RANLIB='emranlib' -C $(SRC_PATH)/3rdParty/lua 298 @$(MAKE) generic CC='emcc' AR='emar rcu' RANLIB='emranlib' -C $(SRC_PATH)/3rdParty/lua
213 @mkdir -p doc/docs/.vuepress/public/js 299 @mkdir -p doc/docs/.vuepress/public/js
214 @emcc $(SRC_PATH)/yue_wasm.cpp $(SRC_PATH)/yuescript/ast.cpp $(SRC_PATH)/yuescript/yue_ast.cpp $(SRC_PATH)/yuescript/parser.cpp $(SRC_PATH)/yuescript/yue_compiler.cpp $(SRC_PATH)/yuescript/yue_parser.cpp $(SRC_PATH)/yuescript/yuescript.cpp $(SRC_PATH)/3rdParty/lua/liblua.a -O2 -o doc/docs/.vuepress/public/js/yuescript.js -I $(SRC_PATH) -I $(SRC_PATH)/3rdParty/lua -std=c++17 --bind -fexceptions -Wno-deprecated-declarations 300 @emcc $(SRC_PATH)/yue_wasm.cpp \
301 $(SRC_PATH)/yuescript/ast.cpp \
302 $(SRC_PATH)/yuescript/yue_ast.cpp \
303 $(SRC_PATH)/yuescript/parser.cpp \
304 $(SRC_PATH)/yuescript/yue_compiler.cpp \
305 $(SRC_PATH)/yuescript/yue_parser.cpp \
306 $(SRC_PATH)/yuescript/yuescript.cpp \
307 $(SRC_PATH)/3rdParty/lua/liblua.a \
308 -O2 \
309 -o doc/docs/.vuepress/public/js/yuescript.js \
310 -I $(SRC_PATH) \
311 -I $(SRC_PATH)/3rdParty/lua \
312 -std=c++17 \
313 --bind \
314 -fexceptions \
315 -Wno-deprecated-declarations \
316 -s EXPORT_EXCEPTION_HANDLING_HELPERS \
317 -s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
318 -sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
319 -s FORCE_FILESYSTEM=1 \
320 -s TOTAL_MEMORY=20971520 \
321 -s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
322 -s EXPORT_ALL=1 \
323 -s FS_DEBUG=1 \
324 -s STACK_SIZE=5MB \
325 -s AUTO_JS_LIBRARIES=0 \
326 -s AUTO_NATIVE_LIBRARIES=0 \
327 -s NODEJS_CATCH_EXIT=0 \
328 -s NODEJS_CATCH_REJECTION=0 \
329 -sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0 \
330 -s USE_ZLIB \
331 -s USE_BZIP2 \
332 -s WASM_BIGINT\
333 -s MODULARIZE=1 \
334 -s LZ4=1
215 @${MAKE} clean 335 @${MAKE} clean
216 336
217# Debug build for gdb debugging 337# Debug build for gdb debugging
diff --git a/wasm/package.json b/wasm/package.json
new file mode 100644
index 0000000..b8d2586
--- /dev/null
+++ b/wasm/package.json
@@ -0,0 +1,64 @@
1{
2 "name": "yuescript",
3 "version": "0.25.5",
4 "description": "A Moonscript dialect compiles to Lua.",
5 "main": "./dist/esm/yuescript.mjs",
6 "repository": {
7 "type": "git",
8 "url": "git+https://github.com/pigpigyyy/Yuescript.git"
9 },
10 "keywords": ["lua", "cpp", "moonscript", "yuescript", "transpiler"],
11 "exports": {
12 ".": {
13 "import": "./dist/esm/yuescript.mjs",
14 "require": "./dist/cjs/yuescript.js",
15 "types": "./dist/esm/yuescript.d.ts"
16 },
17 "./yuescript.wasm": {
18 "import": "./dist/esm/yuescript.wasm",
19 "require": "./dist/cjs/yuescript.wasm"
20 },
21 "./yuescript.wasm.map": {
22 "import": "./dist/esm/yuescript.wasm.map",
23 "require": "./dist/cjs/yuescript.wasm.map"
24 }
25 },
26 "files": [
27 "./dist/cjs/yuescript.cjs",
28 "./dist/esm/yuescript.mjs",
29 "./dist/esm/yuescript.d.ts",
30 "./dist/esm/yuescript.wasm",
31 "./dist/esm/yuescript.wasm.map",
32 "./dist/cjs/yuescript.d.ts",
33 "./dist/cjs/yuescript.wasm",
34 "./dist/cjs/yuescript.wasm.map"
35
36 ],
37 "browser": {
38 "child_process": false,
39 "crypto": false,
40 "fs": false,
41 "fs/promises": false,
42 "path": false,
43 "url": false,
44 "vm": false,
45 "ws": false
46 },
47 "author": "pigpigyyy",
48 "license": "MIT",
49 "bugs": {
50 "url": "https://github.com/pigpigyyy/Yuescript/issues"
51 },
52 "homepage": "https://github.com/pigpigyyy/Yuescript#readme",
53 "tsd": {
54 "compilerOptions": {
55 "lib": ["ES2017", "DOM"]
56 }
57 },
58 "types": "./dist/esm/yuescript.d.ts",
59 "engines": {
60 "node": ">=18.0.0"
61 },
62 "devDependencies": {},
63 "scripts": {}
64}