Skip to content

Commit

Permalink
Add Support WASM ESM and CommonJs module, Typescript. (#176)
Browse files Browse the repository at this point in the history
  • Loading branch information
ZerxZ authored Oct 28, 2024
1 parent 1334c0a commit 3387abb
Show file tree
Hide file tree
Showing 3 changed files with 208 additions and 1 deletion.
23 changes: 23 additions & 0 deletions .github/workflows/wasm.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Wasm Build

on:
workflow_dispatch:

jobs:
build:
name: Build
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Build Wasm
run: |
brew upgrade -f python
brew install emscripten
make wasm-node
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: yuescript-wasm
path: ./wasm
retention-days: 7
122 changes: 121 additions & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,131 @@ endif
@echo -n "Total build time: "
@$(END_TIME)

.PHONY: wasm-node
wasm-node: clean
@$(MAKE) generic CC='emcc' AR='emar rcu' RANLIB='emranlib' -C $(SRC_PATH)/3rdParty/lua
@mkdir -p wasm/dist
@mkdir -p wasm/dist/esm
@mkdir -p wasm/dist/cjs
# ESM Module
@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 wasm/dist/esm/yuescript.mjs \
-I $(SRC_PATH) \
-I $(SRC_PATH)/3rdParty/lua \
-std=c++17 \
--bind \
-fexceptions \
-Wno-deprecated-declarations \
-gsource-map \
--emit-tsd="yuescript.d.ts" \
-s EXPORT_NAME="'_createYuescriptModule'" \
-s EXPORT_EXCEPTION_HANDLING_HELPERS \
-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
-sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
-s FORCE_FILESYSTEM=1 \
-s TOTAL_MEMORY=20971520 \
-s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
-s EXPORT_ALL=1 \
-s FS_DEBUG=1 \
-s STACK_SIZE=5MB \
-s AUTO_JS_LIBRARIES=0 \
-s AUTO_NATIVE_LIBRARIES=0 \
-s NODEJS_CATCH_EXIT=0 \
-s NODEJS_CATCH_REJECTION=0 \
-sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0 \
-s USE_ZLIB \
-s USE_BZIP2 \
-s WASM_BIGINT \
-s MODULARIZE=1 \
-s LZ4=1
# CommonJS Module
@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 wasm/dist/cjs/yuescript.cjs \
--emit-tsd="yuescript.d.ts" \
-I $(SRC_PATH) \
-I $(SRC_PATH)/3rdParty/lua \
-std=c++17 \
--bind \
-fexceptions \
-Wno-deprecated-declarations \
-gsource-map \
-s EXPORT_NAME="'_createYuescriptModule'" \
-s EXPORT_EXCEPTION_HANDLING_HELPERS \
-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
-sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
-s FORCE_FILESYSTEM=1 \
-s TOTAL_MEMORY=20971520 \
-s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
-s EXPORT_ALL=1 \
-s FS_DEBUG=1 \
-s STACK_SIZE=5MB \
-s AUTO_JS_LIBRARIES=0 \
-s AUTO_NATIVE_LIBRARIES=0 \
-s NODEJS_CATCH_EXIT=0 \
-s NODEJS_CATCH_REJECTION=0 \
-sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0 \
-s USE_ZLIB \
-s USE_BZIP2 \
-s WASM_BIGINT\
-s MODULARIZE=1\
-s LZ4=1
@${MAKE} clean

.PHONY: wasm
wasm: clean
@$(MAKE) generic CC='emcc' AR='emar rcu' RANLIB='emranlib' -C $(SRC_PATH)/3rdParty/lua
@mkdir -p doc/docs/.vuepress/public/js
@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
@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 \
-s EXPORT_EXCEPTION_HANDLING_HELPERS \
-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
-sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
-s FORCE_FILESYSTEM=1 \
-s TOTAL_MEMORY=20971520 \
-s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
-s EXPORT_ALL=1 \
-s FS_DEBUG=1 \
-s STACK_SIZE=5MB \
-s AUTO_JS_LIBRARIES=0 \
-s AUTO_NATIVE_LIBRARIES=0 \
-s NODEJS_CATCH_EXIT=0 \
-s NODEJS_CATCH_REJECTION=0 \
-sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0 \
-s USE_ZLIB \
-s USE_BZIP2 \
-s WASM_BIGINT\
-s MODULARIZE=1 \
-s LZ4=1
@${MAKE} clean

# Debug build for gdb debugging
Expand Down
64 changes: 64 additions & 0 deletions wasm/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
{
"name": "yuescript",
"version": "0.25.5",
"description": "A Moonscript dialect compiles to Lua.",
"main": "./dist/esm/yuescript.mjs",
"repository": {
"type": "git",
"url": "git+https://github.com/pigpigyyy/Yuescript.git"
},
"keywords": ["lua", "cpp", "moonscript", "yuescript", "transpiler"],
"exports": {
".": {
"import": "./dist/esm/yuescript.mjs",
"require": "./dist/cjs/yuescript.js",
"types": "./dist/esm/yuescript.d.ts"
},
"./yuescript.wasm": {
"import": "./dist/esm/yuescript.wasm",
"require": "./dist/cjs/yuescript.wasm"
},
"./yuescript.wasm.map": {
"import": "./dist/esm/yuescript.wasm.map",
"require": "./dist/cjs/yuescript.wasm.map"
}
},
"files": [
"./dist/cjs/yuescript.cjs",
"./dist/esm/yuescript.mjs",
"./dist/esm/yuescript.d.ts",
"./dist/esm/yuescript.wasm",
"./dist/esm/yuescript.wasm.map",
"./dist/cjs/yuescript.d.ts",
"./dist/cjs/yuescript.wasm",
"./dist/cjs/yuescript.wasm.map"

],
"browser": {
"child_process": false,
"crypto": false,
"fs": false,
"fs/promises": false,
"path": false,
"url": false,
"vm": false,
"ws": false
},
"author": "pigpigyyy",
"license": "MIT",
"bugs": {
"url": "https://github.com/pigpigyyy/Yuescript/issues"
},
"homepage": "https://github.com/pigpigyyy/Yuescript#readme",
"tsd": {
"compilerOptions": {
"lib": ["ES2017", "DOM"]
}
},
"types": "./dist/esm/yuescript.d.ts",
"engines": {
"node": ">=18.0.0"
},
"devDependencies": {},
"scripts": {}
}

0 comments on commit 3387abb

Please sign in to comment.