Implement Garbage Collector structure support #1551
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Actions | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
env: | |
RUNNER: tools/run-tests.py | |
jobs: | |
check-tidy: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo add-apt-repository "deb http://mirrors.kernel.org/ubuntu/ focal main universe" | |
sudo apt update | |
sudo apt install -y clang-format-10 | |
- name: Test | |
run: tools/check_tidy.py | |
build-on-macos: | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: [debug, release] | |
switch: [--jit, --jit-no-reg-alloc, ""] | |
runs-on: macos-13 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
brew update | |
brew install ninja pkg-config | |
- name: Build x64 | |
env: | |
BUILD_OPTIONS: -DWALRUS_MODE=${{ matrix.mode }} -DWALRUS_OUTPUT=shell -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/mac $BUILD_OPTIONS | |
ninja -Cout/mac | |
- name: "Remove 2 test files due to stack overflow occurred by recursion calls in debug mode build by clang" | |
if: matrix.mode == 'debug' && matrix.switch == '' | |
run: | | |
rm ./test/wasm-spec/core/call.wast | |
rm ./test/wasm-spec/core/call_indirect.wast | |
rm ./test/extended/gc/call_ref.wast | |
- name: Run Tests | |
run: | | |
#FIXME try-catch is unstable in macos build | |
$RUNNER --engine="$GITHUB_WORKSPACE/out/mac/walrus" ${{ matrix.switch }} | |
build-on-macos-arm64: | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: [debug, release] | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
brew update | |
brew install ninja | |
- name: Build arm64 | |
env: | |
BUILD_OPTIONS: -DWALRUS_MODE=${{ matrix.mode }} -DWALRUS_OUTPUT=shell -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/mac $BUILD_OPTIONS | |
ninja -Cout/mac | |
- name: "Remove 2 test files due to stack overflow occurred by recursion calls in debug mode build by clang" | |
if: matrix.mode == 'debug' | |
run: | | |
rm ./test/wasm-spec/core/call.wast | |
rm ./test/wasm-spec/core/call_indirect.wast | |
rm ./test/extended/gc/call_ref.wast | |
- name: Run Tests | |
run: | | |
#FIXME try-catch is unstable in macos build | |
$RUNNER --engine="$GITHUB_WORKSPACE/out/mac/walrus" | |
build-by-clang: | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: | |
- x86 | |
- x64 | |
mode: | |
- debug | |
- release | |
compile: | |
- name: Build | |
options: "" | |
tests: "" | |
- name: Pure build | |
options: -DWALRUS_WASI=OFF | |
tests: "basic-tests wasm-test-core jit" | |
switch: | |
- --jit | |
- --jit-no-reg-alloc | |
- "" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
- name: ${{ matrix.compile.name }} ${{ matrix.arch }} | |
env: | |
BUILD_OPTIONS: -DWALRUS_ARCH=${{ matrix.arch }} -DWALRUS_MODE=${{ matrix.mode }} -DWALRUS_OUTPUT=shell ${{ matrix.compile.options }} -GNinja | |
run: | | |
CC=clang CXX=clang++ cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/ $BUILD_OPTIONS | |
ninja -Cout/ | |
- name: "Remove 2 test files due to stack overflow occurred by recursion calls in debug mode build by clang when walrus interpreter is used" | |
if: matrix.mode == 'debug' && matrix.switch == '' | |
run: | | |
rm ./test/wasm-spec/core/call.wast | |
rm ./test/wasm-spec/core/call_indirect.wast | |
rm ./test/extended/gc/call_ref.wast | |
- name: Run Tests | |
run: | | |
$RUNNER ${{ matrix.switch }} --engine="$GITHUB_WORKSPACE/out/walrus" ${{ matrix.compile.tests }} | |
build-test-on-x86_x64: | |
strategy: | |
matrix: | |
arch: | |
- x86 | |
- x64 | |
# it is tested in release mode at buid-test-performance-x64_x86 | |
switch: | |
- --jit | |
- --jit-no-reg-alloc | |
- "" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
- name: Build ${{ matrix.arch }} | |
env: | |
BUILD_OPTIONS: -DWALRUS_ARCH=${{ matrix.arch }} -DWALRUS_HOST=linux -DWALRUS_MODE=debug -DWALRUS_OUTPUT=shell -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/linux/${{ matrix.arch }} $BUILD_OPTIONS | |
ninja -Cout/linux/${{ matrix.arch }} | |
- name: Run Tests | |
run: | | |
$RUNNER ${{ matrix.switch }} --engine="$GITHUB_WORKSPACE/out/linux/${{ matrix.arch }}/walrus" | |
build-on-x64-with-perf: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
- name: Build x64 | |
env: | |
BUILD_OPTIONS: -DWALRUS_JITPERF=1 -DWALRUS_MODE=debug -DWALRUS_OUTPUT=shell -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/linux/x64 $BUILD_OPTIONS | |
ninja -Cout/linux/x64 | |
build-test-on-arches-with-qemu: | |
name: ${{ matrix.compile.name }} on ${{ matrix.arch.name }} ${{ matrix.mode }} ${{ matrix.switch }} | |
strategy: | |
fail-fast: false | |
matrix: | |
switch: | |
- --jit | |
- "" | |
compile: | |
- name: Build | |
options: "" | |
tests: "" | |
- name: Pure build | |
options: -DWALRUS_WASI=OFF | |
tests: "basic-tests wasm-test-core jit" | |
mode: | |
- debug | |
- release | |
arch: | |
- name: armt2 | |
toolchain: | |
url: https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--glibc--stable-2024.05-1.tar.xz | |
name: armv7-eabihf--glibc--stable-2024.05-1.tar.xz | |
CC: arm-buildroot-linux-gnueabihf-gcc-13.3.0.br_real | |
CXX: arm-buildroot-linux-gnueabihf-g++.br_real | |
CFFLAGS: -mthumb | |
CFLAGS: -mthumb | |
qemu: | |
target: arm-linux-user | |
name: qemu-arm | |
walrus: arm | |
- name: armv7 | |
toolchain: | |
url: https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--glibc--stable-2024.05-1.tar.xz | |
name: armv7-eabihf--glibc--stable-2024.05-1.tar.xz | |
CC: arm-buildroot-linux-gnueabihf-gcc-13.3.0.br_real | |
CXX: arm-buildroot-linux-gnueabihf-g++.br_real | |
qemu: | |
target: arm-linux-user | |
name: qemu-arm | |
walrus: arm | |
- name: aarch64 | |
toolchain: | |
url: https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--glibc--stable-2024.05-1.tar.xz | |
name: aarch64--glibc--stable-2024.05-1.tar.xz | |
CC: aarch64-buildroot-linux-gnu-gcc-13.3.0.br_real | |
CXX: aarch64-buildroot-linux-gnu-g++.br_real | |
qemu: | |
target: aarch64-linux-user | |
name: qemu-aarch64 | |
walrus: aarch64 | |
- name: riscv64 | |
toolchain: | |
url: https://toolchains.bootlin.com/downloads/releases/toolchains/riscv64-lp64d/tarballs/riscv64-lp64d--glibc--stable-2024.05-1.tar.xz | |
name: riscv64-lp64d--glibc--stable-2024.05-1.tar.xz | |
CC: riscv64-buildroot-linux-gnu-gcc-13.3.0.br_real | |
CXX: riscv64-buildroot-linux-gnu-g++.br_real | |
CFLAGS: -march=rv64gv | |
CXXFLAGS: -march=rv64gv | |
qemu: | |
target: riscv64-linux-user | |
name: qemu-riscv64 | |
walrus: riscv64 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install compiler | |
run: | | |
sudo apt update | |
sudo apt install -y make wget ninja-build libglib2.0-dev | |
wget ${{ matrix.arch.toolchain.url }} | |
mkdir toolchain | |
tar -xvf ${{ matrix.arch.toolchain.name }} -C toolchain --strip-components=1 | |
- name: Install qemu | |
run: | | |
wget https://download.qemu.org/qemu-9.0.2.tar.xz | |
tar -xvf qemu-9.0.2.tar.xz | |
cd qemu-9.0.2 | |
./configure --target-list="${{ matrix.arch.qemu.target }}" | |
make -j4 | |
- name: ${{ matrix.compile.name }} in ${{ matrix.arch.name }} | |
env: | |
CC: ./toolchain/bin/${{ matrix.arch.toolchain.CC }} | |
CXX: ./toolchain/bin/${{ matrix.arch.toolchain.CXX }} | |
CFLAGS: ${{ matrix.arch.toolchain.CFLAGS }} | |
CXXFLAGS: ${{ matrix.arch.toolchain.CXXFLAGS }} | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -DCMAKE_EXE_LINKER_FLAGS="-static" -Bout/ -DCMAKE_BUILD_TYPE=${{ matrix.mode }} -DWALRUS_ARCH=${{ matrix.arch.walrus }} -DWALRUS_HOST=linux -DWALRUS_MODE=debug -DWALRUS_OUTPUT=shell ${{ matrix.compile.options }} -GNinja | |
ninja -C out/ | |
- name: "Remove 2 test files due to stack overflow occurred by recursion calls in interpreter mode build by gcc" | |
if: matrix.switch == '' | |
run: | | |
rm ./test/wasm-spec/core/call.wast | |
rm ./test/wasm-spec/core/call_indirect.wast | |
rm ./test/extended/gc/call_ref.wast | |
- name: Test in ${{matrix.arch.name}} | |
run: | | |
$RUNNER ${{ matrix.switch }} --engine="./out/walrus" --qemu="./qemu-9.0.2/build/${{ matrix.arch.qemu.name }}" ${{ matrix.compile.tests }} | |
test-on-windows-x86-x64: | |
runs-on: windows-2022 | |
strategy: | |
matrix: | |
arch: [x86, x64] | |
steps: | |
- name: Set git cllf config | |
run: | | |
git config --global core.autocrlf input | |
git config --global core.eol lf | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: lukka/get-cmake@latest | |
with: | |
cmakeVersion: "~3.25.0" # <--= optional, use most recent 3.25.x version | |
- uses: GuillaumeFalourd/setup-windows10-sdk-action@v2 | |
with: | |
sdk-version: 26100 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Install msvc redist package | |
run: | | |
(new-object System.Net.WebClient).DownloadFile('https://github.com/abbodi1406/vcredist/releases/download/v0.73.0/VisualCppRedist_AIO_x86_x64.exe','VisualCppRedist_AIO_x86_x64.exe') | |
.\VisualCppRedist_AIO_x86_x64.exe /y | |
- uses: ilammy/[email protected] | |
with: | |
arch: ${{ matrix.arch }} | |
sdk: "10.0.26100.0" | |
- name: Build ${{ matrix.arch }} Release | |
run: | | |
CMake -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SYSTEM_VERSION:STRING="10.0" -DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch }} -Bout/ -G Ninja -DCMAKE_C_COMPILER=cl -DCMAKE_CXX_COMPILER=cl -DCMAKE_BUILD_TYPE=release | |
CMake --build out/ --config Release | |
- name: Run tests | |
run: | | |
python tools\run-tests.py --engine=%cd%\out\walrus.exe | |
shell: cmd | |
- if: ${{ failure() }} | |
uses: mxschmitt/action-tmate@v3 | |
timeout-minutes: 15 | |
build-test-extended-feature: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: [debug, release] | |
arch: [x64, x86] | |
switch: [--jit, --jit-no-reg-alloc, ""] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
- name: Build ${{ matrix.arch}} | |
env: | |
BUILD_OPTIONS: -DWALRUS_ARCH=${{ matrix.arch }} -DWALRUS_HOST=linux -DWALRUS_MODE=${{ matrix.mode }} -DWALRUS_OUTPUT=shell -DWALRUS_EXTENDED_FEATURES=ON -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/extended $BUILD_OPTIONS | |
ninja -Cout/extended | |
- name: Run Tests | |
run: | | |
$RUNNER --engine="$GITHUB_WORKSPACE/out/extended/walrus" ${{ matrix.switch }} wasm-test-extended | |
build-test-performance-x64_x86: | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: | |
- x64 | |
- x86 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
sudo pip install pandas | |
sudo pip install py-markdown-table | |
sudo pip install tqdm | |
- name: Build ${{ matrix.arch }} | |
env: | |
BUILD_OPTIONS: -DWALRUS_ARCH=${{ matrix.arch }} -DWALRUS_HOST=linux -DWALRUS_MODE=release -DWALRUS_OUTPUT=shell -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/linux/${{ matrix.arch }} $BUILD_OPTIONS | |
ninja -Cout/linux/${{ matrix.arch }} | |
- name: Run Tests | |
run: | | |
test/wasmBenchmarker/benchmark.py --engines $GITHUB_WORKSPACE/out/linux/${{ matrix.arch }}/walrus --iterations 2 --verbose --summary --results i j2i n2i j n2j | |
built-test-wasm-c-api: | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: [debug, release] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
- name: Build x64 | |
env: | |
BUILD_OPTIONS: -DWALRUS_MODE=${{ matrix.mode }} -DWALRUS_ARCH=x64 -DWALRUS_OUTPUT=api_test -GNinja | |
run: | | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/api_test $BUILD_OPTIONS | |
ninja -Cout/api_test | |
cp third_party/wasm-c-api/example/*.wasm out/api_test/. | |
- name: Run Tests | |
working-directory: ./out/api_test | |
run: | | |
./wasm-c-api-callback | |
./wasm-c-api-global | |
./wasm-c-api-hello | |
./wasm-c-api-memory | |
./wasm-c-api-multi | |
./wasm-c-api-table | |
coverity-scan: | |
if: ${{ github.repository == 'Samsung/walrus' && github.event_name == 'push' }} | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Install Packages | |
run: | | |
sudo apt update | |
sudo apt install -y ninja-build gcc-multilib g++-multilib | |
- name: Download Coverity Tool | |
env: | |
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} | |
run: | | |
wget -q https://scan.coverity.com/download/cxx/linux64 --post-data "token=$TOKEN&project=Samsung-walrus" -O cov-analysis-linux64.tar.gz | |
mkdir cov-analysis-linux64 | |
tar xzf cov-analysis-linux64.tar.gz --strip 1 -C cov-analysis-linux64 | |
- name: Build | |
env: | |
BUILD_OPTIONS: -DWALRUS_MODE=release -DWALRUS_OUTPUT=shell -GNinja | |
run: | | |
export PATH=$GITHUB_WORKSPACE/cov-analysis-linux64/bin:$PATH | |
cmake -DCMAKE_POLICY_VERSION_MINIMUM=3.5 -H. -Bout/coverity_scan $BUILD_OPTIONS | |
cov-build --dir cov-int ninja -Cout/coverity_scan | |
- name: Submit | |
env: | |
TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} | |
NOTI_MAIL: ${{ secrets.COVERITY_SCAN_MAIL }} | |
run: | | |
tar czvf walrus.tgz cov-int | |
curl \ | |
--form token=$TOKEN \ | |
--form email=$NOTI_MAIL \ | |
--form [email protected] \ | |
--form version="0.0.1" \ | |
--form description="walrus coverity scan" \ | |
https://scan.coverity.com/builds?project=Samsung-walrus |