orca/ext/wasm3/.github/workflows/tests.yml

620 lines
19 KiB
YAML
Raw Permalink Normal View History

2023-04-12 14:21:03 +00:00
name: tests
on:
push:
paths-ignore: ['**.md', '**.svg', '**.png']
pull_request:
paths-ignore: ['**.md', '**.svg', '**.png']
jobs:
linux:
runs-on: ubuntu-latest
name: linux-${{ matrix.config.target }}
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
config:
- {target: clang, cc: clang, }
- {target: clang-x86, cc: clang, flags: -DCMAKE_C_FLAGS="-m32", install: "gcc-multilib" }
- {target: gcc, cc: gcc, }
# Builds without uvwasi
- {target: gcc-no-uvwasi, cc: gcc, flags: -DBUILD_WASI=simple }
- {target: clang-no-uvwasi, cc: clang, flags: -DBUILD_WASI=simple }
# Debug builds
- {target: gcc-debug, cc: gcc, flags: -DCMAKE_BUILD_TYPE=Debug }
- {target: clang-no-uvwasi-debug, cc: clang, flags: -DCMAKE_BUILD_TYPE=Debug -DBUILD_WASI=simple }
# TODO: fails on numeric operations
#- {target: gcc-x86, cc: gcc, flags: "-m32", install: "gcc-multilib" }
steps:
- uses: actions/checkout@v2
- name: Install ${{ matrix.config.install }}
if: ${{ matrix.config.install }}
run: |
sudo apt update
sudo apt install ${{ matrix.config.install }}
- name: Configure
env:
CC: ${{ matrix.config.cc }}
CFLAGS: ${{ matrix.config.cflags }}
run: |
mkdir build
cd build
cmake ${{ matrix.config.flags }} ..
- name: Build
run: |
cmake --build build
- name: Test WebAssembly spec
run: cd test && python3 run-spec-test.py
- name: Test previous WebAssembly specs
run: |
cd test
python3 run-spec-test.py --spec=v1.1
- name: Test WASI apps
run: cd test && python3 run-wasi-test.py
linux-alpine:
runs-on: ubuntu-latest
container: alpine:3.10
steps:
- uses: actions/checkout@v2
- name: Prepare
run: apk add build-base cmake python3 git --update-cache
- name: Configure
run: |
mkdir build
cd build
cmake ..
- name: Build
run: cmake --build build
- name: Test WebAssembly spec
run: cd test && python3 run-spec-test.py
- name: Test WASI apps
run: cd test && python3 run-wasi-test.py
macos:
runs-on: macos-latest
name: macos-${{ matrix.config.target }}
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
config:
- {target: uvwasi, }
- {target: no-uvwasi, flags: -DBUILD_WASI=simple }
steps:
- uses: actions/checkout@v2
- name: Configure
run: |
mkdir build
cd build
cmake ${{ matrix.config.flags }} ..
- name: Build
run: |
cmake --build build
- name: Test WebAssembly spec
run: cd test && python3 run-spec-test.py
- name: Test previous WebAssembly specs
run: |
cd test
python3 run-spec-test.py --spec=v1.1
- name: Test WASI apps
run: cd test && python3 run-wasi-test.py
windows:
runs-on: windows-latest
name: windows-${{ matrix.config.target }}
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
config:
- {target: clang-x64, platform: "-A x64", toolset: "-T ClangCL" }
- {target: msvc-x64, platform: "-A x64", toolset: "" }
- {target: clang-x86, platform: "-A Win32", toolset: "-T ClangCL" }
- {target: msvc-x86, platform: "-A Win32", toolset: "" }
# Builds without uvwasi
- {target: clang-x64-no-uvwasi, platform: "-A x64", toolset: "-T ClangCL", flags: "-DBUILD_WASI=simple" }
- {target: msvc-x64-no-uvwasi, platform: "-A x64", toolset: "", flags: "-DBUILD_WASI=simple" }
- {target: clang-x86-no-uvwasi, platform: "-A Win32", toolset: "-T ClangCL", flags: "-DBUILD_WASI=simple" }
- {target: msvc-x86-no-uvwasi, platform: "-A Win32", toolset: "", flags: "-DBUILD_WASI=simple" }
defaults:
run:
shell: cmd
steps:
- uses: actions/checkout@v2
- name: Configure
run: |
mkdir build
cd build
cmake ${{ matrix.config.platform }} ${{ matrix.config.toolset }} ${{ matrix.config.flags }} ..
- name: Build
run: |
cmake --build build --config Release
cp ./build/Release/wasm3.exe ./build/
- name: Test WebAssembly spec
run: |
cd test
python run-spec-test.py
- name: Test previous WebAssembly specs
run: |
cd test
python run-spec-test.py --spec=v1.1
- name: Test WASI apps
run: |
cd test
python run-wasi-test.py
cygwin-build:
runs-on: windows-latest
steps:
- uses: actions/checkout@main
- name: Set up Cygwin
uses: egor-tensin/setup-cygwin@master
with:
platform: x64
packages: make gcc-g++ cmake
- run: cd $GITHUB_WORKSPACE && cmake -DBUILD_WASI=simple . && make
shell: C:\tools\cygwin\bin\bash.exe --login --norc -eo pipefail -o igncr '{0}'
wasi:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Install Python dependencies
run: |
python3 -m pip install pip==20.1.1
python3 -m pip install --upgrade setuptools wheel
pip3 --version
- name: Install Wasienv
env:
WASMER_RELEASE_TAG: "1.0.2"
run: curl https://raw.githubusercontent.com/wasienv/wasienv/master/install.sh | sh
- name: Configure
run: |
source $HOME/.wasienv/wasienv.sh
mkdir build-wasi
cd build-wasi
wasimake cmake ..
- name: Build
run: |
source $HOME/.wasienv/wasienv.sh
cmake --build build-wasi
- name: Test WebAssembly spec (in Wasmer)
run: |
source $HOME/.wasmer/wasmer.sh
cd test
python3 run-spec-test.py --exec "wasmer run --mapdir=/:. ../build-wasi/wasm3.wasm -- --repl"
- name: Test WASI apps (in Wasmer)
run: |
source $HOME/.wasmer/wasmer.sh
cd test
python3 run-wasi-test.py --exec "wasmer run --mapdir=/:. ../build-wasi/wasm3.wasm --" --fast
- name: Configure (native)
run: |
mkdir build
cd build
cmake ..
- name: Build (native)
run: |
cmake --build build
- name: Test WebAssembly spec (in Wasm3, self-hosting)
run: |
cd test
cp ../build-wasi/wasm3.wasm ./
python3 run-spec-test.py --exec "../build/wasm3 --stack-size 2097152 ../build-wasi/wasm3.wasm --repl"
- name: Test WASI apps (in Wasm3, self-hosting)
run: |
cd test
python3 run-wasi-test.py --fast --exec "../build/wasm3 --stack-size 2097152 ../build-wasi/wasm3.wasm"
ios:
runs-on: macos-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: List Xcode versions
run: ls /Applications | grep Xcode
- name: Select Xcode 12
run: sudo xcode-select -switch /Applications/Xcode_12.4.app
- name: Build (iPhone 11)
run: |
cd platforms/ios
xcodebuild build -scheme wasm3 -project wasm3.xcodeproj -configuration Release -destination 'platform=iOS Simulator,name=iPhone 11,OS=14.4'
android:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- uses: seanmiddleditch/gha-setup-ninja@master
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Install NDK
run: |
sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;22.1.7171670"
sudo ${ANDROID_HOME}/tools/bin/sdkmanager --uninstall "cmake;3.18.1"
sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "cmake;3.10.2.4988404"
- name: Build
run: |
cd platforms/android
./gradlew build
python:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v2
with:
path: wasm3
- name: Checkout pywasm3
uses: actions/checkout@v2
with:
repository: wasm3/pywasm3
path: pywasm3
- name: Set up Python
uses: actions/setup-python@v2
- name: Update and Build Python module
run: |
rm -rf ./pywasm3/wasm3
cp -r wasm3/source ./pywasm3/wasm3
pip install ./pywasm3
- name: Install WABT
run: |
sudo apt update
sudo apt install wabt
- name: Test
run: |
pip install pytest
cd ./pywasm3
pytest
cosmopolitan:
runs-on: ubuntu-20.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Build αcτµαlly pδrταblε εxεcµταblε
run: |
cd platforms/cosmopolitan
gcc -v
./build.sh
- name: Prepare tests
run: |
cd test
cp ../platforms/cosmopolitan/wasm3.com ./wasm3-lin.com
cp ../platforms/cosmopolitan/wasm3.com ./wasm3-win.com
sudo sh -c "echo ':APE:M::MZqFpD::/bin/sh:' >/proc/sys/fs/binfmt_misc/register"
- name: Test WebAssembly spec
run: |
cd test
python3 run-spec-test.py --exec "./wasm3-lin.com --repl"
- name: Test WASI apps
run: |
cd test
python3 run-wasi-test.py --fast --exec "./wasm3-lin.com"
- name: Install Wine64
run: |
sudo apt update
sudo apt install wine64
wine --version
- name: Test WebAssembly spec (in Wine)
run: |
cd test
python3 run-spec-test.py --exec "wine ./wasm3-win.com --repl"
- name: Test WASI apps (in Wine)
run: |
cd test
python3 run-wasi-test.py --fast --exec "wine ./wasm3-win.com"
cross-qemu:
runs-on: ubuntu-20.04
name: cross-qemu-${{ matrix.config.target }}
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
config:
#- {target: i386, toolchain: gcc-multilib, cc: clang -m32, qemu: qemu-i386-static }
- {target: arm, toolchain: gcc-arm-linux-gnueabi, cc: arm-linux-gnueabi-gcc, qemu: qemu-arm-static }
- {target: armhf, toolchain: gcc-arm-linux-gnueabihf, cc: arm-linux-gnueabihf-gcc, qemu: qemu-arm-static }
- {target: aarch64, toolchain: gcc-aarch64-linux-gnu, cc: aarch64-linux-gnu-gcc, qemu: qemu-aarch64-static }
- {target: riscv64, toolchain: gcc-riscv64-linux-gnu, cc: riscv64-linux-gnu-gcc, qemu: qemu-riscv64-static }
- {target: ppc, toolchain: gcc-powerpc-linux-gnu, cc: powerpc-linux-gnu-gcc, qemu: qemu-ppc-static }
- {target: ppc64, toolchain: gcc-powerpc64-linux-gnu, cc: powerpc64-linux-gnu-gcc, qemu: qemu-ppc64-static }
#- {target: ppc64le, toolchain: gcc-powerpc64le-linux-gnu, cc: powerpc64le-linux-gnu-gcc, qemu: qemu-ppc64le-static }
- {target: s390x, toolchain: gcc-s390x-linux-gnu, cc: s390x-linux-gnu-gcc, qemu: qemu-s390x-static }
- {target: mips, toolchain: gcc-mips-linux-gnu, cc: mips-linux-gnu-gcc, qemu: qemu-mips-static }
- {target: mips64, toolchain: gcc-mips64-linux-gnuabi64, cc: mips64-linux-gnuabi64-gcc, qemu: qemu-mips64-static }
- {target: mipsel, toolchain: gcc-mipsel-linux-gnu, cc: mipsel-linux-gnu-gcc, qemu: qemu-mipsel-static }
- {target: mips64el,toolchain: gcc-mips64el-linux-gnuabi64, cc: mips64el-linux-gnuabi64-gcc,qemu: qemu-mips64el-static }
- {target: alpha, toolchain: gcc-alpha-linux-gnu, cc: alpha-linux-gnu-gcc, qemu: qemu-alpha-static }
- {target: sparc64, toolchain: gcc-sparc64-linux-gnu, cc: sparc64-linux-gnu-gcc, qemu: qemu-sparc64-static, skip_wasi: true }
#- {target: i386 (u64 slots), toolchain: gcc-multilib, cc: clang -m32, qemu: qemu-i386-static, cflags: -Dd_m3Use32BitSlots=0 }
- {target: arm (u64 slots), toolchain: gcc-arm-linux-gnueabi, cc: arm-linux-gnueabi-gcc, qemu: qemu-arm-static, cflags: -Dd_m3Use32BitSlots=0 }
- {target: aarch64 (u64 slots), toolchain: gcc-aarch64-linux-gnu, cc: aarch64-linux-gnu-gcc, qemu: qemu-aarch64-static, cflags: -Dd_m3Use32BitSlots=0 }
- {target: ppc (u64 slots), toolchain: gcc-powerpc-linux-gnu, cc: powerpc-linux-gnu-gcc, qemu: qemu-ppc-static, cflags: -Dd_m3Use32BitSlots=0 }
- {target: ppc64 (u64 slots), toolchain: gcc-powerpc64-linux-gnu, cc: powerpc64-linux-gnu-gcc, qemu: qemu-ppc64-static, cflags: -Dd_m3Use32BitSlots=0 }
steps:
- uses: actions/checkout@v2
- name: Install QEMU
run: |
sudo apt update
sudo apt install qemu-user-static
- name: Install ${{ matrix.config.toolchain }}
run: |
sudo apt install ${{ matrix.config.toolchain }}
- name: Build
run: |
mkdir build
cd build
${{ matrix.config.cc }} -DASSERTS -Dd_m3HasWASI ${{ matrix.config.cflags }} \
-I../source ../source/*.c ../platforms/app/main.c \
-O3 -g0 -flto -lm -static \
-o wasm3
- name: Test WebAssembly spec
run: |
cd test
python3 run-spec-test.py --exec "${{ matrix.config.qemu }} ../build/wasm3 --repl"
- name: Test WASI apps
if: ${{ !matrix.config.skip_wasi }}
run: |
cd test
python3 run-wasi-test.py --fast --exec "${{ matrix.config.qemu }} ../build/wasm3"
platformio:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install -U platformio
- name: Build AVR ATmega1284
run: |
cd platforms/embedded/arduino
pio run -e mega1284
! nm .pio/build/mega1284/firmware.elf | grep printf
- name: Build ESP8266
run: |
cd platforms/embedded/esp8266
pio run
# TODO:
#- name: Build ESP32
# run: |
# cd platforms/embedded/esp32-pio
# pio run
platformio-arm:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install -U platformio
- name: Build Arduino MKR1000
run: |
cd platforms/embedded/arduino
pio run -e mkr1000
- name: Build Blue Pill (JeeH)
run: |
cd platforms/embedded/bluepill
pio run
- name: Build TinyBLE
run: |
cd platforms/embedded/arduino
pio run -e tinyBLE
- name: Build MXChip AZ3166
run: |
cd platforms/embedded/arduino
pio run -e az3166
platformio-riscv:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install -U platformio
- name: Build HiFive1
run: |
cd platforms/embedded/hifive1
pio run
- name: Build Sipeed MAIX
run: |
cd platforms/embedded/arduino
pio run -e maix
particle:
runs-on: ubuntu-latest
timeout-minutes: 10
if: "github.event_name == 'push'"
steps:
- uses: actions/checkout@v2
- name: Set up Particle CLI
run: sudo npm install -g particle-cli
- name: Log in
env:
PARTICLE_TOKEN: ${{ secrets.PARTICLE_TOKEN }}
run: particle login --token $PARTICLE_TOKEN
- name: Build Photon
run: |
cd platforms/embedded/particle
particle compile --followSymlinks photon
particle compile --followSymlinks argon
esp32-idf:
runs-on: ubuntu-latest
container: igrr/idf-qemu:release-v4.0-esp-develop-20191228
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Build for ESP32 (IDF v4.0)
run: |
. $IDF_PATH/export.sh
cd platforms/embedded/esp32-idf
export EXTRA_CFLAGS="-Werror"
idf.py build
shell: bash
- name: Test for ESP32 in QEMU
run: |
cd platforms/embedded/esp32-idf
make-flash-img.sh wasm3 flash_img.bin
qemu-system-xtensa -machine esp32 -nographic -drive file=flash_img.bin,if=mtd,format=raw -no-reboot | tee out.txt
grep "Result: 46368" out.txt
grep "Elapsed: " out.txt
grep "Restarting..." out.txt
test $(($(grep "ets Jun 8 2016" out.txt | wc -l))) -eq 1
- name: Check that IDF and PIO examples are in sync
run: |
diff -q platforms/embedded/esp32-idf/main/main.cpp platforms/embedded/esp32-pio/src/main.cpp
# TODO: also check that the build flags are in sync
cpp:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Configure
run: |
cd platforms/cpp
mkdir build
cd build
cmake ..
- name: Build
run: |
cd platforms/cpp
cmake --build build
- name: Run
run: |
cd platforms/cpp/build
./wasm3_cpp_example
as-cpp:
name: maintenance (build as C++)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Build
run: |
mkdir build
cd build
clang -xc++ -Dd_m3HasWASI \
-I../source ../source/*.c ../platforms/app/main.c \
-O3 -g0 -lm \
-o wasm3
- name: Test
run: ./build/wasm3 ./test/wasi/simple/test.wasm
with-logs:
name: maintenance (debug logs)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Build
run: |
mkdir build
cd build
clang -xc++ -Dd_m3HasWASI -DDEBUG \
-Dd_m3EnableOpTracing=1 \
-Dd_m3EnableStrace=1 \
-Dd_m3LogParse=1 \
-Dd_m3LogModule=1 \
-Dd_m3LogCompile=1 \
-Dd_m3LogWasmStack=1 \
-Dd_m3LogEmit=1 \
-Dd_m3LogCodePages=1 \
-Dd_m3LogRuntime=1 \
-Dd_m3LogNativeStack=1 \
-I../source ../source/*.c ../platforms/app/main.c \
-O3 -g0 -lm \
-o wasm3
- name: Test
run: ./build/wasm3 ./test/wasi/simple/test.wasm > /dev/null
preprocessed-ops:
name: maintenance (preprocess ops)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v2
- name: Install sponge
run: |
sudo apt update
sudo apt install moreutils
- name: Build
run: |
make -f extra/utils.mk preprocess
mkdir build
cd build
gcc -Dd_m3HasWASI \
-I../source ../source/*.c ../platforms/app/main.c \
-O3 -g0 -lm \
-o wasm3
- name: Test
run: ./build/wasm3 ./test/wasi/simple/test.wasm
spellcheck:
runs-on: ubuntu-latest
steps:
- name: Set up Python
uses: actions/setup-python@v2
- name: Install codespell
run: |
pip install codespell
- name: Spellcheck
run: |
codespell