FindSUITESPARSE.cmake 7.58 KB
Newer Older
1
2
3
# - Try to find SUITESPARSE
# Once done this will define
#  
4
5
6
7
8
9
10
#  SUITESPARSE_FOUND            - system has SUITESPARSE
#  SUITESPARSE_INCLUDE_DIRS     - the SUITESPARSE include directory
#  SUITESPARSE_LIBRARIES        - Link these to use SUITESPARSE
#  SUITESPARSE_SPQR_LIBRARY     - name of spqr library (necessary due to error in debian package)
#  SUITESPARSE_SPQR_LIBRARY_DIR - name of spqr library (necessary due to error in debian package)
#  SUITESPARSE_LIBRARY_DIR      - Library main directory containing suitesparse libs
#  SUITESPARSE_LIBRARY_DIRS     - all Library directories containing suitesparse libs
David Bommes's avatar
changed    
David Bommes committed
11
#  SUITESPARSE_SPQR_VALID       - automatic identification whether or not spqr package is installed correctly
12
13
14
15
16
17
18
19
20

IF (SUITESPARSE_INCLUDE_DIRS)
  # Already in cache, be silent
  SET(SUITESPARSE_FIND_QUIETLY TRUE)
ENDIF (SUITESPARSE_INCLUDE_DIRS)

if( WIN32 )
   # Find cholmod part of the suitesparse library collection

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
   # Check if the base path is set
   if ( NOT CMAKE_WINDOWS_LIBS_DIR )
     # This is the base directory for windows library search used in the finders we shipp.
     set(CMAKE_WINDOWS_LIBS_DIR "c:/libs" CACHE STRING "Default Library search dir on windows." )
   endif()

   if ( CMAKE_GENERATOR MATCHES "^Visual Studio 11.*Win64" )
     SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2012/x64/")
   elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 11.*" )
     SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2012/x32/")
   elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 12.*Win64" )
     SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2013/x64/")
   elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 12.*" )
     SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2013/x32/")
   elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 14.*Win64" )
     SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2015/x64/")
   elseif ( CMAKE_GENERATOR MATCHES "^Visual Studio 14.*" )
     SET(VS_SEARCH_PATH "${CMAKE_WINDOWS_LIBS_DIR}/vs2015/x32/")
   endif()
40
41
 

42
   FIND_PATH( CHOLMOD_INCLUDE_DIR cholmod.h
43
44
45
46
47
              PATHS "C:\\libs\\win32\\SuiteSparse\\Include"
         	    "${VS_SEARCH_PATH}"
	      PATH_SUFFIXES suitesparse-4.2.1/include/suitesparse
		                suitesparse-metis-for-windows-1.2.2-install/include/suitesparse
		      )
48
49
50
51
52
53
54
55

   # Add cholmod include directory to collection include directories
   IF ( CHOLMOD_INCLUDE_DIR )
	list ( APPEND SUITESPARSE_INCLUDE_DIRS ${CHOLMOD_INCLUDE_DIR} )
   ENDIF( CHOLMOD_INCLUDE_DIR )


   # find path suitesparse library
56
   FIND_PATH( SUITESPARSE_LIBRARY_DIRS 
57
58
59
60
61
62
	       NAMES amd.lib libamd.lib
               PATHS "C:\\libs\\win32\\SuiteSparse\\libs" 
                     "${VS_SEARCH_PATH}"
               PATH_SUFFIXES suitesparse-4.2.1/lib64
                             suitesparse-metis-for-windows-1.2.2-install/lib64			   )
				
63
   # if we found the library, add it to the defined libraries
64
   IF ( SUITESPARSE_LIBRARY_DIRS )
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
     if ( EXISTS "${SUITESPARSE_LIBRARY_DIRS}/libamd.lib" )
	   list ( APPEND SUITESPARSE_LIBRARIES optimized;libamd;optimized;libcamd;optimized;libccolamd;optimized;libcholmod;optimized;libcolamd;optimized;metis;optimized;libspqr;optimized;libumfpack;debug;libamdd;debug;libcamdd;debug;libccolamdd;debug;libcholmodd;debug;libspqrd;debug;libumfpackd;debug;libcolamdd;debug;metisd;optimized;liblapack;debug;liblapackd;optimized;suitesparseconfig;debug;suitesparseconfigd )
     else()   
	   list ( APPEND SUITESPARSE_LIBRARIES optimized;amd;optimized;camd;optimized;ccolamd;optimized;cholmod;optimized;colamd;optimized;metis;optimized;spqr;optimized;umfpack;debug;amdd;debug;camdd;debug;ccolamdd;debug;cholmodd;debug;spqrd;debug;umfpackd;debug;colamdd;debug;metisd;optimized;blas;optimized;libf2c;optimized;lapack;debug;blasd;debug;libf2cd;debug;lapackd )
	 endif()  
	 
     if(EXISTS  "${CHOLMOD_INCLUDE_DIR}/SuiteSparseQR.hpp")
	   SET(SUITESPARSE_SPQR_VALID TRUE CACHE BOOL "SuiteSparseSPQR valid")
     else()
	   SET(SUITESPARSE_SPQR_VALID FALSE CACHE BOOL "SuiteSparseSPQR valid")
     endif()

     if(SUITESPARSE_SPQR_VALID)
	   FIND_LIBRARY( SUITESPARSE_SPQR_LIBRARY
		             NAMES libspqr
		             PATHS ${SUITESPARSE_LIBRARY_DIRS} )
	   IF (SUITESPARSE_SPQR_LIBRARY)			
	     list ( APPEND SUITESPARSE_LIBRARIES optimized;libspqr;debug;libspqrd)
	   ENDIF (SUITESPARSE_SPQR_LIBRARY)
     endif()
	 
	 
