You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wasm3/.github/workflows/tests.yml

599 lines
19 KiB
YAML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 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
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 11
run: sudo xcode-select -switch /Applications/Xcode_11.3.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=13.3'
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.0.7026061"
- 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 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 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 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
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 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