jobs:
build:
runs-on: ${{ matrix.os }}
+
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
fortran: [gfortran, flang]
build: [cmake, make]
+ exclude:
+ - os: macos-latest
+ fortran: flang
+
steps:
- name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Compilation cache
- uses: actions/cache@v2
- with:
- path: ~/.ccache
- # We include the commit sha in the cache key, as new cache entries are
- # only created if there is no existing entry for the key yet.
- key: ${{ runner.os }}-ccache-${{ github.sha }}
- # Restore any ccache cache entry, if none for
- # ${{ runner.os }}-ccache-${{ github.sha }} exists
- restore-keys: |
- ${{ runner.os }}-ccache-
+ uses: actions/checkout@v3
- name: Print system information
run: |
elif [ "$RUNNER_OS" == "macOS" ]; then
sysctl -a | grep machdep.cpu
else
- echo "$RUNNER_OS not supported"
+ echo "::error::$RUNNER_OS not supported"
exit 1
fi
if [ "$RUNNER_OS" == "Linux" ]; then
sudo apt-get install -y gfortran cmake ccache
elif [ "$RUNNER_OS" == "macOS" ]; then
+ # It looks like "gfortran" isn't working correctly unless "gcc" is re-installed.
+ brew reinstall gcc
brew install coreutils cmake ccache
else
- echo "$RUNNER_OS not supported"
+ echo "::error::$RUNNER_OS not supported"
exit 1
fi
- ccache -M 300M # Limit the ccache size; Github's overall cache limit is 5GB
- - name: gfortran build
- if: matrix.build == 'make' && matrix.fortran == 'gfortran'
+ - name: Compilation cache
+ uses: actions/cache@v3
+ with:
+ path: ~/.ccache
+ # We include the commit sha in the cache key, as new cache entries are
+ # only created if there is no existing entry for the key yet.
+ # GNU make and cmake call the compilers differently. It looks like
+ # that causes the cache to mismatch. Keep the ccache for both build
+ # tools separate to avoid polluting each other.
+ key: ccache-${{ runner.os }}-${{ matrix.build }}-${{ matrix.fortran }}-${{ github.ref }}-${{ github.sha }}
+ # Restore a matching ccache cache entry. Prefer same branch and same Fortran compiler.
+ restore-keys: |
+ ccache-${{ runner.os }}-${{ matrix.build }}-${{ matrix.fortran }}-${{ github.ref }}
+ ccache-${{ runner.os }}-${{ matrix.build }}-${{ matrix.fortran }}
+ ccache-${{ runner.os }}-${{ matrix.build }}
+
+ - name: Configure ccache
run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- export PATH="/usr/lib/ccache:${PATH}"
- elif [ "$RUNNER_OS" == "macOS" ]; then
- export PATH="$(brew --prefix)/opt/ccache/libexec:${PATH}"
- else
- echo "$RUNNER_OS not supported"
- exit 1
+ if [ "${{ matrix.build }}" = "make" ]; then
+ # Add ccache to path
+ if [ "$RUNNER_OS" = "Linux" ]; then
+ echo "/usr/lib/ccache" >> $GITHUB_PATH
+ elif [ "$RUNNER_OS" = "macOS" ]; then
+ echo "$(brew --prefix)/opt/ccache/libexec" >> $GITHUB_PATH
+ else
+ echo "::error::$RUNNER_OS not supported"
+ exit 1
+ fi
fi
+ # Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota (5 GB).
+ test -d ~/.ccache || mkdir -p ~/.ccache
+ echo "max_size = 300M" > ~/.ccache/ccache.conf
+ echo "compression = true" >> ~/.ccache/ccache.conf
+ ccache -s
- make -j$(nproc) DYNAMIC_ARCH=1 USE_OPENMP=0
-
- - name: flang build
- if: matrix.build == 'make' && matrix.fortran == 'flang'
+ - name: Build OpenBLAS
run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- export PATH="/usr/lib/ccache:${PATH}"
- elif [ "$RUNNER_OS" == "macOS" ]; then
- exit 0
- else
- echo "$RUNNER_OS not supported"
- exit 1
+ if [ "${{ matrix.fortran }}" = "flang" ]; then
+ # download and install classic flang
+ cd /usr/
+ sudo wget -nv https://github.com/flang-compiler/flang/releases/download/flang_20190329/flang-20190329-x86-70.tgz
+ sudo tar xf flang-20190329-x86-70.tgz
+ sudo rm flang-20190329-x86-70.tgz
+ cd -
fi
+ case "${{ matrix.build }}" in
+ "make")
+ make -j$(nproc) DYNAMIC_ARCH=1 USE_OPENMP=0 FC="ccache ${{ matrix.fortran }}"
+ ;;
+ "cmake")
+ mkdir build && cd build
+ cmake -DDYNAMIC_ARCH=1 \
+ -DNOFORTRAN=0 \
+ -DBUILD_WITHOUT_LAPACK=0 \
+ -DCMAKE_VERBOSE_MAKEFILE=ON \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_Fortran_COMPILER=${{ matrix.fortran }} \
+ -DCMAKE_C_COMPILER_LAUNCHER=ccache \
+ -DCMAKE_Fortran_COMPILER_LAUNCHER=ccache \
+ ..
+ cmake --build .
+ ;;
+ *)
+ echo "::error::Configuration not supported"
+ exit 1
+ ;;
+ esac
- cd /usr/
- sudo wget -nv https://github.com/flang-compiler/flang/releases/download/flang_20190329/flang-20190329-x86-70.tgz
- sudo tar xf flang-20190329-x86-70.tgz
- sudo rm flang-20190329-x86-70.tgz
- cd -
-
- make -j$(nproc) DYNAMIC_ARCH=1 USE_OPENMP=0 FC=flang
-
+ - name: Show ccache status
+ continue-on-error: true
+ run: ccache -s
- - name: CMake gfortran build
- if: matrix.build == 'cmake' && matrix.fortran == 'gfortran'
+ - name: Run tests
+ timeout-minutes: 60
run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- export PATH="/usr/lib/ccache:${PATH}"
- elif [ "$RUNNER_OS" == "macOS" ]; then
- export PATH="$(brew --prefix)/opt/ccache/libexec:${PATH}"
- else
- echo "$RUNNER_OS not supported"
- exit 1
- fi
-
- mkdir build
- cd build
- cmake -DDYNAMIC_ARCH=1 -DNOFORTRAN=0 -DBUILD_WITHOUT_LAPACK=0 -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Release ..
- make -j$(nproc)
+ case "${{ matrix.build }}" in
+ "make")
+ echo "::group::Tests for BLAS"
+ make blas-test
+ echo "::endgroup::"
+ echo "::group::Tests for LAPACK"
+ make lapack-test
+ echo "::endgroup::"
+ ;;
+ "cmake")
+ cd build && ctest
+ ;;
+ *)
+ echo "::error::Configuration not supported"
+ exit 1
+ ;;
+ esac
msys2:
uses: actions/checkout@v3
- name: Compilation cache
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
# It looks like this path needs to be hard-coded.
path: C:/msys64/home/runneradmin/.ccache