87
   ENDIF( SUITESPARSE_LIBRARY_DIRS )  
88
89

else( WIN32 )
90
91
   IF( APPLE)
	   FIND_PATH( CHOLMOD_INCLUDE_DIR cholmod.h
David Bommes's avatar
David Bommes committed
92
        	      PATHS  /opt/local/include/ufsparse )
93

Jan Möbius's avatar
Jan Möbius committed
94
           FIND_PATH( SUITESPARSE_LIBRARY_DIR
David Bommes's avatar
David Bommes committed
95
96
                      NAMES libSuiteSparse.dylib
                      PATHS /opt/local/lib )
97

David Bommes's avatar
David Bommes committed
98
99
100
           list ( APPEND SUITESPARSE_LIBRARY_DIRS ${SUITESPARSE_LIBRARY_DIR} )

           list ( APPEND SUITESPARSE_LIBRARIES SuiteSparse)
101
102
103

   ELSE(APPLE)
	   FIND_PATH( CHOLMOD_INCLUDE_DIR cholmod.h
David Bommes's avatar
changed    
David Bommes committed
104
105
106
107
        	      PATHS /usr/local/include 
        	            /usr/include 
        	            /usr/include/suitesparse/ 
        	            ${CMAKE_SOURCE_DIR}/MacOS/Libs/cholmod
108
109
110
111
112
              	      PATH_SUFFIXES cholmod/ CHOLMOD/ )

   	
           FIND_PATH( SUITESPARSE_LIBRARY_DIR
                      NAMES libcholmod.so 
David Bommes's avatar
changed    
David Bommes committed
113
114
                      PATHS /usr/lib 
                            /usr/lib64 
115
116
                            /usr/local/lib
			    /usr/lib/x86_64-linux-gnu )
117
118
119


   ENDIF(APPLE)
120
121
122
123
124
125
126
127
128

   # Add cholmod include directory to collection include directories
   IF ( CHOLMOD_INCLUDE_DIR )
	list ( APPEND SUITESPARSE_INCLUDE_DIRS ${CHOLMOD_INCLUDE_DIR} )
   ENDIF( CHOLMOD_INCLUDE_DIR )


   # if we found the library, add it to the defined libraries
   IF ( SUITESPARSE_LIBRARY_DIR )
David Bommes's avatar
David Bommes committed
129
130

       # Skipped, as this is set for apple in the block above
131
#       if (NOT APPLE)
David Bommes's avatar
David Bommes committed
132
133
134
135
136
137
138
139
140
141
142
         list ( APPEND SUITESPARSE_LIBRARIES amd)
         list ( APPEND SUITESPARSE_LIBRARIES btf)
         list ( APPEND SUITESPARSE_LIBRARIES camd)
         list ( APPEND SUITESPARSE_LIBRARIES ccolamd)
         list ( APPEND SUITESPARSE_LIBRARIES cholmod)
         list ( APPEND SUITESPARSE_LIBRARIES colamd)
 #       list ( APPEND SUITESPARSE_LIBRARIES csparse)
         list ( APPEND SUITESPARSE_LIBRARIES cxsparse)
         list ( APPEND SUITESPARSE_LIBRARIES klu)
 #       list ( APPEND SUITESPARSE_LIBRARIES spqr)
         list ( APPEND SUITESPARSE_LIBRARIES umfpack)
143
 #      endif()
David Bommes's avatar
David Bommes committed
144
   
145
146
147
       # Metis and spqr are optional
       FIND_LIBRARY( SUITESPARSE_METIS_LIBRARY
                     NAMES metis
148
                     PATHS ${SUITESPARSE_LIBRARY_DIR} )
149
       IF (SUITESPARSE_METIS_LIBRARY)			
150
	  list ( APPEND SUITESPARSE_LIBRARIES ${SUITESPARSE_METIS_LIBRARY})
151
       ENDIF(SUITESPARSE_METIS_LIBRARY)
David Bommes's avatar
changed    
David Bommes committed
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166

       if(EXISTS  "${CHOLMOD_INCLUDE_DIR}/SuiteSparseQR.hpp")
	  SET(SUITESPARSE_SPQR_VALID TRUE CACHE BOOL "SuiteSparseSPQR valid")
       else()
	  SET(SUITESPARSE_SPQR_VALID false CACHE BOOL "SuiteSparseSPQR valid")
       endif()

       if(SUITESPARSE_SPQR_VALID)
	  FIND_LIBRARY( SUITESPARSE_SPQR_LIBRARY
		      NAMES spqr
		      PATHS ${SUITESPARSE_LIBRARY_DIR} )
	  IF (SUITESPARSE_SPQR_LIBRARY)			
	    list ( APPEND SUITESPARSE_LIBRARIES spqr)
	  ENDIF (SUITESPARSE_SPQR_LIBRARY)
       endif()
167
       
David Bommes's avatar
changed    
David Bommes committed
168
    ENDIF( SUITESPARSE_LIBRARY_DIR )  
169
170
171
172
173
174
175
176
177
178
179
180
   
endif( WIN32 )

IF (SUITESPARSE_INCLUDE_DIRS AND SUITESPARSE_LIBRARIES)
   IF(WIN32)
    list (APPEND SUITESPARSE_INCLUDE_DIRS ${CHOLMOD_INCLUDE_DIR}/../../UFconfig )
   ENDIF(WIN32)
   SET(SUITESPARSE_FOUND TRUE)
ELSE (SUITESPARSE_INCLUDE_DIRS AND SUITESPARSE_LIBRARIES)
   SET( SUITESPARSE_FOUND FALSE )
ENDIF (SUITESPARSE_INCLUDE_DIRS AND SUITESPARSE_LIBRARIES)