Add AArch64 tests to CI (#1526)
* Add AArch64 tests to CI This commit enhances our CI with an AArch64 builder. Currently we have no physical hardware to run on so for now we run all tests in an emulator. The AArch64 build is cross-compiled from x86_64 from Linux. Tests all happen in release mode with a recent version of QEMU (recent version because it's so much faster, and in release mode because debug mode tests take quite a long time in an emulator). The goal here was not to get all tests passing on CI, but rather to get AArch64 running on CI and get it green at the same time. To achieve that goal many tests are now ignored on aarch64 platforms. Many tests fail due to unimplemented functionality in the aarch64 backend (#1521), and all wasmtime tests involving compilation are also disabled due to panicking attempting to generate generate instruction offset information for trap symbolication (#1523). Despite this, though, all Cranelift tests and other wasmtime tests should be runnin on AArch64 through QEMU with this PR. Additionally we'll have an AArch64 binary release of Wasmtime for Linux, although it won't be too useful just yet since it will panic on almost all wasm modules. * Review comments
This commit is contained in:
76
.github/workflows/main.yml
vendored
76
.github/workflows/main.yml
vendored
@@ -266,13 +266,52 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
include:
|
||||
- build: x86_64-linux
|
||||
os: ubuntu-latest
|
||||
- build: x86_64-macos
|
||||
os: macos-latest
|
||||
- build: x86_64-windows
|
||||
os: windows-latest
|
||||
- build: aarch64-linux
|
||||
os: ubuntu-latest
|
||||
rust: stable
|
||||
target: aarch64-unknown-linux-gnu
|
||||
gcc_package: gcc-aarch64-linux-gnu
|
||||
gcc: aarch64-linux-gnu-gcc
|
||||
qemu: qemu-aarch64 -L /usr/aarch64-linux-gnu
|
||||
qemu_target: aarch64-linux-user
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: true
|
||||
- uses: ./.github/actions/install-rust
|
||||
- uses: ./.github/actions/binary-compatible-builds
|
||||
if: matrix.target == ''
|
||||
|
||||
- name: Install cross-compilation tools
|
||||
run: |
|
||||
set -ex
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y ${{ matrix.gcc_package }}
|
||||
|
||||
# Download and build qemu from source since the most recent release is
|
||||
# way faster at arm emulation than the current version github actions'
|
||||
# ubuntu image uses. Disable as much as we can to get it to build
|
||||
# quickly.
|
||||
curl https://download.qemu.org/qemu-4.2.0.tar.xz | tar xJf -
|
||||
cd qemu-4.2.0
|
||||
./configure --target-list=${{ matrix.qemu_target }} --prefix=$HOME/qemu --disable-tools --disable-slirp --disable-fdt --disable-capstone --disable-docs
|
||||
make -j$(nproc) install
|
||||
|
||||
# Configure Cargo for cross compilation and tell it how it can run
|
||||
# cross executables
|
||||
upcase=$(echo ${{ matrix.target }} | awk '{ print toupper($0) }' | sed 's/-/_/g')
|
||||
echo ::set-env name=CARGO_TARGET_${upcase}_RUNNER::$HOME/qemu/bin/${{ matrix.qemu }}
|
||||
echo ::set-env name=CARGO_TARGET_${upcase}_LINKER::${{ matrix.gcc }}
|
||||
echo ::set-env name=CARGO_BUILD_TARGET::${{ matrix.target }}
|
||||
rustup target add ${{ matrix.target }}
|
||||
if: matrix.target != ''
|
||||
|
||||
# Install wasm32-wasi target in order to build wasi-common's integration
|
||||
# tests
|
||||
@@ -285,7 +324,7 @@ jobs:
|
||||
- run: $CENTOS cargo build --release --manifest-path crates/c-api/Cargo.toml
|
||||
shell: bash
|
||||
# Test what we just built
|
||||
- run: $CENTOS cargo test --features test-programs/test_programs --release --all --exclude lightbeam --exclude wasmtime --exclude wasmtime-c-api --exclude wasmtime-fuzzing
|
||||
- run: $CENTOS cargo test --features test-programs/test_programs --release --all --exclude lightbeam
|
||||
shell: bash
|
||||
env:
|
||||
RUST_BACKTRACE: 1
|
||||
@@ -304,14 +343,18 @@ jobs:
|
||||
|
||||
# Move binaries to dist folder
|
||||
- run: cp target/release/wasmtime dist
|
||||
if: matrix.os != 'windows-latest'
|
||||
if: matrix.os != 'windows-latest' && matrix.target == ''
|
||||
- run: cp target/${{ matrix.target }}/release/wasmtime dist
|
||||
if: matrix.os != 'windows-latest' && matrix.target != ''
|
||||
- run: cp target/release/wasmtime.exe dist
|
||||
shell: bash
|
||||
if: matrix.os == 'windows-latest'
|
||||
|
||||
# Move libwasmtime dylib to dist folder
|
||||
- run: cp target/release/libwasmtime.{so,a} dist
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
if: matrix.os == 'ubuntu-latest' && matrix.target == ''
|
||||
- run: cp target/${{ matrix.target }}/release/libwasmtime.{so,a} dist
|
||||
if: matrix.os == 'ubuntu-latest' && matrix.target != ''
|
||||
- run: cp target/release/libwasmtime.{dylib,a} dist
|
||||
if: matrix.os == 'macos-latest'
|
||||
- run: cp target/release/wasmtime.{dll,lib,dll.lib} dist
|
||||
@@ -329,7 +372,7 @@ jobs:
|
||||
|
||||
- uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: bins-${{ matrix.os }}
|
||||
name: bins-${{ matrix.build }}
|
||||
path: dist
|
||||
|
||||
# Consumes all published artifacts from all the previous build steps, creates
|
||||
@@ -357,18 +400,22 @@ jobs:
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: doc-api
|
||||
- name: Download macOS binaries
|
||||
- name: Download x86_64 macOS binaries
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: bins-macos-latest
|
||||
- name: Download Linux binaries
|
||||
name: bins-x86_64-macos
|
||||
- name: Download x86_64 Linux binaries
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: bins-ubuntu-latest
|
||||
- name: Download Windows binaries
|
||||
name: bins-x86_64-linux
|
||||
- name: Download AArch64 Linux binaries
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: bins-windows-latest
|
||||
name: bins-aarch64-linux
|
||||
- name: Download x86_64 Windows binaries
|
||||
uses: actions/download-artifact@v1
|
||||
with:
|
||||
name: bins-x86_64-windows
|
||||
|
||||
- name: Assemble gh-pages
|
||||
run: |
|
||||
@@ -400,9 +447,10 @@ jobs:
|
||||
# Assemble all the build artifacts into tarballs and zip archives.
|
||||
- name: Assemble tarballs
|
||||
run: |
|
||||
./ci/build-tarballs.sh x86_64-linux ubuntu-latest
|
||||
./ci/build-tarballs.sh x86_64-windows windows-latest .exe
|
||||
./ci/build-tarballs.sh x86_64-macos macos-latest
|
||||
./ci/build-tarballs.sh x86_64-linux
|
||||
./ci/build-tarballs.sh x86_64-windows .exe
|
||||
./ci/build-tarballs.sh x86_64-macos
|
||||
./ci/build-tarballs.sh aarch64-linux
|
||||
|
||||
# Upload all assembled tarballs as an artifact of the github action run, so
|
||||
# that way even PRs can inspect the output.
|
||||
|
||||
Reference in New Issue
Block a user