123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- name: Linux
- on: [push, pull_request]
- jobs:
- build:
- name: ${{matrix.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.gpu}}
- runs-on: ubuntu-latest
- container: ${{matrix.os}}
- defaults:
- run:
- shell: bash -e -o pipefail {0}
- env:
- CCACHE_DIR: ${{github.workspace}}/ccache
- CMAKE_GENERATOR: Ninja
- DEBIAN_FRONTEND: noninteractive
- strategy:
- fail-fast: true
- matrix:
- os:
- - ubuntu:20.04
- - ubuntu:22.04
- build_type:
- - Release
- lib:
- - shared
- - static
- gpu:
- - cuda
- - no-cuda
- steps:
- - uses: actions/checkout@v3
- - name: Setup Dependencies
- run: |
- apt-get update
- apt-get install -y \
- build-essential \
- ccache \
- cmake \
- libbenchmark-dev \
- libblas-dev \
- libeigen3-dev \
- libgflags-dev \
- libgoogle-glog-dev \
- liblapack-dev \
- libmetis-dev \
- libsuitesparse-dev \
- ninja-build \
- wget
- # nvidia cuda toolkit shipped with 20.04 LTS does not support stream-ordered allocations
- - name: Setup CUDA toolkit repositories (20.04)
- if: matrix.gpu == 'cuda' && matrix.os == 'ubuntu:20.04'
- run: |
- wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
- dpkg -i cuda-keyring_1.0-1_all.deb
- # nvidia cuda toolkit + gcc combo shipped with 22.04LTS is broken
- # and is not able to compile code that uses thrust
- # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1006962
- - name: Setup CUDA toolkit repositories (22.04)
- if: matrix.gpu == 'cuda' && matrix.os == 'ubuntu:22.04'
- run: |
- wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
- dpkg -i cuda-keyring_1.0-1_all.deb
- - name: Setup CUDA toolkit
- if: matrix.gpu == 'cuda'
- run: |
- apt-get update
- apt-get install -y cuda
- echo "CUDACXX=/usr/local/cuda/bin/nvcc" >> $GITHUB_ENV
- - name: Cache Build
- id: cache-build
- uses: actions/cache@v3
- with:
- path: ${{env.CCACHE_DIR}}
- key: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.gpu}}-${{github.run_id}}
- restore-keys: ${{matrix.os}}-ccache-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.gpu}}-
- - name: Setup Environment
- if: matrix.build_type == 'Release'
- run: |
- echo 'CXXFLAGS=-flto' >> $GITHUB_ENV
- - name: Configure
- run: |
- cmake -S . -B build_${{matrix.build_type}} \
- -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
- -DUSE_CUDA=${{matrix.gpu == 'cuda'}} \
- -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
- -DCMAKE_C_COMPILER_LAUNCHER=$(which ccache) \
- -DCMAKE_CXX_COMPILER_LAUNCHER=$(which ccache) \
- -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install
- - name: Build
- run: |
- cmake --build build_${{matrix.build_type}} \
- --config ${{matrix.build_type}}
- - name: Test
- if: matrix.gpu == 'no-cuda'
- run: |
- cd build_${{matrix.build_type}}/
- ctest --config ${{matrix.build_type}} \
- --output-on-failure \
- -j$(nproc)
- - name: Install
- run: |
- cmake --build build_${{matrix.build_type}}/ \
- --config ${{matrix.build_type}} \
- --target install
|