File: FindCholmod.cmake

package info (click to toggle)
yade 2025.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,308 kB
  • sloc: cpp: 93,298; python: 50,409; sh: 577; makefile: 162
file content (59 lines) | stat: -rw-r--r-- 3,375 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# - Try to find CHOLMOD
# This will define
#
#  CHOLMOD_FOUND          - system has CHOLMOD
#  CHOLMOD_LIBRARIES 	    - library to link against to use Cholmod
#  CHOLMOD_INCLUDE_DIR    - where to find cholmod.h, etc.
#  AMD_LIBRARY	 	        - needed by CHOLMOD
#  COLAMD_LIBRARY 	      - needed by CHOLMOD
#  CCOLAMD_LIBRARY 	      - needed by CHOLMOD
#  CAMD_LIBRARY 	        - needed by CHOLMOD

FIND_LIBRARY(CHOLMOD_LIBRARIES NAMES cholmod libcholmod HINTS ${SUITESPARSE_PREFIX_PATH}/lib)
FIND_LIBRARY(AMD_LIBRARY NAMES amd libamd HINTS ${SUITESPARSE_PREFIX_PATH}/lib)
FIND_LIBRARY(CAMD_LIBRARY NAMES camd libcamd HINTS ${SUITESPARSE_PREFIX_PATH}/lib)
FIND_LIBRARY(COLAMD_LIBRARY NAMES colamd libcolamd HINTS ${SUITESPARSE_PREFIX_PATH}/lib)
FIND_LIBRARY(CCOLAMD_LIBRARY NAMES ccolamd libccolamd HINTS ${SUITESPARSE_PREFIX_PATH}/lib)
FIND_LIBRARY(SUITESPARSECONFIG_LIBRARY NAMES suitesparseconfig libsuitesparseconfig HINTS ${SUITESPARSE_PREFIX_PATH}/lib)

FIND_PATH(CHOLMOD_INCLUDE_DIR cholmod.h HINTS ${SUITESPARSE_PREFIX_PATH}/include PATH /usr/include /usr/include/suitesparse)

# Check the suitesparse library version and set #ifdefs accordingly
if (CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARIES)
  # SuiteSparse version >= 4.
  set(SUITESPARSE_VERSION_FILE
    ${CHOLMOD_INCLUDE_DIR}/SuiteSparse_config.h)
  if (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
	MESSAGE(STATUS "Could not find file ${SUITESPARSE_VERSION_FILE} containing version information for SuiteSparse version >=4. Direct CHOLMOD solver for CPU will be deactivated.")
  else (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
    file(READ ${SUITESPARSE_VERSION_FILE} SUITESPARSE_CONFIG_CONTENTS)

    string(REGEX MATCH "#define SUITESPARSE_MAIN_VERSION[ ]+[0-9]+"
      SUITESPARSE_MAIN_VERSION "${SUITESPARSE_CONFIG_CONTENTS}")
    string(REGEX REPLACE "#define SUITESPARSE_MAIN_VERSION[ ]+([0-9]+)" "\\1"
      SUITESPARSE_MAIN_VERSION "${SUITESPARSE_MAIN_VERSION}")

    string(REGEX MATCH "#define SUITESPARSE_SUB_VERSION[ ]+[0-9]+"
      SUITESPARSE_SUB_VERSION "${SUITESPARSE_CONFIG_CONTENTS}")
    string(REGEX REPLACE "#define SUITESPARSE_SUB_VERSION[ ]+([0-9]+)" "\\1"
      SUITESPARSE_SUB_VERSION "${SUITESPARSE_SUB_VERSION}")

    string(REGEX MATCH "#define SUITESPARSE_SUBSUB_VERSION[ ]+[0-9]+"
      SUITESPARSE_SUBSUB_VERSION "${SUITESPARSE_CONFIG_CONTENTS}")
    string(REGEX REPLACE "#define SUITESPARSE_SUBSUB_VERSION[ ]+([0-9]+)" "\\1"
      SUITESPARSE_SUBSUB_VERSION "${SUITESPARSE_SUBSUB_VERSION}")

    set(SUITESPARSE_VERSION
      "${SUITESPARSE_MAIN_VERSION}.${SUITESPARSE_SUB_VERSION}.${SUITESPARSE_SUBSUB_VERSION}")
	MESSAGE(STATUS "SuiteSparse version ${SUITESPARSE_VERSION} found, CHOLMOD direct solver for CPU activated.")
  endif (NOT EXISTS ${SUITESPARSE_VERSION_FILE})
endif (CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARIES)

if ((SUITESPARSE_MAIN_VERSION GREATER 4) OR (SUITESPARSE_MAIN_VERSION EQUAL 4))
	ADD_DEFINITIONS("-DSUITESPARSE_VERSION_4")
endif ((SUITESPARSE_MAIN_VERSION GREATER 4) OR (SUITESPARSE_MAIN_VERSION EQUAL 4))


INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cholmod DEFAULT_MSG CHOLMOD_LIBRARIES CHOLMOD_INCLUDE_DIR AMD_LIBRARY CAMD_LIBRARY COLAMD_LIBRARY CCOLAMD_LIBRARY SUITESPARSECONFIG_LIBRARY)
MARK_AS_ADVANCED(CHOLMOD_LIBRARIES CHOLMOD_INCLUDE_DIR AMD_LIBRARY CAMD_LIBRARY COLAMD_LIBRARY CCOLAMD_LIBRARY SUITESPARSECONFIG_LIBRARY)