Merge pull request #1396 from bjorn3/aarch64_asm #2942
This file contains 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: CI | |
on: | |
- push | |
- pull_request | |
jobs: | |
rustfmt: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Avoid installing rustc-dev | |
run: | | |
sed -i 's/components.*/components = ["rustfmt"]/' rust-toolchain | |
echo 'profile = "minimal"' >> rust-toolchain | |
rustfmt -v | |
- name: Rustfmt | |
run: | | |
cargo fmt --check | |
rustfmt --check build_system/main.rs | |
rustfmt --check example/* | |
test: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 60 | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: x86_64-unknown-linux-gnu | |
- os: macos-latest | |
env: | |
TARGET_TRIPLE: x86_64-apple-darwin | |
# cross-compile from Linux to Windows using mingw | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: aarch64-unknown-linux-gnu | |
# s390x requires QEMU 6.1 or greater, we could build it from source, but ubuntu 22.04 comes with 6.2 by default | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: s390x-unknown-linux-gnu | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-msvc | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache cargo target dir | |
uses: actions/cache@v3 | |
with: | |
path: build/cg_clif | |
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Set MinGW as the default toolchain | |
if: matrix.os == 'windows-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: rustup set default-host x86_64-pc-windows-gnu | |
- name: Install MinGW toolchain and wine | |
if: matrix.os == 'ubuntu-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-mingw-w64-x86-64 wine-stable | |
- name: Install AArch64 toolchain and qemu | |
if: matrix.os == 'ubuntu-latest' && matrix.env.TARGET_TRIPLE == 'aarch64-unknown-linux-gnu' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-aarch64-linux-gnu qemu-user | |
- name: Install s390x toolchain and qemu | |
if: matrix.env.TARGET_TRIPLE == 's390x-unknown-linux-gnu' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-s390x-linux-gnu qemu-user | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Build | |
run: ./y.sh build --sysroot none | |
- name: Test | |
env: | |
TARGET_TRIPLE: ${{ matrix.env.TARGET_TRIPLE }} | |
run: ./y.sh test | |
- name: Install LLVM standard library | |
run: rustup target add ${{ matrix.env.TARGET_TRIPLE }} | |
# This is roughly config rust-lang/rust uses for testing | |
- name: Test with LLVM sysroot | |
# Skip native x86_64-pc-windows-gnu. It is way too slow and cross-compiled | |
# x86_64-pc-windows-gnu covers at least part of the tests. | |
if: matrix.os != 'windows-latest' || matrix.env.TARGET_TRIPLE != 'x86_64-pc-windows-gnu' | |
env: | |
TARGET_TRIPLE: ${{ matrix.env.TARGET_TRIPLE }} | |
run: ./y.sh test --sysroot llvm --no-unstable-features | |
# This job doesn't use cg_clif in any way. It checks that all cg_clif tests work with cg_llvm too. | |
test_llvm: | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Disable JIT tests | |
run: | | |
sed -i 's/jit./#jit./' config.txt | |
- name: Test | |
env: | |
TARGET_TRIPLE: x86_64-unknown-linux-gnu | |
run: ./y.sh test --use-backend llvm | |
bench: | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache cargo target dir | |
uses: actions/cache@v3 | |
with: | |
path: build/cg_clif | |
key: ${{ runner.os }}-x86_64-unknown-linux-gnu-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Cache cargo bin dir | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cargo/bin | |
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-cargo-bin-dir-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Install hyperfine | |
run: cargo install hyperfine || true | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Build | |
run: CI_OPT=1 ./y.sh build --sysroot none | |
- name: Benchmark | |
run: CI_OPT=1 ./y.sh bench | |
dist: | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 60 | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# FIXME update at some point in the future once most distros use a newer glibc | |
- os: ubuntu-20.04 | |
env: | |
TARGET_TRIPLE: x86_64-unknown-linux-gnu | |
- os: macos-latest | |
env: | |
TARGET_TRIPLE: x86_64-apple-darwin | |
# cross-compile from Linux to Windows using mingw | |
- os: ubuntu-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-msvc | |
- os: windows-latest | |
env: | |
TARGET_TRIPLE: x86_64-pc-windows-gnu | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Cache cargo target dir | |
uses: actions/cache@v3 | |
with: | |
path: build/cg_clif | |
key: ${{ runner.os }}-${{ matrix.env.TARGET_TRIPLE }}-dist-cargo-build-target-${{ hashFiles('rust-toolchain', '**/Cargo.lock') }} | |
- name: Set MinGW as the default toolchain | |
if: matrix.os == 'windows-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: rustup set default-host x86_64-pc-windows-gnu | |
- name: Install MinGW toolchain and wine | |
if: matrix.os == 'ubuntu-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y gcc-mingw-w64-x86-64 wine-stable | |
- name: Prepare dependencies | |
run: ./y.sh prepare | |
- name: Build backend | |
run: CI_OPT=1 ./y.sh build --sysroot none | |
- name: Build sysroot | |
run: CI_OPT=1 ./y.sh build | |
- name: Package prebuilt cg_clif | |
run: tar cvfJ cg_clif.tar.xz dist | |
- name: Upload prebuilt cg_clif | |
if: matrix.os == 'windows-latest' || matrix.env.TARGET_TRIPLE != 'x86_64-pc-windows-gnu' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: cg_clif-${{ matrix.env.TARGET_TRIPLE }} | |
path: cg_clif.tar.xz | |
- name: Upload prebuilt cg_clif (cross compile) | |
if: matrix.os != 'windows-latest' && matrix.env.TARGET_TRIPLE == 'x86_64-pc-windows-gnu' | |
uses: actions/upload-artifact@v3 | |
with: | |
name: cg_clif-${{ runner.os }}-cross-x86_64-mingw | |
path: cg_clif.tar.xz | |
release: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
if: ${{ github.ref == 'refs/heads/master' }} | |
needs: [rustfmt, test, bench, dist] | |
concurrency: | |
group: release-dev | |
cancel-in-progress: true | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download all built artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts/ | |
- run: | | |
ls -R artifacts/ | |
mkdir release/ | |
pushd artifacts/ | |
for dir in *; do | |
mv $dir/cg_clif.tar.xz ../release/$dir.tar.xz | |
rmdir $dir/ # verify $dir is empty | |
done | |
popd | |
rmdir artifacts/ # verify all artifacts are represented in release/ | |
ls -R release/ | |
- run: npm install --production | |
working-directory: .github/actions/github-release | |
- name: Publish Release | |
uses: ./.github/actions/github-release | |
with: | |
files: "release/*" | |
token: ${{ github.token }} | |
continue-on-error: true |