1
0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2024-11-08 12:59:17 +01:00
BLAKE3/.github/workflows/ci.yml
Jack O'Connor b8cdcb1f84 automatically fall back to the pure Rust build
There are two scenarios where compiling AVX-512 C or assembly code might
not work:

1. There might not be a C compiler installed at all. Most commonly this
   is either in cross-compiling situations, or with the Windows GNU
   target.
2. The installed C compiler might not support e.g. -mavx512f, because
   it's too old.

In both of these cases, print a relevant warning, and then automatically
fall back to using the pure Rust intrinsics build.

Note that this only affects x86 targets. Other targets always use pure
Rust, unless the "neon" feature is enabled.
2020-04-01 19:13:15 -04:00

169 lines
6.1 KiB
YAML

name: tests
on: [push, pull_request]
env:
BLAKE3_CI: "1"
RUSTFLAGS: "-D warnings"
jobs:
cargo_tests:
name: ${{ matrix.target.name }} ${{ matrix.channel }}
runs-on: ${{ matrix.target.os }}
strategy:
fail-fast: false
matrix:
target: [
{ "os": "ubuntu-latest", "toolchain": "x86_64-unknown-linux-gnu", "name": "Linux GNU" },
{ "os": "macOS-latest", "toolchain": "x86_64-apple-darwin", "name": "macOS" },
{ "os": "windows-latest", "toolchain": "x86_64-pc-windows-msvc", "name": "Windows MSVC" },
{ "os": "windows-latest", "toolchain": "x86_64-pc-windows-gnu", "name": "Windows GNU" }
]
channel: [stable, beta, nightly]
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: ${{ format('{0}-{1}', matrix.channel, matrix.target.toolchain) }}
profile: minimal
override: true
# Print out instruction set support, for debugging.
- run: cargo run --quiet --bin instruction_set_support
# Default tests plus Rayon.
- run: cargo test --features=rayon
# no_std tests.
- run: cargo test --no-default-features
# A matrix of different test settings:
# - debug vs release
# - assembly vs Rust+C intrinsics vs pure Rust intrinsics
# - different levels of SIMD support
#
# Full SIMD support.
- run: cargo test --features=
- run: cargo test --features=prefer_intrinsics
- run: cargo test --features=pure
- run: cargo test --features= --release
- run: cargo test --features=prefer_intrinsics --release
- run: cargo test --features=pure --release
# No AVX-512.
- run: cargo test --features=no_avx512
- run: cargo test --features=no_avx512,prefer_intrinsics
- run: cargo test --features=no_avx512,pure
- run: cargo test --features=no_avx512 --release
- run: cargo test --features=no_avx512,prefer_intrinsics --release
- run: cargo test --features=no_avx512,pure --release
# No AVX2.
- run: cargo test --features=no_avx512,no_avx2
- run: cargo test --features=no_avx512,no_avx2,prefer_intrinsics
- run: cargo test --features=no_avx512,no_avx2,pure
- run: cargo test --features=no_avx512,no_avx2 --release
- run: cargo test --features=no_avx512,no_avx2,prefer_intrinsics --release
- run: cargo test --features=no_avx512,no_avx2,pure --release
# No SSE4.1
- run: cargo test --features=no_avx512,no_avx2,no_sse41
- run: cargo test --features=no_avx512,no_avx2,no_sse41,prefer_intrinsics
- run: cargo test --features=no_avx512,no_avx2,no_sse41,pure
- run: cargo test --features=no_avx512,no_avx2,no_sse41 --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,prefer_intrinsics --release
- run: cargo test --features=no_avx512,no_avx2,no_sse41,pure --release
# Test benchmarks. RUSTC_BOOTSTRAP=1 lets this run on non-nightly toolchains.
- run: cargo test --benches
env:
RUSTC_BOOTSTRAP: 1
# Test vectors.
- name: test vectors
run: cargo test
working-directory: ./test_vectors
- name: test vectors intrinsics
run: cargo test --features=prefer_intrinsics
working-directory: ./test_vectors
- name: test vectors pure
run: cargo test --features=pure
working-directory: ./test_vectors
# Test b3sum.
- name: test b3sum
run: cargo test
working-directory: ./b3sum
- name: test b3sum --no-default-features
run: cargo test --no-default-features
working-directory: ./b3sum
# Test C code.
- name: cargo test C bindings assembly
run: cargo test
working-directory: ./c/blake3_c_rust_bindings
- name: cargo test C bindings intrinsics
run: cargo test --features=prefer_intrinsics
working-directory: ./c/blake3_c_rust_bindings
# Reference impl doc test.
- name: reference impl doc test
run: cargo test
working-directory: ./reference_impl
cross_tests:
name: cross ${{ matrix.arch }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch:
- i686-unknown-linux-musl
- armv7-unknown-linux-gnueabihf
- aarch64-unknown-linux-gnu
- mips-unknown-linux-gnu
steps:
- uses: actions/checkout@v1
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- run: cargo install cross
# Test the portable implementation on everything.
- run: cross test --target ${{ matrix.arch }}
# Test the NEON implementation on ARM targets.
- run: cross test --target ${{ matrix.arch }} --features=neon
if: startsWith(matrix.arch, 'armv7-') || startsWith(matrix.arch, 'aarch64-')
# Test vectors. Note that this uses a hacky script due to path dependency limitations.
- run: ./test_vectors/cross_test.sh --target ${{ matrix.arch }}
# Currently only on x86.
c_tests:
name: C Makefile tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
# Test the intrinsics-based implementations.
- run: make test
working-directory: ./c
- run: make clean && rm blake3_sse41.c
working-directory: ./c
- run: BLAKE3_NO_SSE41=1 make test
working-directory: ./c
- run: make clean && rm blake3_avx2.c
working-directory: ./c
- run: BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 make test
working-directory: ./c
- run: make clean && rm blake3_avx512.c
working-directory: ./c
- run: BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 BLAKE3_NO_AVX512=1 make test
working-directory: ./c
# Test the assembly implementations.
- run: make test_asm
working-directory: ./c
- run: make clean && rm blake3_sse41_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE41=1 make test_asm
working-directory: ./c
- run: make clean && rm blake3_avx2_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 make test_asm
working-directory: ./c
- run: make clean && rm blake3_avx512_x86-64_unix.S
working-directory: ./c
- run: BLAKE3_NO_SSE41=1 BLAKE3_NO_AVX2=1 BLAKE3_NO_AVX512=1 make test_asm
working-directory: ./c