Use LLVM intrinsics instead of inline asm whereever possible #2275
Workflow file for this run
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: | |
branches: | |
- auto | |
- try | |
pull_request: | |
branches: | |
- master | |
jobs: | |
style: | |
name: Check Style | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: rustup update nightly --no-self-update && rustup default nightly | |
- run: ci/style.sh | |
docs: | |
name: Build Documentation | |
needs: [style] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: rustup update nightly --no-self-update && rustup default nightly | |
- run: ci/dox.sh | |
env: | |
CI: 1 | |
- name: Publish documentation | |
run: | | |
cd target/doc | |
git init | |
git add . | |
git -c user.name='ci' -c user.email='ci' commit -m init | |
git push -f -q https://git:${{ secrets.github_token }}@github.com/${{ github.repository }} HEAD:gh-pages | |
if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' | |
verify: | |
name: Automatic intrinsic verification | |
needs: [style] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: rustup update nightly --no-self-update && rustup default nightly | |
- run: cargo test --manifest-path crates/stdarch-verify/Cargo.toml | |
env_override: | |
name: Env Override | |
needs: [style] | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: rustup update nightly --no-self-update && rustup default nightly | |
- run: RUST_STD_DETECT_UNSTABLE=avx cargo test --features=std_detect_env_override --manifest-path crates/std_detect/Cargo.toml env_override_no_avx | |
shell: bash | |
test: | |
needs: [style] | |
name: Test | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
target: | |
# Dockers that are run through docker on linux | |
- i686-unknown-linux-gnu | |
- x86_64-unknown-linux-gnu | |
- x86_64-unknown-linux-gnu-emulated | |
- arm-unknown-linux-gnueabihf | |
- armv7-unknown-linux-gnueabihf | |
- aarch64-unknown-linux-gnu | |
- riscv64gc-unknown-linux-gnu | |
- powerpc64le-unknown-linux-gnu | |
# MIPS targets disabled since they are dropped to tier 3. | |
# See https://github.com/rust-lang/compiler-team/issues/648 | |
#- mips-unknown-linux-gnu | |
#- mips64-unknown-linux-gnuabi64 | |
#- mips64el-unknown-linux-gnuabi64 | |
#- mipsel-unknown-linux-musl | |
- s390x-unknown-linux-gnu | |
- wasm32-wasip1 | |
- i586-unknown-linux-gnu | |
- nvptx64-nvidia-cuda | |
- thumbv6m-none-eabi | |
- thumbv7m-none-eabi | |
- thumbv7em-none-eabi | |
- thumbv7em-none-eabihf | |
# macOS targets | |
- x86_64-apple-darwin | |
- aarch64-apple-darwin | |
# FIXME: gh-actions build environment doesn't have linker support | |
# - i686-apple-darwin | |
# Windows targets | |
- x86_64-pc-windows-msvc | |
- i686-pc-windows-msvc | |
- aarch64-pc-windows-msvc | |
- x86_64-pc-windows-gnu | |
# - i686-pc-windows-gnu: | |
include: | |
- target: i686-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: x86_64-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: x86_64-unknown-linux-gnu-emulated | |
os: ubuntu-latest | |
test_everything: true | |
rustflags: --cfg stdarch_intel_sde | |
disable_assert_instr: true | |
- target: arm-unknown-linux-gnueabihf | |
os: ubuntu-latest | |
- target: armv7-unknown-linux-gnueabihf | |
os: ubuntu-latest | |
# MIPS targets disabled since they are dropped to tier 3. | |
# See https://github.com/rust-lang/compiler-team/issues/648 | |
#- target: mips-unknown-linux-gnu | |
# os: ubuntu-latest | |
# norun: true | |
#- target: mips64-unknown-linux-gnuabi64 | |
# os: ubuntu-latest | |
# norun: true | |
#- target: mips64el-unknown-linux-gnuabi64 | |
# os: ubuntu-latest | |
# norun: true | |
#- target: mipsel-unknown-linux-musl | |
# os: ubuntu-latest | |
# norun: 1 | |
- target: powerpc64le-unknown-linux-gnu | |
os: ubuntu-latest | |
disable_assert_instr: true | |
- target: s390x-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: wasm32-wasip1 | |
os: ubuntu-latest | |
- target: aarch64-apple-darwin | |
os: macos-latest | |
norun: true | |
- target: aarch64-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: x86_64-apple-darwin | |
os: macos-13 | |
- target: x86_64-pc-windows-msvc | |
os: windows-latest | |
- target: i686-pc-windows-msvc | |
os: windows-latest | |
- target: aarch64-pc-windows-msvc | |
os: windows-latest | |
norun: true | |
- target: x86_64-pc-windows-gnu | |
os: windows-latest | |
- target: i586-unknown-linux-gnu | |
os: ubuntu-latest | |
- target: nvptx64-nvidia-cuda | |
os: ubuntu-latest | |
- target: thumbv6m-none-eabi | |
os: ubuntu-latest | |
- target: thumbv7m-none-eabi | |
os: ubuntu-latest | |
- target: thumbv7em-none-eabi | |
os: ubuntu-latest | |
- target: thumbv7em-none-eabihf | |
os: ubuntu-latest | |
- target: riscv64gc-unknown-linux-gnu | |
os: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install Rust | |
run: | | |
rustup update nightly --no-self-update | |
rustup default nightly | |
- run: rustup target add ${{ matrix.target }} | |
if: "!endsWith(matrix.target, 'emulated')" | |
- name: Setup (aarch64-apple-darwin) | |
run: | | |
echo "SDKROOT=$(xcrun -sdk macosx11.0 --show-sdk-path)" >> $GITHUB_ENV | |
echo "MACOS_DEPLOYMENT_TARGET=$(xcrun -sdk macosx11.0 --show-sdk-platform-version)" >> $GITHUB_ENV | |
if: matrix.target == 'aarch64-apple-darwin' | |
- run: cargo generate-lockfile | |
# Configure some env vars based on matrix configuration | |
- run: echo "NORUN=1" >> $GITHUB_ENV | |
shell: bash | |
if: matrix.norun != '' || startsWith(matrix.target, 'thumb') || matrix.target == 'nvptx64-nvidia-cuda' | |
- run: echo "STDARCH_TEST_EVERYTHING=1" >> $GITHUB_ENV | |
shell: bash | |
if: matrix.test_everything != '' | |
- run: echo "RUSTFLAGS=${{ matrix.rustflags }}" >> $GITHUB_ENV | |
shell: bash | |
if: matrix.rustflags != '' | |
- run: echo "STDARCH_DISABLE_ASSERT_INSTR=1" >> $GITHUB_ENV | |
shell: bash | |
if: matrix.disable_assert_instr != '' | |
- run: echo "NOSTD=1" >> $GITHUB_ENV | |
shell: bash | |
if: startsWith(matrix.target, 'thumb') || matrix.target == 'nvptx64-nvidia-cuda' | |
# Windows & OSX go straight to `run.sh` ... | |
- run: ./ci/run.sh | |
shell: bash | |
if: matrix.os != 'ubuntu-latest' || startsWith(matrix.target, 'thumb') | |
env: | |
TARGET: ${{ matrix.target }} | |
# ... while Linux goes to `run-docker.sh` | |
- run: ./ci/run-docker.sh ${{ matrix.target }} | |
shell: bash | |
if: "matrix.os == 'ubuntu-latest' && !startsWith(matrix.target, 'thumb')" | |
env: | |
TARGET: ${{ matrix.target }} | |
build-std-detect: | |
needs: [style] | |
name: Build std_detect | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
run: rustup update nightly && rustup default nightly | |
- run: ./ci/build-std-detect.sh | |
success: | |
needs: | |
- docs | |
- verify | |
- env_override | |
- test | |
- build-std-detect | |
runs-on: ubuntu-latest | |
# GitHub branch protection is exceedingly silly and treats "jobs skipped because a dependency | |
# failed" as success. So we have to do some contortions to ensure the job fails if any of its | |
# dependencies fails. | |
if: always() # make sure this is never "skipped" | |
steps: | |
# Manually check the status of all dependencies. `if: failure()` does not work. | |
- name: check if any dependency failed | |
run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' |