Skip to content

Commit

Permalink
cmake: provide optional metis support
Browse files Browse the repository at this point in the history
Report METIS availability through an additional Partition meta
component.
  • Loading branch information
sergiud committed May 26, 2022
1 parent 9b767e1 commit 25b2102
Show file tree
Hide file tree
Showing 7 changed files with 221 additions and 63 deletions.
20 changes: 16 additions & 4 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on: [push, pull_request]

jobs:
build:
name: ${{matrix.os}}-GCC-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.gpu}}
name: ${{matrix.os}}-GCC-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.gpu}}-${{matrix.metis}}
runs-on: ${{matrix.os}}
defaults:
run:
Expand All @@ -22,6 +22,11 @@ jobs:
lib: [shared, static]
components: [minimal, lgpl, gpl]
gpu: [no-cuda, cuda]
metis: [no-metis, metis]
exclude:
# METIS is only usable if CHOLMOD is compiled
- components: minimal
metis: metis

steps:
- uses: actions/checkout@v2
Expand All @@ -44,13 +49,18 @@ jobs:
gfortran \
libblas-dev \
liblapack-dev \
libmetis-dev \
libomp-dev \
libtbb-dev \
ninja-build \
nvidia-cuda-toolkit \
wget
- name: Setup METIS Dependencies
if: ${{matrix.metis == 'metis'}}
run: |
sudo apt-get install -y \
libmetis-dev \
- name: Setup CUDA Dependencies
if: ${{matrix.gpu == 'cuda'}}
run: |
Expand All @@ -71,8 +81,8 @@ jobs:
uses: actions/cache@v2
with:
path: ${{env.CCACHE_DIR}}
key: ${{matrix.os}}-ccache-${{github.run_id}}
restore-keys: ${{matrix.os}}-ccache-
key: ${{matrix.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.gpu}}-${{matrix.metis}}-ccache-${{github.run_id}}
restore-keys: ${{matrix.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.gpu}}-${{matrix.metis}}-ccache-

- name: Configure
run: |
Expand All @@ -82,9 +92,11 @@ jobs:
-DCMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=ccache \
-DCMAKE_Fortran_COMPILER_LAUNCHER:FILEPATH=ccache \
-DCMAKE_INSTALL_PREFIX:PATH=./install \
-DCMAKE_REQUIRE_FIND_PACKAGE_METIS=${{matrix.metis == 'metis'}} \
-DWITH_CUDA=${{matrix.gpu == 'cuda'}} \
-DWITH_GPL=${{matrix.components == 'gpl'}} \
-DWITH_LGPL=${{contains(matrix.components, 'gpl')}} \
-DWITH_METIS=${{matrix.metis == 'metis'}} \
-G Ninja
- name: Build
Expand Down
36 changes: 31 additions & 5 deletions .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,65 @@ on: [push, pull_request]

jobs:
build:
name: AppleClang-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}
name: AppleClang-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.metis}}
runs-on: macos-latest
defaults:
run:
shell: bash
env:
CCACHE_DIR: ${{github.workspace}}/ccache
strategy:
fail-fast: true
matrix:
build_type: [Release, Debug]
lib: [shared, static]
components: [minimal, lgpl, gpl]
metis: [no-metis, metis]
exclude:
# METIS is only usable if CHOLMOD is compiled
- components: minimal
metis: metis

steps:
- uses: actions/checkout@v2

- name: Setup Ninja
uses: ashutoshvarma/setup-ninja@master
with:
version: 1.10.0
- name: Setup Dependencies
run: >-
brew install
ccache
metis
ninja
- name: Setup METIS Dependencies
if: ${{matrix.metis == 'metis'}}
run: |
brew install metis
- name: Setup Environment
if: ${{matrix.build_type == 'Release'}}
run: |
echo 'CFLAGS=-flto' >> $GITHUB_ENV
echo 'CXXFLAGS=-flto' >> $GITHUB_ENV
- name: Cache Build
id: cache-build
uses: actions/cache@v2
with:
path: ${{env.CCACHE_DIR}}
key: ${{runner.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.gpu}}-${{matrix.metis}}-ccache-${{github.run_id}}
restore-keys: ${{runner.os}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.gpu}}-${{matrix.metis}}-ccache-

- name: Configure
run: |
cmake -S . -B build_${{matrix.build_type}}/ \
-DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} \
-DCMAKE_C_COMPILER_LAUNCHER:FILEPATH=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=ccache \
-DCMAKE_INSTALL_PREFIX:PATH=./install \
-DCMAKE_REQUIRE_FIND_PACKAGE_METIS=${{matrix.metis == 'metis'}} \
-DWITH_GPL=${{matrix.components == 'gpl'}} \
-DWITH_LGPL=${{contains(matrix.components, 'gpl')}} \
-DWITH_METIS=${{matrix.metis == 'metis'}} \
-G Ninja
- name: Build
Expand Down
97 changes: 82 additions & 15 deletions .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ on: [push, pull_request]

