From 24be9d2e5fa91a4b943383029d4e3ac16906bf39 Mon Sep 17 00:00:00 2001 From: Justin Carpentier Date: Sat, 10 Feb 2024 18:19:31 +0100 Subject: [PATCH] external: add cmake finder for CHOLMOD --- find-external/CHOLMOD/findCHOLMOD.cmake | 112 ++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 find-external/CHOLMOD/findCHOLMOD.cmake diff --git a/find-external/CHOLMOD/findCHOLMOD.cmake b/find-external/CHOLMOD/findCHOLMOD.cmake new file mode 100644 index 000000000..f1e86ea50 --- /dev/null +++ b/find-external/CHOLMOD/findCHOLMOD.cmake @@ -0,0 +1,112 @@ +# This file has been imported from Eigen. See +# https://gitlab.com/libeigen/eigen/-/blob/master/cmake/FindCHOLMOD.cmake It has +# been then adapted by Justin Carpentier to comply +# with the API of the JRL CMake module. + +# CHOLMOD lib usually requires linking to a blas and lapack library. It is up to +# the user of this module to find a BLAS and link to it. + +if(CHOLMOD_INCLUDES AND CHOLMOD_LIBRARIES) + set(CHOLMOD_FIND_QUIETLY TRUE) +endif() + +find_path( + CHOLMOD_INCLUDES + NAMES cholmod.h + PATHS $ENV{CHOLMODDIR} ${INCLUDE_INSTALL_DIR} + PATH_SUFFIXES suitesparse ufsparse) + +find_library(CHOLMOD_LIBRARIES cholmod PATHS $ENV{CHOLMODDIR} + ${LIB_INSTALL_DIR}) + +if(CHOLMOD_LIBRARIES) + + get_filename_component(CHOLMOD_LIBDIR ${CHOLMOD_LIBRARIES} PATH) + + find_library(AMD_LIBRARY amd PATHS ${CHOLMOD_LIBDIR} $ENV{CHOLMODDIR} + ${LIB_INSTALL_DIR}) + if(AMD_LIBRARY) + set(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARIES} ${AMD_LIBRARY}) + else() + set(CHOLMOD_LIBRARIES FALSE) + endif() + +endif() + +if(CHOLMOD_LIBRARIES) + + find_library(COLAMD_LIBRARY colamd PATHS ${CHOLMOD_LIBDIR} $ENV{CHOLMODDIR} + ${LIB_INSTALL_DIR}) + if(COLAMD_LIBRARY) + set(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARIES} ${COLAMD_LIBRARY}) + else() + set(CHOLMOD_LIBRARIES FALSE) + endif() + +endif() + +if(CHOLMOD_LIBRARIES) + + find_library(CAMD_LIBRARY camd PATHS ${CHOLMOD_LIBDIR} $ENV{CHOLMODDIR} + ${LIB_INSTALL_DIR}) + if(CAMD_LIBRARY) + set(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARIES} ${CAMD_LIBRARY}) + else() + set(CHOLMOD_LIBRARIES FALSE) + endif() + +endif() + +if(CHOLMOD_LIBRARIES) + + find_library(CCOLAMD_LIBRARY ccolamd PATHS ${CHOLMOD_LIBDIR} $ENV{CHOLMODDIR} + ${LIB_INSTALL_DIR}) + if(CCOLAMD_LIBRARY) + set(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARIES} ${CCOLAMD_LIBRARY}) + else() + set(CHOLMOD_LIBRARIES FALSE) + endif() + +endif() + +if(CHOLMOD_LIBRARIES) + + find_library(CHOLMOD_METIS_LIBRARY metis + PATHS ${CHOLMOD_LIBDIR} $ENV{CHOLMODDIR} ${LIB_INSTALL_DIR}) + if(CHOLMOD_METIS_LIBRARY) + set(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARIES} ${CHOLMOD_METIS_LIBRARY}) + endif() + +endif() + +if(CHOLMOD_LIBRARIES) + + find_library(SUITESPARSE_LIBRARY SuiteSparse + PATHS ${CHOLMOD_LIBDIR} $ENV{CHOLMODDIR} ${LIB_INSTALL_DIR}) + if(SUITESPARSE_LIBRARY) + set(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARIES} ${SUITESPARSE_LIBRARY}) + endif() + +endif() + +if(CHOLMOD_LIBRARIES) + add_library(SuiteSparse::CHOLMOD SHARED IMPORTED) + set_target_properties( + SuiteSparse::CHOLMOD + PROPERTIES IMPORTED_LOCATION ${CHOLMOD_LIBRARIES} + INTERFACE_INCLUDE_DIRECTORIES "${CHOLMOD_INCLUDES}") +endif(CHOLMOD_LIBRARIES) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CHOLMOD DEFAULT_MSG CHOLMOD_INCLUDES + CHOLMOD_LIBRARIES) + +mark_as_advanced( + CHOLMOD_INCLUDES + CHOLMOD_LIBRARIES + AMD_LIBRARY + COLAMD_LIBRARY + SUITESPARSE_LIBRARY + CAMD_LIBRARY + CCOLAMD_LIBRARY + CHOLMOD_METIS_LIBRARY)