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