-
Notifications
You must be signed in to change notification settings - Fork 131
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add support for the RISC-V Vector ISA - RISC-V V 1.0 with (latest) intrinsics >=0.12. - Enable bit manip extensions on RISC-V. - Add RVVM*NOFMA configurations for determinism/bit-reproducibility across all architectures. * Not supported yet - DFT, QUAD, and GNUABI. - Only upcoming versions of gcc (14+) have support for latest intrinsics. Will be supported when available in release version of gcc. * CI Updates - Add riscv64 CI on GitHub Actions. - Add gcc (11 - #483) and llvm (17) builds on all architectures. - Disable a few failing test variants, tracked in #484 and #485. - Use same compiler versions across all builds. - Add sysroot for dependencies. - Nit: Reorder build-cross targets to group gcc/llvm per-arch together. --------- Co-authored-by: GlassOfWhiskey <[email protected]> Co-authored-by: Eric Love <[email protected]>
- Loading branch information
1 parent
69cfa71
commit cea4434
Showing
32 changed files
with
1,690 additions
and
56 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,46 +7,76 @@ on: | |
push: | ||
pull_request: | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
permissions: | ||
contents: read | ||
|
||
env: | ||
GCC_VERSION: "11" | ||
LLVM_VERSION: "17" | ||
COMMON_CMAKE_FLAGS: | | ||
-DSLEEF_SHOW_CONFIG=1 | ||
-DDISABLE_SSL=ON | ||
-DBUILD_GNUABI_LIBS=ON | ||
-DBUILD_INLINE_HEADERS=ON | ||
-DBUILD_DFT=ON | ||
-DBUILD_QUAD=ON | ||
-DBUILD_SCALAR_LIB=ON | ||
-DBUILD_STATIC_TEST_BINS=ON | ||
-DENFORCE_TESTER=ON | ||
-DENFORCE_TESTER3=ON | ||
jobs: | ||
build-native: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
compiler: [gcc, llvm] | ||
|
||
name: build-native-${{ matrix.compiler }} | ||
steps: | ||
- uses: actions/[email protected] | ||
with: | ||
persist-credentials: false | ||
|
||
- name: Install dependencies | ||
run: sudo apt-get update -y -qq && sudo apt-get install -y -qq build-essential clang curl ninja-build libgmp-dev libmpfr-dev | ||
run: | | ||
sudo apt-get update -y -qq | ||
sudo apt-get install -y -qq build-essential curl ninja-build libgmp-dev libmpfr-dev | ||
# Needed for llvm builds as well for target libraries | ||
- name: Install gcc | ||
run: | | ||
sudo apt-get install -y -qq gcc-${GCC_VERSION} | ||
- name: Install llvm | ||
run: | | ||
curl -o llvm.sh https://apt.llvm.org/llvm.sh | ||
chmod u+x llvm.sh | ||
sudo ./llvm.sh ${LLVM_VERSION} | ||
sudo ln -srf $(which clang-${LLVM_VERSION}) /usr/bin/clang | ||
rm llvm.sh | ||
if: ${{ matrix.compiler == 'llvm' }} | ||
|
||
- name: Build native | ||
shell: bash -ex -o pipefail {0} | ||
run: | | ||
set -x | ||
EXTRA_CMAKE_FLAGS="-DENFORCE_SSE2=ON -DENFORCE_SSE4=ON -DENFORCE_AVX=ON -DENFORCE_AVX=ON -DENFORCE_AVX2=ON -DENFORCE_AVX512F=ON -DENFORCE_FMA4=ON" | ||
cmake -S . -B _build-native -GNinja \ | ||
-DCMAKE_INSTALL_PREFIX=$(pwd)/_install-native \ | ||
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/travis/toolchain-native-${{ matrix.compiler }}.cmake \ | ||
${COMMON_CMAKE_FLAGS} \ | ||
${EXTRA_CMAKE_FLAGS} | ||
cmake --build _build-native | ||
cmake --install _build-native | ||
- name: Upload build-native artifacts | ||
- name: Upload build-native-${{ matrix.compiler }} artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: build-native | ||
name: build-native-${{ matrix.compiler }} | ||
path: | | ||
_build-* | ||
_install-* | ||
|
@@ -55,6 +85,12 @@ jobs: | |
test-native: | ||
runs-on: ubuntu-latest | ||
needs: [build-native] | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
compiler: [gcc, llvm] | ||
|
||
name: test-native-${{ matrix.compiler }} | ||
steps: | ||
- uses: actions/[email protected] | ||
with: | ||
|
@@ -67,12 +103,12 @@ jobs: | |
run: | | ||
cat /proc/cpuinfo | ||
- name: Download build-native artifacts | ||
- name: Download build-native-${{ matrix.compiler }} artifacts | ||
uses: actions/download-artifact@v3 | ||
with: | ||
name: build-native | ||
name: build-native-${{ matrix.compiler }} | ||
|
||
- name: Fix build-native permissions | ||
- name: Fix _build-native permissions | ||
run: | | ||
chmod +x _build-native/bin/* | ||
|
@@ -97,19 +133,24 @@ jobs: | |
strategy: | ||
fail-fast: false | ||
matrix: | ||
arch: [aarch64, armhf, ppc64el, s390x, riscv64] | ||
compiler: [gcc, llvm] | ||
include: | ||
# AArch64 | ||
- arch: aarch64 | ||
# Aarch32 | ||
- arch: armhf | ||
package: -arm-linux-gnueabihf | ||
# PPC64 | ||
binfmt: arm | ||
gnupkg: -arm-linux-gnueabihf | ||
- arch: ppc64el | ||
package: -powerpc64le-linux-gnu | ||
# IBM Z | ||
- arch: s390x | ||
|
||
name: build-${{ matrix.arch }} | ||
binfmt: ppc64le | ||
gnupkg: -powerpc64le-linux-gnu | ||
- arch: aarch64 | ||
debarch: arm64 | ||
exclude: | ||
# Only GCC trunk supports the RISC-V V intrinsics and https://github.com/riscv-collab/riscv-gnu-toolchain | ||
# doesn't track a recent enough version yet | ||
- arch: riscv64 | ||
compiler: gcc | ||
|
||
name: build-${{ matrix.arch }}-${{ matrix.compiler }} | ||
steps: | ||
- uses: actions/[email protected] | ||
with: | ||
|
@@ -118,20 +159,58 @@ jobs: | |
- name: Install dependencies | ||
run: | | ||
sudo apt-get update -y -qq | ||
sudo apt-get install -y -qq build-essential clang curl ninja-build libgmp-dev libmpfr-dev gcc${{ matrix.package || format('-{0}-linux-gnu', matrix.arch) }} | ||
sudo apt-get install -y -qq build-essential curl ninja-build libgmp-dev libmpfr-dev debootstrap | ||
# Needed for llvm builds as well for target libraries | ||
- name: Install gcc | ||
run: | | ||
sudo apt-get install -y -qq gcc-${GCC_VERSION}${{ matrix.gnupkg || format('-{0}-linux-gnu', matrix.arch) }} | ||
- name: Download build-native artifacts | ||
- name: Install llvm | ||
run: | | ||
curl -o llvm.sh https://apt.llvm.org/llvm.sh | ||
chmod u+x llvm.sh | ||
sudo ./llvm.sh ${LLVM_VERSION} | ||
sudo ln -srf $(which clang-${LLVM_VERSION}) /usr/bin/clang | ||
rm llvm.sh | ||
if: ${{ matrix.compiler == 'llvm' }} | ||
|
||
- name: Setup QEMU | ||
uses: docker/[email protected] | ||
with: | ||
platforms: ${{ matrix.binfmt || matrix.arch }} | ||
|
||
- name: Check sysroot cache | ||
id: check-sysroot-cache | ||
uses: actions/cache@v3 | ||
with: | ||
path: sysroot | ||
key: sysroot-${{ matrix.arch }}-${{ hashFiles('./.github/workflows/build_and_test.yml') }} | ||
|
||
- name: Create sysroot | ||
run: | | ||
sudo debootstrap --arch=${{ matrix.debarch || matrix.arch }} --verbose --include=fakeroot,symlinks,libmpfr-dev,libssl-dev --resolve-deps --variant=minbase --components=main,universe focal sysroot | ||
# Remove unused files to minimize cache | ||
sudo chroot sysroot symlinks -cr . | ||
sudo chown ${USER} -R sysroot | ||
rm -rf sysroot/{dev,proc,run,sys,var} | ||
rm -rf sysroot/usr/{sbin,bin,share} | ||
rm -rf sysroot/usr/lib/{apt,gcc,udev,systemd} | ||
rm -rf sysroot/usr/libexec/gcc | ||
if: steps.check-sysroot-cache.outputs.cache-hit != 'true' | ||
|
||
- name: Download build-native-${{ matrix.compiler }} artifacts | ||
uses: actions/download-artifact@v3 | ||
with: | ||
name: build-native | ||
name: build-native-${{ matrix.compiler }} | ||
|
||
- name: Fix build-native permissions | ||
- name: Fix _build-native permissions | ||
run: | | ||
chmod +x _build-native/bin/* | ||
- name: Build ${{ matrix.arch }} | ||
shell: bash -ex -o pipefail {0} | ||
run: | | ||
set -x | ||
EXTRA_CMAKE_FLAGS="" | ||
if [[ ${{ matrix.arch }} = "aarch64" ]]; then | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DENFORCE_SVE=ON" | ||
|
@@ -142,22 +221,32 @@ jobs: | |
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DENFORCE_VSX=ON -DENFORCE_VSX3=ON" | ||
elif [[ ${{ matrix.arch }} = "s390x" ]]; then | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DENFORCE_VXE=ON" | ||
# Disable VXE2 support, QEMU doesn't support it | ||
# Disable VXE2 support, QEMU doesn't support some instructions generated by gcc or llvm | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DDISABLE_VXE2=ON" | ||
elif [[ ${{ matrix.arch }} = "riscv64" ]]; then | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DENFORCE_RVVM1=ON -DENFORCE_RVVM2=ON" | ||
# Disable inline headers, they just don't compile on riscv64 | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DBUILD_INLINE_HEADERS=OFF" | ||
# Disable dft, it fails with linker error to `cexp` | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DBUILD_DFT=OFF" | ||
# Disable quad, it's missing the `Sleef_quad` function | ||
EXTRA_CMAKE_FLAGS="${EXTRA_CMAKE_FLAGS} -DBUILD_QUAD=OFF" | ||
fi | ||
cmake -S . -B _build-${{ matrix.arch }} -GNinja \ | ||
-DCMAKE_INSTALL_PREFIX="$(pwd)/_install-${{ matrix.arch }}" \ | ||
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/travis/toolchain-${{ matrix.arch }}.cmake \ | ||
-DCMAKE_TOOLCHAIN_FILE=$(pwd)/travis/toolchain-${{ matrix.arch }}-${{ matrix.compiler }}.cmake \ | ||
-DCMAKE_SYSROOT=$(pwd)/sysroot \ | ||
-DNATIVE_BUILD_DIR="$(pwd)/_build-native" \ | ||
${COMMON_CMAKE_FLAGS} \ | ||
${EXTRA_CMAKE_FLAGS} | ||
cmake --build _build-${{ matrix.arch }} | ||
cmake --install _build-${{ matrix.arch }} | ||
- name: Upload build-${{ matrix.arch }} artifacts | ||
- name: Upload build-${{ matrix.arch }}-${{ matrix.compiler }} artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: build-${{ matrix.arch }} | ||
name: build-${{ matrix.arch }}-${{ matrix.compiler }} | ||
path: | | ||
_build-${{ matrix.arch }} | ||
_install-${{ matrix.arch }} | ||
|
@@ -172,32 +261,88 @@ jobs: | |
include: | ||
# AArch64 | ||
- arch: aarch64 | ||
compiler: gcc | ||
qemu_cpu: "max,sve=off" | ||
- arch: aarch64 | ||
compiler: gcc | ||
qemu_cpu: "max,sve=on,sve128=on" | ||
- arch: aarch64 | ||
compiler: gcc | ||
qemu_cpu: "max,sve=on,sve256=on" | ||
- arch: aarch64 | ||
compiler: gcc | ||
qemu_cpu: "max,sve=on,sve512=on" | ||
# Some tests fail when compiled with LLVM only | ||
# - arch: aarch64 | ||
# compiler: llvm | ||
# qemu_cpu: "max,sve=off" | ||
# - arch: aarch64 | ||
# compiler: llvm | ||
# qemu_cpu: "max,sve=on,sve128=on" | ||
# - arch: aarch64 | ||
# compiler: llvm | ||
# qemu_cpu: "max,sve=on,sve256=on" | ||
# - arch: aarch64 | ||
# compiler: llvm | ||
# qemu_cpu: "max,sve=on,sve512=on" | ||
# Aarch32 | ||
- arch: armhf | ||
compiler: gcc | ||
binfmt: arm | ||
qemu_cpu: "max" | ||
- arch: armhf | ||
compiler: llvm | ||
binfmt: arm | ||
qemu_cpu: "max" | ||
# PPC64 | ||
- arch: ppc64el | ||
compiler: gcc | ||
binfmt: ppc64le | ||
qemu_cpu: "power10" | ||
- arch: ppc64el | ||
compiler: llvm | ||
binfmt: ppc64le | ||
qemu_cpu: "power10" | ||
# IBM Z | ||
# TODO: figure out qemu_cpu variable to make tests pass on QEMU | ||
- arch: s390x | ||
|
||
name: "test-${{ matrix.arch }} (qemu_cpu: \"${{ matrix.qemu_cpu }}\")" | ||
compiler: gcc | ||
- arch: s390x | ||
compiler: llvm | ||
# RISC-V | ||
# - arch: riscv64 | ||
# compiler: gcc | ||
# qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=false" | ||
# - arch: riscv64 | ||
# compiler: gcc | ||
# qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=true,vlen=128,elen=64,vext_spec=v1.0" | ||
# - arch: riscv64 | ||
# compiler: gcc | ||
# qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=true,vlen=256,elen=64,vext_spec=v1.0" | ||
# - arch: riscv64 | ||
# compiler: gcc | ||
# qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=true,vlen=512,elen=64,vext_spec=v1.0" | ||
- arch: riscv64 | ||
compiler: llvm | ||
qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=false" | ||
- arch: riscv64 | ||
compiler: llvm | ||
qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=true,vlen=128,elen=64,vext_spec=v1.0" | ||
- arch: riscv64 | ||
compiler: llvm | ||
qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=true,vlen=256,elen=64,vext_spec=v1.0" | ||
- arch: riscv64 | ||
compiler: llvm | ||
qemu_cpu: "rv64,zba=true,zbb=true,zbs=true,v=true,vlen=512,elen=64,vext_spec=v1.0" | ||
|
||
name: "test-${{ matrix.arch }}-${{ matrix.compiler }} (qemu_cpu: \"${{ matrix.qemu_cpu }}\")" | ||
steps: | ||
- uses: actions/[email protected] | ||
with: | ||
persist-credentials: false | ||
|
||
- uses: docker/[email protected] | ||
- name: Setup QEMU | ||
uses: docker/[email protected] | ||
with: | ||
platforms: ${{ matrix.binfmt || matrix.arch }} | ||
|
||
|
@@ -208,20 +353,19 @@ jobs: | |
run: | | ||
cat /proc/cpuinfo | ||
- name: Download build-native artifacts | ||
- name: Download build-native-${{ matrix.compiler }} artifacts | ||
uses: actions/download-artifact@v3 | ||
with: | ||
name: build-native | ||
name: build-native-${{ matrix.compiler }} | ||
|
||
- name: Download build-${{ matrix.arch }} artifacts | ||
- name: Download build-${{ matrix.arch }}-${{ matrix.compiler }} artifacts | ||
uses: actions/download-artifact@v3 | ||
with: | ||
name: build-${{ matrix.arch }} | ||
name: build-${{ matrix.arch }}-${{ matrix.compiler }} | ||
|
||
- name: Fix build-native and _build-${{ matrix.arch }} permissions | ||
- name: Fix _build-native and _build-${{ matrix.arch }} permissions | ||
run: | | ||
chmod +x _build-native/bin/* | ||
chmod +x _build-${{ matrix.arch }}/bin/* | ||
chmod +x _build-native/bin/* _build-${{ matrix.arch }}/bin/* | ||
- name: Test ${{ matrix.arch }} | ||
env: | ||
|
@@ -233,10 +377,10 @@ jobs: | |
cd _build-${{ matrix.arch }} | ||
ctest -j$(nproc) | ||
- name: Upload test-${{ matrix.arch }}-${{ strategy.job-index }} artifacts | ||
- name: Upload test-${{ matrix.arch }}-${{ matrix.compiler }}-${{ strategy.job-index }} artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: test-${{ matrix.arch }}-${{ strategy.job-index }} | ||
name: test-${{ matrix.arch }}-${{ matrix.compiler }}-${{ strategy.job-index }} | ||
path: | | ||
_build-${{ matrix.arch }}/Testing | ||
if: always() |
Oops, something went wrong.