|
- name: apple m
-
- on: [push, pull_request]
-
- concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
- permissions:
- contents: read # to fetch code (actions/checkout)
-
- jobs:
- build:
- if: "github.repository == 'OpenMathLib/OpenBLAS'"
- runs-on: macos-14
-
- strategy:
- fail-fast: false
- matrix:
- build: [cmake, make]
- fortran: [gfortran]
- openmp: [0, 1]
- ilp64: [0, 1]
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Print system information
- run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- cat /proc/cpuinfo
- elif [ "$RUNNER_OS" == "macOS" ]; then
- sysctl -a | grep machdep.cpu
- else
- echo "::error::$RUNNER_OS not supported"
- exit 1
- fi
-
- - name: Install Dependencies
- run: |
- if [ "$RUNNER_OS" == "Linux" ]; then
- sudo apt-get install -y gfortran cmake ccache libtinfo5
- 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
- brew install llvm
- else
- echo "::error::$RUNNER_OS not supported"
- exit 1
- fi
-
- - 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 [ "${{ 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
- echo "/opt/homebrew/opt/llvm/bin" >>$GITHUB_PATH
- echo "" >>$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
-
- - name: Build OpenBLAS
- run: |
- export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
- export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
- export CC="/opt/homebrew/opt/llvm/bin/clang"
- case "${{ matrix.build }}" in
- "make")
- make -j$(nproc) DYNAMIC_ARCH=1 USE_OPENMP=${{matrix.openmp}} INTERFACE64=${{matrix.ilp64}} FC="ccache ${{ matrix.fortran }}"
- ;;
- "cmake")
- export LDFLAGS="$LDFLAGS -Wl,-ld_classic"
- mkdir build && cd build
- cmake -DDYNAMIC_ARCH=1 \
- -DUSE_OPENMP=${{matrix.openmp}} \
- -DOpenMP_Fortran_LIB_NAMES=omp \
- -DINTERFACE64=${{matrix.ilp64}} \
- -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
-
- - name: Show ccache status
- continue-on-error: true
- run: ccache -s
-
- - name: Run tests
- timeout-minutes: 60
- run: |
- case "${{ matrix.build }}" in
- "make")
- MAKE_FLAGS='DYNAMIC_ARCH=1 USE_OPENMP=0'
- echo "::group::Tests in 'test' directory"
- make -C test $MAKE_FLAGS FC="ccache ${{ matrix.fortran }}"
- echo "::endgroup::"
- echo "::group::Tests in 'ctest' directory"
- make -C ctest $MAKE_FLAGS FC="ccache ${{ matrix.fortran }}"
- echo "::endgroup::"
- echo "::group::Tests in 'utest' directory"
- make -C utest $MAKE_FLAGS FC="ccache ${{ matrix.fortran }}"
- echo "::endgroup::"
- ;;
- "cmake")
- cd build && ctest
- ;;
- *)
- echo "::error::Configuration not supported"
- exit 1
- ;;
- esac
|