diff --git a/compilation-support-image/Dockerfile b/compilation-support-image/Dockerfile deleted file mode 100644 index 9f0911810..000000000 --- a/compilation-support-image/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -FROM rust:1.74 - -WORKDIR /usr/code - -# Install wasm support for Rust -RUN rustup target add wasm32-unknown-unknown - -# Install wasi-sdk -RUN wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz && \ - mkdir -p /opt/wasi-sdk && \ - tar xvf wasi-sdk-20.0-linux.tar.gz && \ - cp -r wasi-sdk-20.0/* /opt/wasi-sdk - -# Install wabt tools -RUN wget https://github.com/WebAssembly/wabt/releases/download/1.0.34/wabt-1.0.34-ubuntu.tar.gz && \ - mkdir -p /opt/wabt && \ - tar xvf wabt-1.0.34-ubuntu.tar.gz && \ - cp -r wabt-1.0.34/* /opt/wabt - -# Install Javy -RUN wget https://github.com/bytecodealliance/javy/releases/download/v1.4.0/javy-x86_64-linux-v1.4.0.gz && \ - mkdir -p /opt/javy && \ - gunzip javy-x86_64-linux-v1.4.0.gz && \ - mv javy-x86_64-linux-v1.4.0 /opt/javy/javy && \ - chmod a+x /opt/javy/javy - -ENV WASI_SDK_PATH=/opt/wasi-sdk - -COPY . . diff --git a/compilation-support-image/compile-c.sh b/compilation-support-image/compile-c.sh deleted file mode 100755 index 9ce2951cb..000000000 --- a/compilation-support-image/compile-c.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -while IFS= read -r line || [ -n "$line" ] -do - echo "$line" >> tmp.c -done < "/dev/stdin" - -WASI_SDK_PATH=/opt/wasi-sdk - -/opt/wasi-sdk/bin/clang -O0 -g -o tmp.wasm tmp.c -nostartfiles -Wl,--no-entry -Wl,--export=run > /dev/null 2> /dev/null - -cat tmp.wasm diff --git a/compilation-support-image/compile-js.sh b/compilation-support-image/compile-js.sh deleted file mode 100755 index dbe7bac3e..000000000 --- a/compilation-support-image/compile-js.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -while IFS= read -r line || [ -n "$line" ] -do - echo "$line" >> tmp.js -done < "/dev/stdin" - -/opt/javy/javy compile tmp.js -o tmp.wasm > /dev/null 2> /dev/null - -cat tmp.wasm diff --git a/compilation-support-image/compile-rust-wasi.sh b/compilation-support-image/compile-rust-wasi.sh deleted file mode 100755 index 31776ba33..000000000 --- a/compilation-support-image/compile-rust-wasi.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -while IFS= read -r line || [ -n "$line" ] -do - echo "$line" >> tmp.rs -done < "/dev/stdin" - -rustc tmp.rs --target=wasm32-wasi -C opt-level=0 -C debuginfo=0 -o tmp.wasm > /dev/null 2> /dev/null - -cat tmp.wasm diff --git a/compilation-support-image/compile-rust.sh b/compilation-support-image/compile-rust.sh deleted file mode 100755 index f2b99e110..000000000 --- a/compilation-support-image/compile-rust.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -while IFS= read -r line || [ -n "$line" ] -do - echo "$line" >> tmp.rs -done < "/dev/stdin" - -rustc tmp.rs --target=wasm32-unknown-unknown --crate-type=cdylib -C opt-level=0 -C debuginfo=0 -o tmp.wasm > /dev/null 2> /dev/null - -cat tmp.wasm diff --git a/compilation-support-image/compile-wat.sh b/compilation-support-image/compile-wat.sh deleted file mode 100755 index f7ee8cd9c..000000000 --- a/compilation-support-image/compile-wat.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -while IFS= read -r line || [ -n "$line" ] -do - echo "$line" >> tmp.wat -done < "/dev/stdin" - -/opt/wabt/bin/wat2wasm tmp.wat -o tmp.wasm > /dev/null 2> /dev/null - -cat tmp.wasm diff --git a/pom.xml b/pom.xml index 04e8f0f85..a3190ff98 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ wasm runtime wasi + wasm-corpus diff --git a/runtime/pom.xml b/runtime/pom.xml index 6ee305eff..2a09adb3f 100644 --- a/runtime/pom.xml +++ b/runtime/pom.xml @@ -29,6 +29,12 @@ + + + ${project.basedir}/../wasm-corpus/src/test/resources + + + com.dylibso.chicory diff --git a/runtime/src/test/resources/compiled/count_vowels.rs.wasm b/runtime/src/test/resources/compiled/count_vowels.rs.wasm deleted file mode 100644 index 689539cf0..000000000 Binary files a/runtime/src/test/resources/compiled/count_vowels.rs.wasm and /dev/null differ diff --git a/wasi/pom.xml b/wasi/pom.xml index c566e9319..0a1a66ef7 100644 --- a/wasi/pom.xml +++ b/wasi/pom.xml @@ -28,4 +28,11 @@ + + + + ${project.basedir}/../wasm-corpus/src/test/resources + + + diff --git a/wasi/src/test/java/com/dylibso/chicory/wasi/WasiPreview1Test.java b/wasi/src/test/java/com/dylibso/chicory/wasi/WasiPreview1Test.java index 5f5fcb513..8ce388def 100644 --- a/wasi/src/test/java/com/dylibso/chicory/wasi/WasiPreview1Test.java +++ b/wasi/src/test/java/com/dylibso/chicory/wasi/WasiPreview1Test.java @@ -7,7 +7,6 @@ import com.dylibso.chicory.runtime.HostImports; import com.dylibso.chicory.runtime.Module; import java.io.ByteArrayInputStream; -import java.io.File; import org.junit.jupiter.api.Test; public class WasiPreview1Test { @@ -20,8 +19,7 @@ public void shouldRunWasiModule() { var wasi = new WasiPreview1(this.logger, WasiOptions.builder().withStdout(fakeStdout).build()); var imports = new HostImports(wasi.toHostFunctions()); - var module = - Module.builder(new File("src/test/resources/compiled/hello-wasi.wat.wasm")).build(); + var module = Module.builder("compiled/hello-wasi.wat.wasm").build(); module.instantiate(imports); assertEquals(fakeStdout.output().strip(), "hello world"); } @@ -33,8 +31,7 @@ public void shouldRunWasiRustModule() { var stdout = new MockPrintStream(); var wasi = new WasiPreview1(this.logger, WasiOptions.builder().withStdout(stdout).build()); var imports = new HostImports(wasi.toHostFunctions()); - var module = - Module.builder(new File("src/test/resources/compiled/hello-wasi.rs.wasm")).build(); + var module = Module.builder("compiled/hello-wasi.rs.wasm").build(); module.instantiate(imports); // run _start and prints Hello, World! assertEquals(expected, stdout.output().strip()); } @@ -46,8 +43,7 @@ public void shouldRunWasiGreetRustModule() { var wasiOpts = WasiOptions.builder().withStdout(System.out).withStdin(fakeStdin).build(); var wasi = new WasiPreview1(this.logger, wasiOpts); var imports = new HostImports(wasi.toHostFunctions()); - var module = - Module.builder(new File("src/test/resources/compiled/greet-wasi.rs.wasm")).build(); + var module = Module.builder("compiled/greet-wasi.rs.wasm").build(); module.instantiate(imports); } @@ -60,7 +56,7 @@ public void shouldRunWasiDemoJavyModule() { var wasiOpts = WasiOptions.builder().withStdout(fakeStdout).withStdin(fakeStdin).build(); var wasi = new WasiPreview1(this.logger, wasiOpts); var imports = new HostImports(wasi.toHostFunctions()); - var module = Module.builder("compiled/javy-demo.js.wasm").build(); + var module = Module.builder("compiled/javy-demo.js.javy.wasm").build(); module.instantiate(imports); assertEquals(fakeStdout.output(), "{\"foo\":3,\"newBar\":\"baz!\"}"); diff --git a/wasi/src/test/resources/compiled/greet-wasi.rs.wasm b/wasi/src/test/resources/compiled/greet-wasi.rs.wasm deleted file mode 100755 index f5f0c8e7c..000000000 Binary files a/wasi/src/test/resources/compiled/greet-wasi.rs.wasm and /dev/null differ diff --git a/wasi/src/test/resources/compiled/hello-wasi.rs.wasm b/wasi/src/test/resources/compiled/hello-wasi.rs.wasm deleted file mode 100755 index 020cbf031..000000000 Binary files a/wasi/src/test/resources/compiled/hello-wasi.rs.wasm and /dev/null differ diff --git a/wasm-corpus/Dockerfile b/wasm-corpus/Dockerfile new file mode 100644 index 000000000..ee6308400 --- /dev/null +++ b/wasm-corpus/Dockerfile @@ -0,0 +1,45 @@ +FROM ubuntu:jammy + +# Set the environment variable to avoid prompts +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && \ + apt-get install -y curl build-essential gcc make pkg-config libssl-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Install rust +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y +ENV PATH="/root/.cargo/bin:${PATH}" +RUN rustc --version && cargo --version +RUN rustup target add wasm32-unknown-unknown +RUN rustup target add wasm32-wasi + +WORKDIR /tmp + +# Install wasi-sdk +RUN curl -L -O https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-20/wasi-sdk-20.0-linux.tar.gz && \ + mkdir -p /opt/wasi-sdk && \ + tar xvf wasi-sdk-20.0-linux.tar.gz && \ + cp -r wasi-sdk-20.0/* /opt/wasi-sdk + +ENV WASI_SDK_PATH=/opt/wasi-sdk + +# Install wabt tools +RUN curl -L -O https://github.com/WebAssembly/wabt/releases/download/1.0.34/wabt-1.0.34-ubuntu.tar.gz && \ + mkdir -p /opt/wabt && \ + tar xvf wabt-1.0.34-ubuntu.tar.gz && \ + cp -r wabt-1.0.34/* /opt/wabt + +# Install Javy +RUN curl -L -O https://github.com/bytecodealliance/javy/releases/download/v1.4.0/javy-x86_64-linux-v1.4.0.gz && \ + mkdir -p /opt/javy && \ + gunzip javy-x86_64-linux-v1.4.0.gz && \ + mv javy-x86_64-linux-v1.4.0 /usr/bin/javy && \ + chmod a+x /usr/bin/javy + +ENV PATH="/opt/wabt/bin:${PATH}" + +WORKDIR /usr/code + +ENTRYPOINT ["./compile.sh"] \ No newline at end of file diff --git a/wasm-corpus/README.md b/wasm-corpus/README.md new file mode 100644 index 000000000..4c47e721c --- /dev/null +++ b/wasm-corpus/README.md @@ -0,0 +1,34 @@ +# Wasm Corpus + + +This is a central place for all of our guest source code. It can be included in other maven projects as a test +resources bundle. + +If you want to add or edit guest modules for tests, you'll need to compile here. Add the program to the subfolder +for the appropriate source language. Example: src/test/resources/rust. + +You can use docker to compile everything. The run.sh script can orchestrate this for you: + +```bash +cd wasm-corpus + +# rebuild (or build image for first time) +./run.sh rebuild + +# compile all the submodules +./run.sh + +# compile just one folder +./run.sh rust +``` + + +If you want to run on your host machine you can run the `compile.sh` subscript yourself. +It has the same arguments (assumes you have WASI_SDK_PATH set for compiling c: + +```bash +cd wasm-corpus/src/test/resources + +# example +./compile.sh rust +``` diff --git a/wasm-corpus/pom.xml b/wasm-corpus/pom.xml new file mode 100644 index 000000000..f18b34b18 --- /dev/null +++ b/wasm-corpus/pom.xml @@ -0,0 +1,12 @@ + + + 4.0.0 + + com.dylibso.chicory + chicory + 999-SNAPSHOT + + wasm-corpus + Chicory - WASM Corpus + A Corpus of guest modules for testing + diff --git a/wasm-corpus/run.sh b/wasm-corpus/run.sh new file mode 100755 index 000000000..ad1a8dca5 --- /dev/null +++ b/wasm-corpus/run.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# run with `rebuild` to build the image +# run with no args to compile everything + +if [[ "$1" = "rebuild" ]]; then + docker build . --platform linux/amd64 -t chicory/wasm-corpus +else + # Optionally takes the args `lang` (ex: wat, rust) and `file` (ex: br.wat) + # both default to all + docker run --platform linux/amd64 -v ./src/test/resources:/usr/code --rm chicory/wasm-corpus $1 $2 +fi diff --git a/runtime/src/test/resources/sources/basic.c b/wasm-corpus/src/test/resources/c/basic.c similarity index 100% rename from runtime/src/test/resources/sources/basic.c rename to wasm-corpus/src/test/resources/c/basic.c diff --git a/runtime/src/test/resources/sources/memory.c b/wasm-corpus/src/test/resources/c/memory.c similarity index 100% rename from runtime/src/test/resources/sources/memory.c rename to wasm-corpus/src/test/resources/c/memory.c diff --git a/wasm-corpus/src/test/resources/compile.sh b/wasm-corpus/src/test/resources/compile.sh new file mode 100755 index 000000000..5497d0274 --- /dev/null +++ b/wasm-corpus/src/test/resources/compile.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +set -e + +compileWat() { + filename=$(basename "$1") + (set -x; wat2wasm $1 -o "./compiled/$filename.wasm") +} + +compileRust() { + filename=$(basename "$1") + # we can use the wasi targets for any file that end in -wasi.rs + if [[ "$filename" =~ wasi.rs$ ]]; then + target="wasm32-wasi" + crate_type="bin" + else + target="wasm32-unknown-unknown" + crate_type="cdylib" + fi + (set -x; rustc $1 --target=$target --crate-type=$crate_type -o "./compiled/$filename.wasm") +} + +ENV_WASI_SDK_PATH="${WASK_SDK_PATH:-/opt/wasi-sdk}" +compileC() { + filename=$(basename "$1") + (set -x; ${ENV_WASI_SDK_PATH}/bin/clang -g -o "./compiled/$filename.wasm" $1 -nostartfiles -Wl,--no-entry -Wl,--export=run) +} + +compileJavy() { + filename=$(basename "$1") + (set -x; javy compile $1 -o "./compiled/$filename.javy.wasm") +} + +compile() { + lang=$1 + case "$lang" in + wat) + compileWat $2 + ;; + rust) + compileRust $2 + ;; + c) + compileC $2 + ;; + javy) + compileJavy $2 + ;; + *) + echo "Don't know how to compile language $lang" + exit 1 + ;; + esac +} + +lang="${1:-all}" +path="${2:-all}" + +if [[ "$lang" == "all" ]]; then + langs=("wat" "rust" "c" "javy") +else + langs=("$lang") +fi + +for lang in "${langs[@]}"; do + echo "Compiling all modules in ./$lang/*" + for file in ./$lang/*; do + compile $lang $file + done +done diff --git a/runtime/src/test/resources/compiled/basic.c.wasm b/wasm-corpus/src/test/resources/compiled/basic.c.wasm old mode 100644 new mode 100755 similarity index 70% rename from runtime/src/test/resources/compiled/basic.c.wasm rename to wasm-corpus/src/test/resources/compiled/basic.c.wasm index 9f6a424cb..32afccd7d Binary files a/runtime/src/test/resources/compiled/basic.c.wasm and b/wasm-corpus/src/test/resources/compiled/basic.c.wasm differ diff --git a/wasm/src/test/resources/compiled/br.wat.wasm b/wasm-corpus/src/test/resources/compiled/br.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/br.wat.wasm rename to wasm-corpus/src/test/resources/compiled/br.wat.wasm diff --git a/wasm/src/test/resources/compiled/br_if.wat.wasm b/wasm-corpus/src/test/resources/compiled/br_if.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/br_if.wat.wasm rename to wasm-corpus/src/test/resources/compiled/br_if.wat.wasm diff --git a/runtime/src/test/resources/compiled/br_table.wat.wasm b/wasm-corpus/src/test/resources/compiled/br_table.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/br_table.wat.wasm rename to wasm-corpus/src/test/resources/compiled/br_table.wat.wasm diff --git a/runtime/src/test/resources/compiled/branching.wat.wasm b/wasm-corpus/src/test/resources/compiled/branching.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/branching.wat.wasm rename to wasm-corpus/src/test/resources/compiled/branching.wat.wasm diff --git a/wasm-corpus/src/test/resources/compiled/count_vowels.rs.wasm b/wasm-corpus/src/test/resources/compiled/count_vowels.rs.wasm new file mode 100755 index 000000000..837226f7a Binary files /dev/null and b/wasm-corpus/src/test/resources/compiled/count_vowels.rs.wasm differ diff --git a/wasm/src/test/resources/compiled/define-locals.wat.wasm b/wasm-corpus/src/test/resources/compiled/define-locals.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/define-locals.wat.wasm rename to wasm-corpus/src/test/resources/compiled/define-locals.wat.wasm diff --git a/wasm-corpus/src/test/resources/compiled/extism-runtime.wasm b/wasm-corpus/src/test/resources/compiled/extism-runtime.wasm new file mode 100755 index 000000000..07ce60393 Binary files /dev/null and b/wasm-corpus/src/test/resources/compiled/extism-runtime.wasm differ diff --git a/wasm/src/test/resources/compiled/float.wat.wasm b/wasm-corpus/src/test/resources/compiled/float.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/float.wat.wasm rename to wasm-corpus/src/test/resources/compiled/float.wat.wasm diff --git a/runtime/src/test/resources/compiled/globals.wat.wasm b/wasm-corpus/src/test/resources/compiled/globals.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/globals.wat.wasm rename to wasm-corpus/src/test/resources/compiled/globals.wat.wasm diff --git a/wasm-corpus/src/test/resources/compiled/greet-wasi.rs.wasm b/wasm-corpus/src/test/resources/compiled/greet-wasi.rs.wasm new file mode 100755 index 000000000..60c0fee24 Binary files /dev/null and b/wasm-corpus/src/test/resources/compiled/greet-wasi.rs.wasm differ diff --git a/wasm-corpus/src/test/resources/compiled/hello-wasi.rs.wasm b/wasm-corpus/src/test/resources/compiled/hello-wasi.rs.wasm new file mode 100755 index 000000000..399e4bb74 Binary files /dev/null and b/wasm-corpus/src/test/resources/compiled/hello-wasi.rs.wasm differ diff --git a/wasi/src/test/resources/compiled/hello-wasi.wat.wasm b/wasm-corpus/src/test/resources/compiled/hello-wasi.wat.wasm similarity index 100% rename from wasi/src/test/resources/compiled/hello-wasi.wat.wasm rename to wasm-corpus/src/test/resources/compiled/hello-wasi.wat.wasm diff --git a/runtime/src/test/resources/compiled/host-function.wat.wasm b/wasm-corpus/src/test/resources/compiled/host-function.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/host-function.wat.wasm rename to wasm-corpus/src/test/resources/compiled/host-function.wat.wasm diff --git a/wasm/src/test/resources/compiled/i32.wat.wasm b/wasm-corpus/src/test/resources/compiled/i32.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/i32.wat.wasm rename to wasm-corpus/src/test/resources/compiled/i32.wat.wasm diff --git a/wasm/src/test/resources/compiled/int_expr.wat.wasm b/wasm-corpus/src/test/resources/compiled/int_expr.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/int_expr.wat.wasm rename to wasm-corpus/src/test/resources/compiled/int_expr.wat.wasm diff --git a/wasm/src/test/resources/compiled/iterfact-64.wat.wasm b/wasm-corpus/src/test/resources/compiled/iterfact-64.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/iterfact-64.wat.wasm rename to wasm-corpus/src/test/resources/compiled/iterfact-64.wat.wasm diff --git a/runtime/src/test/resources/compiled/iterfact.wat.wasm b/wasm-corpus/src/test/resources/compiled/iterfact.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/iterfact.wat.wasm rename to wasm-corpus/src/test/resources/compiled/iterfact.wat.wasm diff --git a/wasi/src/test/resources/compiled/javy-demo.js.wasm b/wasm-corpus/src/test/resources/compiled/javy-demo.js.javy.wasm similarity index 99% rename from wasi/src/test/resources/compiled/javy-demo.js.wasm rename to wasm-corpus/src/test/resources/compiled/javy-demo.js.javy.wasm index ac9c04f9c..9591dba2a 100644 Binary files a/wasi/src/test/resources/compiled/javy-demo.js.wasm and b/wasm-corpus/src/test/resources/compiled/javy-demo.js.javy.wasm differ diff --git a/runtime/src/test/resources/compiled/kitchensink.wat.wasm b/wasm-corpus/src/test/resources/compiled/kitchensink.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/kitchensink.wat.wasm rename to wasm-corpus/src/test/resources/compiled/kitchensink.wat.wasm diff --git a/wasm/src/test/resources/compiled/memories.wat.wasm b/wasm-corpus/src/test/resources/compiled/memories.wat.wasm similarity index 100% rename from wasm/src/test/resources/compiled/memories.wat.wasm rename to wasm-corpus/src/test/resources/compiled/memories.wat.wasm diff --git a/runtime/src/test/resources/compiled/memory.c.wasm b/wasm-corpus/src/test/resources/compiled/memory.c.wasm old mode 100644 new mode 100755 similarity index 94% rename from runtime/src/test/resources/compiled/memory.c.wasm rename to wasm-corpus/src/test/resources/compiled/memory.c.wasm index ae03de9b4..222e0bd2e Binary files a/runtime/src/test/resources/compiled/memory.c.wasm and b/wasm-corpus/src/test/resources/compiled/memory.c.wasm differ diff --git a/runtime/src/test/resources/compiled/memory.wat.wasm b/wasm-corpus/src/test/resources/compiled/memory.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/memory.wat.wasm rename to wasm-corpus/src/test/resources/compiled/memory.wat.wasm diff --git a/runtime/src/test/resources/compiled/start.wat.wasm b/wasm-corpus/src/test/resources/compiled/start.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/start.wat.wasm rename to wasm-corpus/src/test/resources/compiled/start.wat.wasm diff --git a/runtime/src/test/resources/compiled/trap.wat.wasm b/wasm-corpus/src/test/resources/compiled/trap.wat.wasm similarity index 100% rename from runtime/src/test/resources/compiled/trap.wat.wasm rename to wasm-corpus/src/test/resources/compiled/trap.wat.wasm diff --git a/wasi/src/test/resources/sources/javy-demo.js b/wasm-corpus/src/test/resources/javy/javy-demo.js similarity index 99% rename from wasi/src/test/resources/sources/javy-demo.js rename to wasm-corpus/src/test/resources/javy/javy-demo.js index a4b3193ad..591bd5420 100644 --- a/wasi/src/test/resources/sources/javy-demo.js +++ b/wasm-corpus/src/test/resources/javy/javy-demo.js @@ -48,4 +48,4 @@ function writeOutput(output) { // Stdout file descriptor const fd = 1; Javy.IO.writeSync(fd, buffer); -} +} \ No newline at end of file diff --git a/runtime/src/test/resources/sources/count_vowels.rs b/wasm-corpus/src/test/resources/rust/count_vowels.rs similarity index 100% rename from runtime/src/test/resources/sources/count_vowels.rs rename to wasm-corpus/src/test/resources/rust/count_vowels.rs diff --git a/wasi/src/test/resources/sources/greet-wasi.rs b/wasm-corpus/src/test/resources/rust/greet-wasi.rs similarity index 100% rename from wasi/src/test/resources/sources/greet-wasi.rs rename to wasm-corpus/src/test/resources/rust/greet-wasi.rs diff --git a/wasi/src/test/resources/sources/hello-wasi.rs b/wasm-corpus/src/test/resources/rust/hello-wasi.rs similarity index 100% rename from wasi/src/test/resources/sources/hello-wasi.rs rename to wasm-corpus/src/test/resources/rust/hello-wasi.rs diff --git a/wasm/src/test/resources/sources/br.wat b/wasm-corpus/src/test/resources/wat/br.wat similarity index 100% rename from wasm/src/test/resources/sources/br.wat rename to wasm-corpus/src/test/resources/wat/br.wat diff --git a/wasm/src/test/resources/sources/br_if.wat b/wasm-corpus/src/test/resources/wat/br_if.wat similarity index 100% rename from wasm/src/test/resources/sources/br_if.wat rename to wasm-corpus/src/test/resources/wat/br_if.wat diff --git a/runtime/src/test/resources/sources/br_table.wat b/wasm-corpus/src/test/resources/wat/br_table.wat similarity index 100% rename from runtime/src/test/resources/sources/br_table.wat rename to wasm-corpus/src/test/resources/wat/br_table.wat diff --git a/runtime/src/test/resources/sources/branching.wat b/wasm-corpus/src/test/resources/wat/branching.wat similarity index 100% rename from runtime/src/test/resources/sources/branching.wat rename to wasm-corpus/src/test/resources/wat/branching.wat diff --git a/wasm/src/test/resources/sources/define-locals.wat b/wasm-corpus/src/test/resources/wat/define-locals.wat similarity index 100% rename from wasm/src/test/resources/sources/define-locals.wat rename to wasm-corpus/src/test/resources/wat/define-locals.wat diff --git a/wasm/src/test/resources/sources/float.wat b/wasm-corpus/src/test/resources/wat/float.wat similarity index 100% rename from wasm/src/test/resources/sources/float.wat rename to wasm-corpus/src/test/resources/wat/float.wat diff --git a/runtime/src/test/resources/sources/globals.wat b/wasm-corpus/src/test/resources/wat/globals.wat similarity index 100% rename from runtime/src/test/resources/sources/globals.wat rename to wasm-corpus/src/test/resources/wat/globals.wat diff --git a/wasi/src/test/resources/sources/hello-wasi.wat b/wasm-corpus/src/test/resources/wat/hello-wasi.wat similarity index 100% rename from wasi/src/test/resources/sources/hello-wasi.wat rename to wasm-corpus/src/test/resources/wat/hello-wasi.wat diff --git a/runtime/src/test/resources/sources/host-function.wat b/wasm-corpus/src/test/resources/wat/host-function.wat similarity index 100% rename from runtime/src/test/resources/sources/host-function.wat rename to wasm-corpus/src/test/resources/wat/host-function.wat diff --git a/wasm/src/test/resources/sources/i32.wat b/wasm-corpus/src/test/resources/wat/i32.wat similarity index 100% rename from wasm/src/test/resources/sources/i32.wat rename to wasm-corpus/src/test/resources/wat/i32.wat diff --git a/wasm/src/test/resources/sources/int_expr.wat b/wasm-corpus/src/test/resources/wat/int_expr.wat similarity index 100% rename from wasm/src/test/resources/sources/int_expr.wat rename to wasm-corpus/src/test/resources/wat/int_expr.wat diff --git a/wasm/src/test/resources/sources/iterfact-64.wat b/wasm-corpus/src/test/resources/wat/iterfact-64.wat similarity index 100% rename from wasm/src/test/resources/sources/iterfact-64.wat rename to wasm-corpus/src/test/resources/wat/iterfact-64.wat diff --git a/runtime/src/test/resources/sources/iterfact.wat b/wasm-corpus/src/test/resources/wat/iterfact.wat similarity index 100% rename from runtime/src/test/resources/sources/iterfact.wat rename to wasm-corpus/src/test/resources/wat/iterfact.wat diff --git a/runtime/src/test/resources/sources/kitchensink.wat b/wasm-corpus/src/test/resources/wat/kitchensink.wat similarity index 100% rename from runtime/src/test/resources/sources/kitchensink.wat rename to wasm-corpus/src/test/resources/wat/kitchensink.wat diff --git a/wasm/src/test/resources/sources/memories.wat b/wasm-corpus/src/test/resources/wat/memories.wat similarity index 100% rename from wasm/src/test/resources/sources/memories.wat rename to wasm-corpus/src/test/resources/wat/memories.wat diff --git a/runtime/src/test/resources/sources/memory.wat b/wasm-corpus/src/test/resources/wat/memory.wat similarity index 100% rename from runtime/src/test/resources/sources/memory.wat rename to wasm-corpus/src/test/resources/wat/memory.wat diff --git a/runtime/src/test/resources/sources/start.wat b/wasm-corpus/src/test/resources/wat/start.wat similarity index 100% rename from runtime/src/test/resources/sources/start.wat rename to wasm-corpus/src/test/resources/wat/start.wat diff --git a/runtime/src/test/resources/sources/trap.wat b/wasm-corpus/src/test/resources/wat/trap.wat similarity index 100% rename from runtime/src/test/resources/sources/trap.wat rename to wasm-corpus/src/test/resources/wat/trap.wat diff --git a/wasm/pom.xml b/wasm/pom.xml index 41959e17a..727a12b72 100644 --- a/wasm/pom.xml +++ b/wasm/pom.xml @@ -25,6 +25,11 @@ + + + ${project.basedir}/../wasm-corpus/src/test/resources + + com.dylibso.chicory diff --git a/wasm/src/test/java/com/dylibso/chicory/wasm/ParserTest.java b/wasm/src/test/java/com/dylibso/chicory/wasm/ParserTest.java index 8d9b0f59d..43632da02 100644 --- a/wasm/src/test/java/com/dylibso/chicory/wasm/ParserTest.java +++ b/wasm/src/test/java/com/dylibso/chicory/wasm/ParserTest.java @@ -124,18 +124,13 @@ public void shouldParseIterfact() throws IOException { @Test public void shouldParseAllFiles() { - File compiledDir = new File("src/test/resources/compiled/"); - File wasmDir = new File("src/test/resources/wasm/"); + File compiledDir = new File("../wasm-corpus/src/test/resources/compiled/"); List files = new ArrayList<>(); files.addAll( Arrays.asList( compiledDir.listFiles( (ignored, name) -> name.toLowerCase().endsWith(".wasm")))); - files.addAll( - Arrays.asList( - wasmDir.listFiles( - (ignored, name) -> name.toLowerCase().endsWith(".wasm")))); if (files.isEmpty()) { throw new RuntimeException("Could not find files"); @@ -157,7 +152,7 @@ public void shouldSupportCustomListener() throws IOException { var logger = new SystemLogger(); var parser = new Parser(logger); - try (InputStream is = getClass().getResourceAsStream("/wasm/code.wasm")) { + try (InputStream is = getClass().getResourceAsStream("/compiled/count_vowels.rs.wasm")) { parser.includeSection(SectionId.CUSTOM); parser.parse( is, @@ -173,16 +168,6 @@ public void shouldSupportCustomListener() throws IOException { } } - // @Test - // public void shouldParseAst() { - // var parser = new Parser("src/test/resources/wasm/code.wasm"); - // var module = parser.parseModule(); - // var codeSection = module.getCodeSection(); - // var fbody = codeSection.getFunctionBodies()[0]; - // var ast = fbody.getAst(); - // ast.print(); - // } - @Test public void shouldParseFloats() throws IOException { var logger = new SystemLogger(); diff --git a/wasm/src/test/resources/compiled/br_table.wat.wasm b/wasm/src/test/resources/compiled/br_table.wat.wasm deleted file mode 100644 index 8e72686fd..000000000 Binary files a/wasm/src/test/resources/compiled/br_table.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/branching.wat.wasm b/wasm/src/test/resources/compiled/branching.wat.wasm deleted file mode 100644 index 6bcdb337b..000000000 Binary files a/wasm/src/test/resources/compiled/branching.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/count_vowels.rs.wasm b/wasm/src/test/resources/compiled/count_vowels.rs.wasm deleted file mode 100644 index 110f7eed1..000000000 Binary files a/wasm/src/test/resources/compiled/count_vowels.rs.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/globals.wat.wasm b/wasm/src/test/resources/compiled/globals.wat.wasm deleted file mode 100644 index a96566924..000000000 Binary files a/wasm/src/test/resources/compiled/globals.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/hello-wasi.wat.wasm b/wasm/src/test/resources/compiled/hello-wasi.wat.wasm deleted file mode 100644 index 49ab9031f..000000000 Binary files a/wasm/src/test/resources/compiled/hello-wasi.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/host-function.wat.wasm b/wasm/src/test/resources/compiled/host-function.wat.wasm deleted file mode 100644 index d9e8a75ac..000000000 Binary files a/wasm/src/test/resources/compiled/host-function.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/iterfact.wat.wasm b/wasm/src/test/resources/compiled/iterfact.wat.wasm deleted file mode 100644 index c94bad26b..000000000 Binary files a/wasm/src/test/resources/compiled/iterfact.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/kitchensink.wat.wasm b/wasm/src/test/resources/compiled/kitchensink.wat.wasm deleted file mode 100644 index 814ed4220..000000000 Binary files a/wasm/src/test/resources/compiled/kitchensink.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/memory.wat.wasm b/wasm/src/test/resources/compiled/memory.wat.wasm deleted file mode 100644 index 1533e9df0..000000000 Binary files a/wasm/src/test/resources/compiled/memory.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/start.wat.wasm b/wasm/src/test/resources/compiled/start.wat.wasm deleted file mode 100644 index add32ee46..000000000 Binary files a/wasm/src/test/resources/compiled/start.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/compiled/trap.wat.wasm b/wasm/src/test/resources/compiled/trap.wat.wasm deleted file mode 100644 index 67b9d808b..000000000 Binary files a/wasm/src/test/resources/compiled/trap.wat.wasm and /dev/null differ diff --git a/wasm/src/test/resources/sources/br_table.wat b/wasm/src/test/resources/sources/br_table.wat deleted file mode 100644 index 7854206fe..000000000 --- a/wasm/src/test/resources/sources/br_table.wat +++ /dev/null @@ -1,25 +0,0 @@ -(module - -(func (export "switch_like") (param $p i32) (result i32) - (block - (block - (block - (block (local.get $p) - (br_table - 2 ;; p == 0 => (br 2) - 1 ;; p == 1 => (br 1) - 0 ;; p == 2 => (br 0) - 3)) ;; else => (br 3) - ;; Target for (br 0) - (i32.const 100) - (return)) - ;; Target for (br 1) - (i32.const 101) - (return)) - ;; Target for (br 2) - (i32.const 102) - (return)) - ;; Target for (br 3) - (i32.const 103) - (return)) -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/branching.wat b/wasm/src/test/resources/sources/branching.wat deleted file mode 100644 index d70bd05dc..000000000 --- a/wasm/src/test/resources/sources/branching.wat +++ /dev/null @@ -1,37 +0,0 @@ -(module -;; $foo roughly follows this logic: -;; -;; if (x == 0) -;; return 42; -;; else if (x == 1) -;; return 99; -;; else -;; return 7; -(func $foo (param i32) (result i32) - (local i32) - (block - (block - (block - ;; x == 0 - local.get 0 - i32.eqz - br_if 0 - - ;; x == 1 - local.get 0 - i32.const 1 - i32.eq - br_if 1 - - ;; the `else` case - i32.const 7 - local.set 1 - br 2) - i32.const 42 - local.set 1 - br 1) - i32.const 99 - local.set 1) - local.get 1) -(export "foo" (func $foo)) -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/count_vowels.rs b/wasm/src/test/resources/sources/count_vowels.rs deleted file mode 100644 index 8c9fd3747..000000000 --- a/wasm/src/test/resources/sources/count_vowels.rs +++ /dev/null @@ -1,13 +0,0 @@ -const VOWELS: &[char] = &['a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U']; - -#[no_mangle] -pub extern fn count_vowels() -> i32 { - let s = String::from("Hello World!"); - let mut count: i32 = 0; - for ch in s.chars() { - if VOWELS.contains(&ch) { - count += 1; - } - } - count -} \ No newline at end of file diff --git a/wasm/src/test/resources/sources/globals.wat b/wasm/src/test/resources/sources/globals.wat deleted file mode 100644 index bdcab8cfd..000000000 --- a/wasm/src/test/resources/sources/globals.wat +++ /dev/null @@ -1,13 +0,0 @@ -(module -;; TODO - we don't suppor this yet, only i32.const and i64.const -;;(global $from_env (import "env" "from_env") i32) -(global $from_wasm i32 (i32.const 10)) - -(func $doit (param i32) (result i32) - local.get 0 - global.get $from_wasm - i32.add -) - -(export "doit" (func $doit)) -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/hello-wasi.wat b/wasm/src/test/resources/sources/hello-wasi.wat deleted file mode 100644 index b3e6a89b8..000000000 --- a/wasm/src/test/resources/sources/hello-wasi.wat +++ /dev/null @@ -1,28 +0,0 @@ -(module - ;; https://github.com/bytecodealliance/wasmtime/blob/main/docs/WASI-tutorial.md#web-assembly-text-example - ;; Import the required fd_write WASI function which will write the given io vectors to stdout - ;; The function signature for fd_write is: - ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written - (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32))) - - (memory 1) - (export "memory" (memory 0)) - - ;; Write 'hello world\n' to memory at an offset of 8 bytes - ;; Note the trailing newline which is required for the text to appear - (data (i32.const 8) "hello world\n") - - (func $main (export "_start") - ;; Creating a new io vector within linear memory - (i32.store (i32.const 0) (i32.const 8)) ;; iov.iov_base - This is a pointer to the start of the 'hello world\n' string - (i32.store (i32.const 4) (i32.const 12)) ;; iov.iov_len - The length of the 'hello world\n' string - - (call $fd_write - (i32.const 1) ;; file_descriptor - 1 for stdout - (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0 - (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one. - (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written - ) - drop ;; Discard the number of bytes written from the top of the stack - ) -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/host-function.wat b/wasm/src/test/resources/sources/host-function.wat deleted file mode 100644 index bd0803801..000000000 --- a/wasm/src/test/resources/sources/host-function.wat +++ /dev/null @@ -1,29 +0,0 @@ -(module - ;; Import console.log. Takes a ptr and a length to the string in memory - (import "console" "log" (func $log (param i32) (param i32))) - (func (export "logIt") - (local $var i32) - ;; some random nops and drop, not important - nop - nop - i32.const 1 - drop - ;; start implementation - (local.set $var (i32.const 10)) - ;; call console.log("Hello, World!") 10 times - (loop - i32.const 13 - i32.const 0 - call $log - local.get $var - i32.const 1 - i32.sub - local.tee $var - br_if 0 - ) - ) - - (memory 1) - (data $.rodata (i32.const 0) "Hello, World!\00") -) - diff --git a/wasm/src/test/resources/sources/iterfact.wat b/wasm/src/test/resources/sources/iterfact.wat deleted file mode 100644 index 4a30bf266..000000000 --- a/wasm/src/test/resources/sources/iterfact.wat +++ /dev/null @@ -1,31 +0,0 @@ -(module -;; $iterFact computes factorial: -;; int result = 1; -;; while (i > 0) { -;; result = result * i; -;; i = i - 1; -;; } -(func $iterFact (param i32) (result i32) - (local i32) - i32.const 1 - local.set 1 - (block - local.get 0 - i32.eqz - br_if 0 - (loop - local.get 1 - local.get 0 - i32.mul - local.set 1 - local.get 0 - i32.const -1 - i32.add - local.tee 0 - i32.eqz - br_if 1 - br 0)) - local.get 1) - -(export "iterFact" (func $iterFact)) -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/kitchensink.wat b/wasm/src/test/resources/sources/kitchensink.wat deleted file mode 100644 index c582f7f1a..000000000 --- a/wasm/src/test/resources/sources/kitchensink.wat +++ /dev/null @@ -1,35 +0,0 @@ -(module - (memory 1) - (func (export "run") (param i32) (result i32) - local.get 0 - i32.const 10 - i32.add - i32.const 1 - i32.sub - i32.const 6 - i32.mul - i32.const 2 - i32.div_s - i32.const 40 - i32.and - i32.const 33 - i32.or - i32.const 22 - i32.xor - ;; 55 - - i32.const 2 - i32.shl - - i32.const 3 - i32.shr_s - - i32.const 4 - i32.rotl - - i32.const 6 - i32.rotr - - i32.extend8_s - ) -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/memory.wat b/wasm/src/test/resources/sources/memory.wat deleted file mode 100644 index bec9e556e..000000000 --- a/wasm/src/test/resources/sources/memory.wat +++ /dev/null @@ -1,19 +0,0 @@ -(module - (memory 1) - (func (export "run32") (param i32) (result i32) - i32.const 0 - local.get 0 - i32.store ;; store param0 at address 0 - i32.const 0 - i32.load - return - ) - (func (export "run64") (param i64) (result i64) - i32.const 0 - local.get 0 - i64.store ;; store param0 at address 0 - i32.const 0 - i64.load - return - ) -) diff --git a/wasm/src/test/resources/sources/start.wat b/wasm/src/test/resources/sources/start.wat deleted file mode 100644 index 3405db4e0..000000000 --- a/wasm/src/test/resources/sources/start.wat +++ /dev/null @@ -1,10 +0,0 @@ -(module - (import "env" "gotit" (func $gotit (param i32))) - (func $start - i32.const 42 - call $gotit - ) - (start $start) - (memory 1) - (data (i32.const 16) "\00\01\02\03") -) \ No newline at end of file diff --git a/wasm/src/test/resources/sources/trap.wat b/wasm/src/test/resources/sources/trap.wat deleted file mode 100644 index 65aa25c20..000000000 --- a/wasm/src/test/resources/sources/trap.wat +++ /dev/null @@ -1,12 +0,0 @@ -(module - (func $trap - unreachable - ) - (func $innerFunc - call $trap - ) - (func $start - call $innerFunc - ) - (start $start) -)