jobs:
build-mingw:
name: ${{matrix.sys}}-${{matrix.env}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}
name: ${{matrix.sys}}-${{matrix.env}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.metis}}
runs-on: windows-latest
defaults:
run:
Expand All @@ -18,6 +18,11 @@ jobs:
sys: [mingw32, mingw64]
lib: [shared, static]
components: [minimal, lgpl, gpl]
metis: [no-metis, metis]
exclude:
# METIS is only usable if CHOLMOD is compiled
- components: minimal
metis: metis
include:
- sys: mingw32
env: i686
Expand All @@ -26,7 +31,9 @@ jobs:

steps:
- uses: actions/checkout@v2
- uses: msys2/setup-msys2@v2

- name: Setup Dependencies
uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
install: >-
Expand All @@ -36,13 +43,18 @@ jobs:
mingw-w64-${{matrix.env}}-gcc-fortran
mingw-w64-${{matrix.env}}-intel-tbb
mingw-w64-${{matrix.env}}-lapack
mingw-w64-${{matrix.env}}-metis
mingw-w64-${{matrix.env}}-ninja
mingw-w64-${{matrix.env}}-openblas
mingw-w64-${{matrix.env}}-openmp
unzip
wget
- name: Setup METIS Dependencies
if: ${{matrix.metis == 'metis'}}
run: >-
pacman --noconfirm -S
mingw-w64-${{matrix.env}}-metis
- name: Setup Environment
if: ${{matrix.build_type == 'Release'}}
run: |
Expand All @@ -54,8 +66,8 @@ jobs:
uses: actions/cache@v2
with:
path: ${{env.CCACHE_DIR}}
key: ${{runner.os}}-${{matrix.sys}}-${{matrix.env}}-ccache-${{github.run_id}}
restore-keys: ${{runner.os}}-${{matrix.sys}}-${{matrix.env}}-ccache-
key: ${{runner.os}}-${{matrix.sys}}-${{matrix.env}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.metis}}-ccache-${{github.run_id}}
restore-keys: ${{runner.os}}-${{matrix.sys}}-${{matrix.env}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.metis}}-ccache-

- name: Configure
env:
Expand All @@ -68,8 +80,10 @@ jobs:
-DCMAKE_CXX_COMPILER_LAUNCHER:FILEPATH=ccache \
-DCMAKE_Fortran_COMPILER_LAUNCHER:FILEPATH=ccache \
-DCMAKE_INSTALL_PREFIX:PATH=./install \
-DCMAKE_REQUIRE_FIND_PACKAGE_METIS=${{matrix.metis == 'metis'}} \
-DWITH_GPL=${{matrix.components == 'gpl'}} \
-DWITH_LGPL=${{contains(matrix.components, 'gpl')}} \
-DWITH_METIS=${{matrix.metis == 'metis'}} \
-G Ninja
- name: Build
Expand All @@ -84,10 +98,11 @@ jobs:
--target install
build-msvc:
name: ${{matrix.msvc}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}
name: ${{matrix.msvc}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.metis}}
runs-on: ${{matrix.os}}
env:
CCACHE_DIR: ${{github.workspace}}/ccache
CL: /MP
defaults:
run:
shell: powershell
Expand All @@ -99,6 +114,11 @@ jobs:
sys: [mingw64]
lib: [shared, static]
components: [minimal, lgpl, gpl]
metis: [no-metis, metis]
exclude:
# METIS is only usable if CHOLMOD is compiled
- components: minimal
metis: metis
include:
- sys: mingw64
env: x86_64
Expand All @@ -123,7 +143,8 @@ jobs:
with:
version: 1.10.0

- uses: msys2/setup-msys2@v2
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
path-type: inherit
Expand All @@ -132,6 +153,15 @@ jobs:
mingw-w64-${{matrix.env}}-ccache
mingw-w64-${{matrix.env}}-gcc-fortran
- name: Cache LAPACK
id: cache-lapack
uses: actions/cache@v2
with:
path: |
${{env.CCACHE_DIR}}
${{github.workspace}}/install
key: ${{runner.os}}-lapack-3.10

- name: Download LAPACK
if: steps.cache-lapack.outputs.cache-hit != 'true'
shell: msys2 {0}
Expand All @@ -155,14 +185,40 @@ jobs:
--config ${{matrix.build_type}} \
--target install
- name: Cache LAPACK
id: cache-lapack
- name: Cache METIS
if: matrix.metis == 'metis'
id: cache-metis
uses: actions/cache@v2
with:
path: |
${{env.CCACHE_DIR}}
${{github.workspace}}/install
key: ${{runner.os}}-lapack-3.10
path: metis/
key: ${{runner.os}}-metis-5.1.1

