|
- name: continuous build
-
- 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: ${{ 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@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 update
- sudo apt-get install -y gfortran cmake ccache
- wget http://security.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.3-2ubuntu0.1_amd64.deb
- sudo apt install ./libtinfo5_6.3-2ubuntu0.1_amd64.deb
- 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 "::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
- 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: |
- 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
-
- - 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
-
-
- msys2:
- if: "github.repository == 'OpenMathLib/OpenBLAS'"
- runs-on: windows-latest
-
- strategy:
- fail-fast: false
- matrix:
- msystem: [UCRT64, MINGW32, CLANG64]
- idx: [int32, int64]
- build-type: [Release]
- include:
- - msystem: UCRT64
- idx: int32
- target-prefix: mingw-w64-ucrt-x86_64
- fc-pkg: fc
- - msystem: MINGW32
- idx: int32
- target-prefix: mingw-w64-i686
- fc-pkg: fc
- - msystem: CLANG64
- idx: int32
- target-prefix: mingw-w64-clang-x86_64
- fc-pkg: fc
- - msystem: UCRT64
- idx: int64
- idx64-flags: -DBINARY=64 -DINTERFACE64=1
- target-prefix: mingw-w64-ucrt-x86_64
- fc-pkg: fc
- - msystem: CLANG64
- idx: int64
- idx64-flags: -DBINARY=64 -DINTERFACE64=1
- target-prefix: mingw-w64-clang-x86_64
- fc-pkg: fc
- - msystem: UCRT64
- idx: int32
- target-prefix: mingw-w64-ucrt-x86_64
- fc-pkg: fc
- build-type: None
- exclude:
- - msystem: MINGW32
- idx: int64
-
- defaults:
- run:
- # Use MSYS2 bash as default shell
- shell: msys2 {0}
-
- env:
- CHERE_INVOKING: 1
-
- steps:
- - name: Get CPU name
- shell: pwsh
- run : |
- Get-CIMInstance -Class Win32_Processor | Select-Object -Property Name
-
- - name: Install build dependencies
- uses: msys2/setup-msys2@v2
- with:
- msystem: ${{ matrix.msystem }}
- update: true
- release: false # Use pre-installed version
- install: >-
- base-devel
- ${{ matrix.target-prefix }}-cc
- ${{ matrix.target-prefix }}-${{ matrix.fc-pkg }}
- ${{ matrix.target-prefix }}-cmake
- ${{ matrix.target-prefix }}-ninja
- ${{ matrix.target-prefix }}-ccache
-
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Prepare ccache
- # Get cache location of ccache
- # Create key that is used in action/cache/restore and action/cache/save steps
- id: ccache-prepare
- run: |
- echo "ccachedir=$(cygpath -m $(ccache -k cache_dir))" >> $GITHUB_OUTPUT
- # 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.
- echo "key=ccache-msys2-${{ matrix.msystem }}-${{ matrix.idx }}-${{ matrix.build-type }}-${{ github.ref }}-${{ github.sha }}" >> $GITHUB_OUTPUT
-
- - name: Restore ccache
- uses: actions/cache/restore@v3
- with:
- path: ${{ steps.ccache-prepare.outputs.ccachedir }}
- key: ${{ steps.ccache-prepare.outputs.key }}
- # Restore a matching ccache cache entry. Prefer same branch.
- restore-keys: |
- ccache-msys2-${{ matrix.msystem }}-${{ matrix.idx }}-${{ matrix.build-type }}-${{ github.ref }}
- ccache-msys2-${{ matrix.msystem }}-${{ matrix.idx }}-${{ matrix.build-type }}
-
- - name: Configure ccache
- # Limit the maximum size and switch on compression to avoid exceeding the total disk or cache quota.
- run: |
- which ccache
- test -d ${{ steps.ccache-prepare.outputs.ccachedir }} || mkdir -p ${{ steps.ccache-prepare.outputs.ccachedir }}
- echo "max_size = 250M" > ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf
- echo "compression = true" >> ${{ steps.ccache-prepare.outputs.ccachedir }}/ccache.conf
- ccache -p
- ccache -s
- echo $HOME
- cygpath -w $HOME
-
- - name: Configure OpenBLAS
- run: |
- mkdir build && cd build
- cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} \
- -DBUILD_SHARED_LIBS=ON \
- -DBUILD_STATIC_LIBS=ON \
- -DDYNAMIC_ARCH=ON \
- -DUSE_THREAD=ON \
- -DNUM_THREADS=64 \
- -DTARGET=CORE2 \
- ${{ matrix.idx64-flags }} \
- -DCMAKE_C_COMPILER_LAUNCHER=ccache \
- -DCMAKE_Fortran_COMPILER_LAUNCHER=ccache \
- ..
-
- - name: Build OpenBLAS
- run: cd build && cmake --build .
-
- - name: Show ccache status
- continue-on-error: true
- run: ccache -s
-
- - name: Save ccache
- # Save the cache after we are done (successfully) building
- uses: actions/cache/save@v3
- with:
- path: ${{ steps.ccache-prepare.outputs.ccachedir }}
- key: ${{ steps.ccache-prepare.outputs.key }}
-
- - name: Run tests
- id: run-ctest
- timeout-minutes: 60
- run: cd build && ctest
-
- - name: Re-run tests
- if: always() && (steps.run-ctest.outcome == 'failure')
- timeout-minutes: 60
- run: |
- cd build
- echo "::group::Re-run ctest"
- ctest --rerun-failed --output-on-failure || true
- echo "::endgroup::"
- echo "::group::Log from these tests"
- [ ! -f Testing/Temporary/LastTest.log ] || cat Testing/Temporary/LastTest.log
- echo "::endgroup::"
-
-
- cross_build:
- if: "github.repository == 'OpenMathLib/OpenBLAS'"
- runs-on: ubuntu-22.04
-
- strategy:
- fail-fast: false
- matrix:
- include:
- - target: mips64el
- triple: mips64el-linux-gnuabi64
- opts: DYNAMIC_ARCH=1 TARGET=GENERIC
- - target: riscv64
- triple: riscv64-linux-gnu
- opts: TARGET=RISCV64_GENERIC
- - target: mipsel
- triple: mipsel-linux-gnu
- opts: TARGET=MIPS1004K
- - target: alpha
- triple: alpha-linux-gnu
- opts: TARGET=EV4
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Install Dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y ccache gcc-${{ matrix.triple }} gfortran-${{ matrix.triple }} libgomp1-${{ matrix.target }}-cross
-
- - name: Compilation cache
- uses: actions/cache@v3
- with:
- path: ~/.ccache
- key: ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}-${{ github.sha }}
- restore-keys: |
- ccache-${{ runner.os }}-${{ matrix.target }}-${{ github.ref }}
- ccache-${{ runner.os }}-${{ matrix.target }}
-
- - name: Configure ccache
- run: |
- # 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: |
- make -j$(nproc) HOSTCC="ccache gcc" CC="ccache ${{ matrix.triple }}-gcc" FC="ccache ${{ matrix.triple }}-gfortran" ARCH=${{ matrix.target }} ${{ matrix.opts }}
|