Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support the debugBuild option for debugging Wasm stacks #192

Merged
merged 21 commits into from
Feb 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
260 changes: 56 additions & 204 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,124 +34,49 @@ jobs:

build-splicer:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version:
- '22'
- latest
steps:
- uses: actions/checkout@v4

- name: Install Rust Toolchain
run: |
rustup toolchain install 1.77.1
rustup target add wasm32-wasi --toolchain 1.77.1
rustup target add wasm32-wasip1

- uses: actions/setup-node@v4
with:
node-version: ${{matrix.node-version}}

- name: Install NPM packages
run: npm install

- name: Cache Splicer build
uses: actions/cache@v4
id: splicer-build
with:
key: output-splicer-node-${{matrix.node-version}}-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
key: splicer-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
path: |
lib/spidermonkey-embedding-splicer.core2.wasm
lib/spidermonkey-embedding-splicer.core.wasm
lib/spidermonkey-embedding-splicer.d.ts
lib/spidermonkey-embedding-splicer.js
lib
target

- name: Build splicer
if: steps.splicer-build.outputs.cache-hit != 'true'
run: |
make lib/spidermonkey-embedding-splicer.js

build-jit:
runs-on: ubuntu-latest
needs:
- build-splicer
strategy:
fail-fast: false
matrix:
node-version:
- '22'
- latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- name: Get StarlingMonkey Commit
id: starlingmonkey-commit
run: echo "STARLINGMONKEY_HASH=$(git submodule status | head -c9 | tail -c8)" >> "$GITHUB_OUTPUT"

- name: Install Rust Toolchain
if: steps.splicer-build.outputs.cache-hit != 'true'
run: |
rustup toolchain install 1.77.1
rustup target add wasm32-wasi --toolchain 1.77.1
rustup target add wasm32-wasip1

- name: Restore Embedding Splicer from cache
uses: actions/cache/restore@v4
id: splicer-build
with:
key: output-splicer-node-${{matrix.node-version}}-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
path: |
lib/spidermonkey-embedding-splicer.core2.wasm
lib/spidermonkey-embedding-splicer.core.wasm
lib/spidermonkey-embedding-splicer.d.ts
lib/spidermonkey-embedding-splicer.js
target

- uses: actions/setup-node@v4
if: steps.splicer-build.outputs.cache-hit != 'true'
with:
node-version: ${{matrix.node-version}}
node-version: '22'

- name: Install NPM packages
if: steps.splicer-build.outputs.cache-hit != 'true'
run: npm install

- name: Cache StarlingMonkey
uses: actions/cache@v4
id: starlingmonkey-jit
with:
key: output-starlingmonkey-jit-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
lookup-only: 'true'
path: |
lib/starlingmonkey_embedding.wasm
build-release

- name: Build ComponentizeJS
if: steps.starlingmonkey-jit.outputs.cache-hit != 'true'
run: |
npm run clean
npm run build

- uses: actions/upload-artifact@v4
if: steps.starlingmonkey-jit.outputs.cache-hit != 'true'
with:
name: starlingmonkey-jit-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
if-no-files-found: 'error'
path: |
lib/starlingmonkey_embedding.wasm
build-release
- name: Build splicer
if: steps.splicer-build.outputs.cache-hit != 'true'
run: make lib/spidermonkey-embedding-splicer.js

build-aot:
build:
runs-on: ubuntu-latest
needs:
- build-splicer
strategy:
fail-fast: false
matrix:
node-version:
- '22'
- latest
build-type:
- 'release'
- 'debug'
- 'weval'
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -160,108 +85,79 @@ jobs:
- name: Get StarlingMonkey Commit
id: starlingmonkey-commit
run: echo "STARLINGMONKEY_HASH=$(git submodule status | head -c9 | tail -c8)" >> "$GITHUB_OUTPUT"

