Skip to content

Commit

Permalink
feat: support the debugBuild option for debugging Wasm stacks (#192)
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford authored Feb 22, 2025
1 parent 7f18854 commit fe341fe
Show file tree
Hide file tree
Showing 9 changed files with 557 additions and 320 deletions.
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

0 comments on commit fe341fe

Please sign in to comment.