GH runner macos: Add cross-compilation to x86_64 based on the Cirrus CI job #2600
Workflow file for this run
This file contains hidden or 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: 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@v6 | |
| - 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 ccache | |
| brew install llvm | |
| else | |
| echo "::error::$RUNNER_OS not supported" | |
| exit 1 | |
| fi | |
| - name: Compilation cache | |
| uses: actions/cache@v5 | |
| 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: Add gfortran runtime to link path | |
| if: matrix.build == 'make' && runner.os == 'macOS' | |
| run: | | |
| GFORTRAN_LIBDIR=$(gfortran -print-file-name=libgfortran.dylib | xargs dirname) | |
| echo "Using gfortran runtime in $GFORTRAN_LIBDIR" | |
| echo "LDFLAGS=-L/opt/homebrew/opt/llvm/lib -L$GFORTRAN_LIBDIR" >> $GITHUB_ENV | |
| - name: Build OpenBLAS | |
| run: | | |
| export CPPFLAGS="-I/opt/homebrew/opt/llvm/include" | |
| export CC="/opt/homebrew/opt/llvm/bin/clang" | |
| export RANLIB=llvm-ranlib | |
| 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 | |
| xbuild: | |
| runs-on: macos-14 | |
| strategy: | |
| fail-fast: false | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Print system information | |
| run: | | |
| if [ "$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 ccache | |
| brew install llvm | |
| else | |
| echo "::error::$RUNNER_OS not supported" | |
| exit 1 | |
| fi | |
| - name: Crossbuild OpenBLAS | |
| run: | | |
| #export PATH=/opt/homebrew/opt/llvm/bin:$PATH | |
| #export LDFLAGS="-L/opt/homebrew/opt/llvm/lib" | |
| #export CPPFLAGS="-I/opt/homebrew/opt/llvm/include" | |
| export ARCHS="i386 x86_64" | |
| export ARCHS_STANDARD="i386 x86_64" | |
| export ARCHS_STANDARD_32_64_BIT="i386 x86_64" | |
| export ARCHS_STANDARD_64_BIT=x86_64 | |
| export ARCHS_STANDARD_INCLUDING_64_BIT="i386 x86_64" | |
| export ARCHS_UNIVERSAL_IPHONE_OS="i386 x86_64" | |
| export VALID_ARCHS="i386 x86_64" | |
| xcrun --sdk macosx --show-sdk-path | |
| xcodebuild -version | |
| export CC=/Applications/Xcode_26.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang | |
| export CFLAGS="-O2 -unwindlib=none -Wno-macro-redefined -isysroot /Applications/Xcode_26.0.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.0.sdk -arch x86_64" | |
| make TARGET=CORE2 DYNAMIC_ARCH=1 NUM_THREADS=32 HOSTCC=clang NOFORTRAN=1 RANLIB="ls -l" | |