| 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:24.04 | |
| - ubuntu:26.04 | |
| build_type: | |
| - Release | |
| lib: | |
| - shared | |
| - static | |
| gpu: | |
| - cuda | |
| - no-cuda | |
| include: | |
| - os: ubuntu:24.04 | |
| cudss: 0.3.0.9_cuda12 | |
| - os: ubuntu:26.04 | |
| cudss: 0.8.0.10_cuda13 | |
| steps: | |
| - name: Setup Dependencies | |
| run: | | |
| apt-get update | |
| apt-get install -y \ | |
| build-essential \ | |
| ccache \ | |
| cmake \ | |
| git \ | |
| libbenchmark-dev \ | |
| libblas-dev \ | |
| libeigen3-dev \ | |
| liblapack-dev \ | |
| libmetis-dev \ | |
| libsuitesparse-dev \ | |
| ninja-build \ | |
| wget | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Setup CUDA Toolkit Repositories (24.04) | |
| if: matrix.gpu == 'cuda' && matrix.os == 'ubuntu:24.04' | |
| run: | | |
| wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb | |
| dpkg -i cuda-keyring_1.1-1_all.deb | |
| - name: Setup CUDA Toolkit Repositories (26.04) | |
| if: matrix.gpu == 'cuda' && matrix.os == 'ubuntu:26.04' | |
| run: | | |
| wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/cuda-keyring_1.1-1_all.deb | |
| dpkg -i cuda-keyring_1.1-1_all.deb | |
| - name: Setup CUDA Toolkit (24.04) | |
| if: matrix.gpu == 'cuda' && matrix.os == 'ubuntu:24.04' | |
| run: | | |
| apt-get update | |
| apt-get install -y nvidia-cuda-toolkit | |
| echo "CUDACXX=/usr/lib/nvidia-cuda-toolkit/bin/nvcc" >> $GITHUB_ENV | |
| - name: Setup CUDA Toolkit (26.04) | |
| if: matrix.gpu == 'cuda' && matrix.os == 'ubuntu:26.04' | |
| run: | | |
| apt-get update | |
| apt-get install -y \ | |
| cuda-minimal-build-13-3 \ | |
| libcublas-dev-13-3 \ | |
| libcusolver-dev-13-3 \ | |
| libcusparse-dev-13-3 | |
| echo "CUDACXX=/usr/local/cuda-13.3/bin/nvcc" >> $GITHUB_ENV | |
| - name: Setup cuDSS | |
| if: matrix.gpu == 'cuda' | |
| run: | | |
| wget https://developer.download.nvidia.com/compute/cudss/redist/libcudss/linux-x86_64/libcudss-linux-x86_64-${{matrix.cudss}}-archive.tar.xz | |
| tar -xf libcudss-linux-x86_64-${{matrix.cudss}}-archive.tar.xz | |
| echo "cudss_DIR=${{github.workspace}}/libcudss-linux-x86_64-${{matrix.cudss}}-archive/lib/cmake/cudss" >> $GITHUB_ENV | |
| - name: Cache Mold | |
| id: cache-mold | |
| uses: actions/cache@v4 | |
| with: | |
| path: mold-2.36.0-x86_64-linux/ | |
| key: mold-2.36.0 | |
| - name: Setup Mold | |
| if: steps.cache-mold.outputs.cache-hit != 'true' | |
| run: | | |
| wget https://github.com/rui314/mold/releases/download/v2.36.0/mold-2.36.0-x86_64-linux.tar.gz | |
| tar xvf mold-2.36.0-x86_64-linux.tar.gz | |
| - name: Cache Build | |
| id: cache-build | |
| uses: actions/cache@v4 | |
| 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 Build Environment | |
| if: matrix.build_type == 'Release' | |
| run: | | |
| echo 'CXXFLAGS=-flto=auto -Werror=odr' >> $GITHUB_ENV | |
| - name: Setup Runtime Environment | |
| run: | | |
| echo "${{github.workspace}}/mold-2.36.0-x86_64-linux/libexec/mold" >> $GITHUB_PATH | |
| - name: Configure | |
| run: | | |
| cmake -S . -B build_${{matrix.build_type}} \ | |
| -DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \ | |
| -DWITH_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 \ | |
| -DWITH_SUITESPARSE=ON | |
| - 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 --build-config ${{matrix.build_type}} \ | |
| --output-on-failure \ | |
| -j$(nproc) | |
| - name: Install | |
| run: | | |
| cmake --build build_${{matrix.build_type}}/ \ | |
| --config ${{matrix.build_type}} \ | |
| --target install |