Merge pull request #4424 from RalfJung/aarch64-linux-ci

also test on arm-64 linux hosts
This commit is contained in:
Ralf Jung 2025-06-29 12:31:57 +00:00 committed by GitHub
commit 651d2f8f23
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 46 additions and 22 deletions

View file

@ -13,35 +13,55 @@ defaults:
shell: bash
jobs:
build:
test:
name: build and test on ${{ matrix.host_target }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
host_target: x86_64-unknown-linux-gnu
- os: macos-14
host_target: aarch64-apple-darwin
- os: windows-latest
host_target: i686-pc-windows-msvc
- host_target: x86_64-unknown-linux-gnu
os: ubuntu-latest
# Needs a libffi patch: <https://github.com/libffi-rs/libffi-rs/pull/160>
# - host_target: i686-unknown-linux-gnu
# os: ubuntu-latest
- host_target: aarch64-unknown-linux-gnu
os: ubuntu-24.04-arm
# Disabled due to <https://github.com/rust-lang/rust/issues/143184>.
# - host_target: armv7-unknown-linux-gnueabihf
# os: ubuntu-24.04-arm
- host_target: aarch64-apple-darwin
os: macos-latest
- host_target: i686-pc-windows-msvc
os: windows-latest
runs-on: ${{ matrix.os }}
env:
HOST_TARGET: ${{ matrix.host_target }}
steps:
- uses: actions/checkout@v4
- name: Install multilib dependencies
if: ${{ matrix.host_target == 'i686-unknown-linux-gnu' }}
run: |
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install gcc-multilib zlib1g-dev:i386 libffi-dev:i386
- name: Install multilib dependencies
if: ${{ matrix.host_target == 'armv7-unknown-linux-gnueabihf' }}
run: |
sudo dpkg --add-architecture armhf
sudo apt update
sudo apt install gcc-arm-linux-gnueabihf zlib1g-dev:armhf libffi-dev:armhf
- uses: ./.github/workflows/setup
with:
toolchain_flags: "--host ${{ matrix.host_target }}"
# The `style` job only runs on Linux; this makes sure the Windows-host-specific
# code is also covered by clippy.
- name: Check clippy
if: ${{ matrix.os == 'windows-latest' }}
run: ./miri clippy -- -D warnings
- name: Test Miri
run: ./ci/ci.sh
# The `style` job only runs on Linux; this makes sure the host-specific
# code is also covered by clippy.
- name: Check clippy
run: ./miri clippy -- -D warnings
style:
name: style checks
runs-on: ubuntu-latest
@ -73,7 +93,7 @@ jobs:
# ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
# And they should be added below in `cron-fail-notify` as well.
conclusion:
needs: [build, style, coverage]
needs: [test, style, coverage]
# We need to ensure this job does *not* get skipped if its dependencies fail,
# because a skipped job is considered a success by GitHub. So we have to
# overwrite `if:`. We use `!cancelled()` to ensure the job does still not get run
@ -135,7 +155,7 @@ jobs:
cron-fail-notify:
name: cronjob failure notification
runs-on: ubuntu-latest
needs: [build, style, coverage]
needs: [test, style, coverage]
if: ${{ github.event_name == 'schedule' && failure() }}
steps:
# Send a Zulip notification

View file

@ -2,6 +2,7 @@ name: "Miri CI setup"
description: "Sets up Miri CI"
inputs:
toolchain_flags:
description: extra flags to pass to rustup-toolchain-install-master
required: false
default: ''
runs:
@ -31,8 +32,9 @@ runs:
~/.cargo/bin
~/.cargo/.crates.toml
~/.cargo/.crates2.json
key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.lock', '.github/workflows/**/*.yml') }}
restore-keys: cargo-${{ runner.os }}
# Bump the version when something here changes that needs a cache reset.
key: cargo-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/Cargo.lock') }}-v1
restore-keys: cargo-${{ runner.os }}-${{ runner.arch }}
- name: Install rustup-toolchain-install-master
if: steps.cache.outputs.cache-hit != 'true'

View file

@ -143,11 +143,16 @@ case $HOST_TARGET in
GC_STRESS=1 MIR_OPT=1 MANY_SEEDS=64 TEST_BENCH=1 CARGO_MIRI_ENV=1 run_tests
# Extra tier 1
MANY_SEEDS=64 TEST_TARGET=i686-unknown-linux-gnu run_tests
MANY_SEEDS=64 TEST_TARGET=aarch64-unknown-linux-gnu run_tests
MANY_SEEDS=64 TEST_TARGET=x86_64-apple-darwin run_tests
MANY_SEEDS=64 TEST_TARGET=x86_64-pc-windows-gnu run_tests
;;
aarch64-unknown-linux-gnu)
# Host
GC_STRESS=1 MIR_OPT=1 MANY_SEEDS=64 TEST_BENCH=1 CARGO_MIRI_ENV=1 run_tests
# Extra tier 1 candidate
MANY_SEEDS=64 TEST_TARGET=aarch64-pc-windows-msvc run_tests
# Custom target JSON file
TEST_TARGET=tests/x86_64-unknown-kernel.json MIRI_NO_STD=1 run_tests_minimal no_std
;;
aarch64-apple-darwin)
# Host
@ -172,13 +177,10 @@ case $HOST_TARGET in
TEST_TARGET=wasm32-wasip2 run_tests_minimal $BASIC wasm
TEST_TARGET=wasm32-unknown-unknown run_tests_minimal no_std empty_main wasm # this target doesn't really have std
TEST_TARGET=thumbv7em-none-eabihf run_tests_minimal no_std
# Custom target JSON file
TEST_TARGET=tests/x86_64-unknown-kernel.json MIRI_NO_STD=1 run_tests_minimal no_std
;;
i686-pc-windows-msvc)
# Host
# Without GC_STRESS and with reduced many-seeds count as this is the slowest runner.
# (The macOS runner checks windows-msvc with full many-seeds count.)
# Without GC_STRESS as this is the slowest runner.
MIR_OPT=1 MANY_SEEDS=64 TEST_BENCH=1 run_tests
# Extra tier 1
# We really want to ensure a Linux target works on a Windows host,