- uses: actions/cache@v4
id: starlingmonkey-build
with:
key: starlingmonkey-${{matrix.build-type}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: lib

- name: Install Rust Toolchain
if: steps.starlingmonkey-build.outputs.cache-hit != 'true'
run: |
rustup toolchain install 1.77.1
rustup target add wasm32-wasi --toolchain 1.77.1
rustup target add wasm32-wasip1

- name: Install wasm-tools
if: steps.starlingmonkey-build.outputs.cache-hit != 'true'
run: cargo install wasm-tools

- name: Restore Embedding Splicer from cache
uses: actions/cache/restore@v4
id: splicer-build
with:
key: output-splicer-node-${{matrix.node-version}}-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
key: splicer-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
path: |
lib/spidermonkey-embedding-splicer.core2.wasm
lib/spidermonkey-embedding-splicer.core.wasm
lib/spidermonkey-embedding-splicer.d.ts
lib/spidermonkey-embedding-splicer.js
lib
target

- uses: actions/setup-node@v4
if: steps.starlingmonkey-build.outputs.cache-hit != 'true'
with:
node-version: ${{matrix.node-version}}
node-version: '22'

- name: Install NPM packages
if: steps.starlingmonkey-build.outputs.cache-hit != 'true'
run: npm install

- name: Cache StarlingMonkey (Weval)
uses: actions/cache@v4
id: starlingmonkey-aot
with:
key: output-starlingmonkey-aot-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
lookup-only: 'true'
path: |
lib/starlingmonkey_embedding_weval.wasm
lib/starlingmonkey_ics.wevalcache
build-release-weval

- name: Build Weval
if: steps.starlingmonkey-aot.outputs.cache-hit != 'true'
- name: Build ComponentizeJS
if: steps.starlingmonkey-build.outputs.cache-hit != 'true'
run: |
npm run clean
npm run build:weval

- uses: actions/upload-artifact@v4
if: steps.starlingmonkey-aot.outputs.cache-hit != 'true'
with:
name: starlingmonkey-aot-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
if-no-files-found: 'error'
path: |
lib/starlingmonkey_embedding_weval.wasm
lib/starlingmonkey_ics.wevalcache
build-release-weval
npm run build:${{matrix.build-type}}

########
# Test #
########

test-jit:
test:
runs-on: ubuntu-latest
needs:
- build-jit
- build
strategy:
fail-fast: false
matrix:
node-version:
- '22'
- latest
- '22.14.0'
# - latest reenable when https://github.com/nodejs/node/issues/57172 is fixed
build-type:
- 'release'
- 'debug'
- 'weval'
steps:
- uses: actions/checkout@v4

- name: Get StarlingMonkey Commit
id: starlingmonkey-commit
run: echo "STARLINGMONKEY_HASH=$(git submodule status | head -c9 | tail -c8)" >> "$GITHUB_OUTPUT"

- name: Restore Embedding Splicer from cache
uses: actions/cache/restore@v4
id: splicer-build
with:
key: output-splicer-node-${{matrix.node-version}}-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
path: |
lib/spidermonkey-embedding-splicer.core2.wasm
lib/spidermonkey-embedding-splicer.core.wasm
lib/spidermonkey-embedding-splicer.d.ts
lib/spidermonkey-embedding-splicer.js
target

- name: Restore StarlingMonkey build from cache
uses: actions/cache/restore@v4
id: restore-starlingmonkey-jit-build
with:
key: output-starlingmonkey-jit-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: |
lib/starlingmonkey_embedding.wasm
build-release

- uses: actions/download-artifact@v4
if: steps.restore-starlingmonkey-jit-build.outputs.cache-hit != 'true'
with:
name: starlingmonkey-jit-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: |
lib/starlingmonkey_embedding.wasm
build-release
key: starlingmonkey-${{matrix.build-type}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: lib

- uses: actions/setup-node@v4
with:
Expand All @@ -271,84 +167,40 @@ jobs:
run: npm install

- name: Test
run: npm run test

- name: Cache Example build
uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # 4.1.2
with:
path: example/target
key: output-example-jit-cargo-${{ hashFiles('example/src/main.rs', 'example/Cargo.lock', 'example/hello.wit') }}
run: npm run test:${{matrix.build-type}}

- name: Test Example
working-directory: examples/hello-world
run: bash test.sh

test-aot:
test-example:
runs-on: ubuntu-latest
needs:
- build-aot
strategy:
fail-fast: false
matrix:
node-version:
- '22'
- latest
env:
ENABLE_AOT: "1"
- build
steps:
- uses: actions/checkout@v4

- name: Get StarlingMonkey Commit
id: starlingmonkey-commit
run: echo "STARLINGMONKEY_HASH=$(git submodule status | head -c9 | tail -c8)" >> "$GITHUB_OUTPUT"

- name: Restore Embedding Splicer from cache
uses: actions/cache/restore@v4
id: splicer-build
with:
key: output-splicer-node-${{matrix.node-version}}-${{ hashFiles('Cargo.lock', 'crates/spidermonkey-embedding-splicer/src/**/*.rs') }}
path: |
lib/spidermonkey-embedding-splicer.core2.wasm
lib/spidermonkey-embedding-splicer.core.wasm
lib/spidermonkey-embedding-splicer.d.ts
lib/spidermonkey-embedding-splicer.js
target

- name: Restore StarlingMonkey AOT build from cache
- name: Restore StarlingMonkey build from cache
uses: actions/cache/restore@v4
id: restore-starlingmonkey-aot-build
with:
key: output-starlingmonkey-aot-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: |
lib/starlingmonkey_embedding_weval.wasm
lib/starlingmonkey_ics.wevalcache
build-release-weval

- uses: actions/download-artifact@v4
if: steps.restore-starlingmonkey-aot-build.outputs.cache-hit != 'true'
id: restore-starlingmonkey-jit-build
with:
name: starlingmonkey-aot-node-${{matrix.node-version}}-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: |
lib/starlingmonkey_embedding_weval.wasm
lib/starlingmonkey_ics.wevalcache
build-release-weval
key: starlingmonkey-release-${{ steps.starlingmonkey-commit.outputs.STARLINGMONKEY_HASH }}
path: lib

- uses: actions/setup-node@v4
with:
node-version: ${{matrix.node-version}}
node-version: '22'

- name: Install NPM packages
run: npm install

- name: Test
run: npm run test:weval

- name: Cache Example build
uses: actions/cache@v4
with:
path: example/target
key: output-example-aot-cargo-${{ hashFiles('example/src/main.rs', 'example/Cargo.lock', 'example/hello.wit') }}
path: examples/target
key: example-jit-cargo-${{ hashFiles('examples/src/main.rs', 'examples/Cargo.lock', 'examples/hello.wit') }}

- name: Test Example
working-directory: examples/hello-world
run: bash test.sh
run: |
cd examples/hello-world
./test.sh
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ lib/starlingmonkey_ics.wevalcache: lib/starlingmonkey_embedding_weval.wasm
lib/starlingmonkey_embedding.debug.wasm: StarlingMonkey/cmake/* embedding/* StarlingMonkey/runtime/* StarlingMonkey/builtins/* StarlingMonkey/builtins/*/* StarlingMonkey/builtins/*/*/* StarlingMonkey/include/* | lib
cmake -B build-debug -DCMAKE_BUILD_TYPE=RelWithDebInfo
make -j16 -C build-debug
@cp build-debug/starling-raw.wasm/starling-raw.wasm $@
wasm-tools strip build-debug/starling-raw.wasm/starling-raw.wasm -d ".debug_(info|loc|ranges|abbrev|line|str)" -o $@

obj:
mkdir -p obj
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ export function componentize(jsSource: string, opts: {
witPath: string,
worldName: string,
debug?: bool,
debugBuild?: bool,
sourceName?: string,
engine?: string,
preview2Adapter?: string,
Expand Down
Loading