- name: Download METIS
if: matrix.metis == 'metis' && steps.cache-metis.outputs.cache-hit != 'true'
run: |
(New-Object System.Net.WebClient).DownloadFile("https://github.com/KarypisLab/METIS/archive/refs/tags/v5.1.1-DistDGL-v0.5.zip", "v5.1.1-DistDGL-v0.5.zip");
(New-Object System.Net.WebClient).DownloadFile("https://github.com/KarypisLab/GKlib/archive/refs/tags/METIS-v5.1.1-DistDGL-0.5.zip", "v5.1.1-DistDGL-v0.5-GKlib.zip");
7z x v5.1.1-DistDGL-v0.5.zip;
7z x v5.1.1-DistDGL-v0.5-GKlib.zip;
- name: Build METIS
if: matrix.metis == 'metis' && steps.cache-metis.outputs.cache-hit != 'true'
run: |
Push-Location METIS-5.1.1-DistDGL-v0.5
Copy-Item ${{github.workspace}}/GKlib-METIS-v5.1.1-DistDGL-0.5/* -Destination GKlib/ -Recurse
New-Item -ItemType directory -Path build
Copy-Item include -Destination build/xinclude -Recurse
(Get-Content CMakeLists.txt) -Replace 'MSVC', 'FALSE' | Set-Content CMakeLists.txt
(Get-Content include/metis.h) -Replace '//#define', '#define' | Set-Content build/xinclude/metis.h
Pop-Location
cmake -S METIS-5.1.1-DistDGL-v0.5 -B build-metis `
-A x64 `
-DBUILD_SHARED_LIBS=OFF `
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/metis `
-DMETIS_INSTALL:BOOL=ON `
-G "${{matrix.generator}}"
cmake --build build-metis --target install
- name: Setup MSYS2 Environment
shell: msys2 {0}
Expand All @@ -172,19 +228,22 @@ jobs:
- name: Setup Environment
run: |
echo "${{github.workspace}}/install/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
echo "VERSION_SUFFIX=$(git describe --tags)-${{matrix.marker}}-${{matrix.system}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "VERSION_SUFFIX=$(git describe --tags)-${{matrix.marker}}-${{matrix.system}}-${{matrix.build_type}}-${{matrix.lib}}-${{matrix.components}}-${{matrix.metis}}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Configure
run: |
cmake -S . -B build_${{matrix.build_type}}/ `
-A x64 `
-DBLAS_blas_LIBRARY=${{github.workspace}}/install/lib/libblas.lib `
-DBUILD_SHARED_LIBS=${{matrix.lib == 'shared'}} `
-DCMAKE_INSTALL_PREFIX:PATH=${{github.workspace}}/install-suitesparse `
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/install-suitesparse `
-DCMAKE_PREFIX_PATH=${{github.workspace}}/metis `
-DCMAKE_REQUIRE_FIND_PACKAGE_METIS=${{matrix.metis == 'metis'}} `
-DLAPACK_lapack_LIBRARY=${{github.workspace}}/install/lib/liblapack.lib `
-DWITH_FORTRAN=OFF `
-DWITH_GPL=${{matrix.components == 'gpl'}} `
-DWITH_LGPL=${{contains(matrix.components, 'gpl')}} `
-DWITH_METIS=${{matrix.metis == 'metis'}} `
-G "${{matrix.generator}}"
- name: Build
Expand All @@ -203,6 +262,14 @@ jobs:
New-Item -ItemType "directory" -Path "${{github.workspace}}/deploy"
Copy-Item -Path "${{github.workspace}}/install/*" -Destination "${{github.workspace}}/deploy/" -Recurse -Force
Copy-Item -Path "${{github.workspace}}/install-suitesparse/*" -Destination "${{github.workspace}}/deploy/" -Recurse -Force
- name: Prepare METIS Deployment
if: matrix.metis == 'metis'
run: |
Copy-Item -Path "${{github.workspace}}/metis/*" -Destination "${{github.workspace}}/deploy/" -Recurse -Force
- name: Generate Archive
run: |
Compress-Archive -Path "${{github.workspace}}/deploy/*" -Destination "SuiteSparse-${{env.VERSION_SUFFIX}}.zip"
- uses: actions/upload-artifact@v2
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -218,3 +218,4 @@ ssget/files/ss_index_old.mat
ssget/files/ssstats_old.csv

/build*/
*.orig
9 changes: 0 additions & 9 deletions CHOLMOD/Partition/cholmod_metis.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,16 +53,7 @@

#include "cholmod_internal.h"

#if defined(WIN32) && defined(_WINDLL)
#ifdef _MSC_VER
# pragma push_macro("_WINDLL")
# undef _WINDLL
#endif
#endif
#include "metis.h"
#ifdef _MSC_VER
# pragma pop_macro("_WINDLL")
#endif

#include "cholmod_partition.h"
#include "cholmod_cholesky.h"
Expand Down
Loading

0 comments on commit 25b2102

Please sign in to comment.