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}} \ -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