Skip to content

Implement Garbage Collector structure support #1551

Implement Garbage Collector structure support

Implement Garbage Collector structure support #1551

Workflow file for this run

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