Skip to content

Commit 0d9baf8

Browse files
authored
Replace FindKLU with FindSuiteSparse (#206)
* Improve finding Suitesparse libs Replaced FindKLU with FindSuiteSparse, now looking for AMD, COLAMD and KLU libs.
1 parent e5973c8 commit 0d9baf8

File tree

5 files changed

+88
-60
lines changed

5 files changed

+88
-60
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.vscode/
2+
.DS_Store
23
build/*
34
_build
45
install/*

CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
2222
endif()
2323

2424
option(RESOLVE_TEST_WITH_BSUB "Use `jsrun` instead of `mpirun` commands when running tests" OFF)
25-
option(RESOLVE_USE_KLU "Use KLU, AMD and COLAMD libraries from SuiteSparse" ON)
25+
option(RESOLVE_USE_KLU "Use KLU, AMD and COLAMD libraries from SuiteSparse" OFF)
2626
option(RESOLVE_USE_LUSOL "Build the LUSOL library" OFF)
2727
option(RESOLVE_USE_CUDA "Use CUDA language and SDK" OFF)
2828
option(RESOLVE_USE_HIP "Use HIP language and ROCm library" OFF)
@@ -32,7 +32,7 @@ option(RESOLVE_USE_GPU "Use GPU device for computations" OFF)
3232
mark_as_advanced(FORCE RESOLVE_USE_GPU)
3333

3434
option(RESOLVE_USE_ASAN "Use LLVM address sanitizer" OFF)
35-
option(RESOLVE_USE_DOXYGEN "Use Doxygen to generate Re::Solve documentation" ON)
35+
option(RESOLVE_USE_DOXYGEN "Use Doxygen to generate Re::Solve documentation" OFF)
3636
set(RESOLVE_CTEST_OUTPUT_DIR ${PROJECT_BINARY_DIR} CACHE PATH "Directory where CTest outputs are saved")
3737

3838
# update this if more fortran code is added. this should be good enough for now though
@@ -73,10 +73,10 @@ endif()
7373

7474

7575
if (RESOLVE_USE_KLU)
76-
include(FindKLU)
77-
if(NOT KLU_LIBRARY)
76+
include(FindSuiteSparse)
77+
if(NOT SUITESPARSE_LIBRARY)
7878
message(STATUS "Cannot find KLU, disabling SuiteSparse module ...")
79-
set(RESOLVE_USE_KLU OFF CACHE BOOL "Build without SuiteSparse AMD module." FORCE)
79+
set(RESOLVE_USE_KLU OFF CACHE BOOL "Build without SuiteSparse module." FORCE)
8080
endif()
8181
else()
8282
message(STATUS "Not using SuiteSparse KLU")

cmake/FindKLU.cmake

Lines changed: 0 additions & 54 deletions
This file was deleted.

cmake/FindSuiteSparse.cmake

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
#[[
2+
3+
Finds Sutiesparse include directory and libraries and exports target `Suitesparse`
4+
5+
User may set:
6+
- SUITESPARSE_ROOT_DIR
7+
8+
Author(s):
9+
- Cameron Rutherford <cameron.rutherford@pnnl.gov>
10+
11+
]]
12+
set(SUITESPARSE_MODULES
13+
amd
14+
colamd
15+
klu
16+
suitesparseconfig)
17+
18+
find_library(SUITESPARSE_LIBRARY
19+
NAMES
20+
${SUITESPARSE_MODULES}
21+
PATHS
22+
${SUITESPARSE_DIR} $ENV{SUITESPARSE_DIR} ${SUITESPARSE_ROOT_DIR}
23+
ENV LD_LIBRARY_PATH ENV DYLD_LIBRARY_PATH
24+
PATH_SUFFIXES
25+
lib64 lib)
26+
27+
if(SUITESPARSE_LIBRARY)
28+
set(SUITESPARSE_LIBRARY CACHE FILEPATH "Path to Suitesparse library")
29+
get_filename_component(SUITESPARSE_LIBRARY_DIR ${SUITESPARSE_LIBRARY} DIRECTORY CACHE "Suitesparse library directory")
30+
message(STATUS "Found Suitesparse libraries in: " ${SUITESPARSE_LIBRARY_DIR})
31+
mark_as_advanced(SUITESPARSE_LIBRARY SUITESPARSE_LIBRARY_DIR)
32+
if(NOT SUITESPARSE_DIR)
33+
get_filename_component(SUITESPARSE_DIR ${SUITESPARSE_LIBRARY_DIR} DIRECTORY CACHE)
34+
endif()
35+
endif()
36+
37+
# Find SUITESPARSE header path and ensure all needed files are there
38+
find_path(SUITESPARSE_INCLUDE_DIR
39+
NAMES
40+
amd.h
41+
colamd.h
42+
klu.h
43+
SuiteSparse_config.h
44+
PATHS
45+
${SUITESPARSE_DIR} $ENV{SUITESPARSE_DIR} ${SUITESPARSE_ROOT_DIR} ${SUITESPARSE_LIBRARY_DIR}/..
46+
PATH_SUFFIXES
47+
include)
48+
49+
if(SUITESPARSE_LIBRARY)
50+
message(STATUS "Found Suitesparse include: ${SUITESPARSE_INCLUDE_DIR}")
51+
mark_as_advanced(SUITESPARSE_INCLUDE_DIR)
52+
unset(SUITESPARSE_LIBRARY)
53+
add_library(SUITESPARSE INTERFACE IMPORTED)
54+
target_include_directories(SUITESPARSE INTERFACE ${SUITESPARSE_INCLUDE_DIR})
55+
foreach(mod ${SUITESPARSE_MODULES})
56+
find_library(suitesparse_${mod}
57+
NAMES ${mod}
58+
HINTS ${SUITESPARSE_LIBRARY_DIR})
59+
if(suitesparse_${mod})
60+
message(STATUS "Found suitesparse internal library " ${mod})
61+
target_link_libraries(SUITESPARSE INTERFACE ${suitesparse_${mod}})
62+
mark_as_advanced(suitesparse_${mod})
63+
else()
64+
message(SEND_ERROR "Suitesparse internal library " ${mod} " not found")
65+
endif()
66+
endforeach(mod)
67+
else()
68+
if(NOT SUITESPARSE_ROOT_DIR)
69+
message(STATUS "Suitesparse dir not found! Please provide correct filepath.")
70+
set(SUITESPARSE_DIR ${SUITESPARSE_DIR} CACHE PATH "Path to Suitesparse installation root.")
71+
unset(SUITESPARSE_LIBRARY CACHE)
72+
unset(SUITESPARSE_INCLUDE_DIR CACHE)
73+
unset(SUITESPARSE_LIBRARY_DIR CACHE)
74+
elseif(NOT SUITESPARSE_LIBRARY)
75+
message(STATUS "Suitesparse library not found! Please provide correct filepath.")
76+
endif()
77+
if(SUITESPARSE_ROOT_DIR AND NOT SUITESPARSE_INCLUDE_DIR)
78+
message(STATUS "Suitesparse include dir not found! Please provide correct filepath.")
79+
endif()
80+
endif()

resolve/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ add_subdirectory(random)
8282
add_library(resolve_tpl INTERFACE)
8383

8484
if(RESOLVE_USE_KLU)
85-
target_link_libraries(resolve_tpl INTERFACE KLU)
85+
target_link_libraries(resolve_tpl INTERFACE ${suitesparse_klu})
86+
target_include_directories(resolve_tpl INTERFACE ${SUITESPARSE_INCLUDE_DIR})
8687
list(APPEND ReSolve_SRC ${ReSolve_KLU_SRC})
8788
list(APPEND ReSolve_HEADER_INSTALL ${ReSolve_KLU_HEADER_INSTALL})
8889
endif()

0 commit comments

Comments
 (0)