aboutsummaryrefslogtreecommitdiff
path: root/ports/clapack/FindLAPACK.cmake
blob: dfbf2c73eec34b10f0f3c36b1abab365659b167e (plain)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#.rst:
# clapack config for vcpkg
# ------------
#
# Find the clapack includes and library.
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This script defines the following variables:
#
# ``CLAPACK_FOUND``
#   True if clapack library found
#
# ``CLAPACK_VERSION``
#   Containing the clapack version tag (manually defined)
#
# ``CLAPACK_INCLUDE_DIR``
#   Location of clapack headers
#
# ``CLAPACK_LIBRARY``
#   List of libraries to link with when using clapack
#
# Result Targets
# ^^^^^^^^^^^^^^
#
# This script defines the following targets:
#
# ``clapack::clapack``
#   Target to use clapack
#
# Compatibility Variables
# ^^^^^^^^^^^^^^^^^^^^^^^
#
# This script defines the following variables for compatibility reasons:
#
# ``F2C_FOUND``
#   True if f2c (fortran-to-c wrap layer) library found
#
# ``F2C_INCLUDE_DIR``
#   Location of clapack headers
#
# ``F2C_LIBRARY``
#   Library containing the fortran-to-c wrap layer, necessary for clapack and automatically included when used
#
# ``LAPACK_FOUND``
#   True if clapack library found
#
# ``LAPACK_VERSION``
#   Containing the clapack version tag (manually defined)
#
# ``LAPACK_INCLUDE_DIR``
#   Location of clapack headers
#
# ``LAPACK_LIBRARY``
#   List of libraries to link with when using clapack
#
# Compatibility Targets
# ^^^^^^^^^^^^^^
#
# This script defines the following targets for compatibility reasons:
#
# ``lapack``
#   Target to use lapack

include(${CMAKE_ROOT}/Modules/SelectLibraryConfigurations.cmake)
include(${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)

set(CLAPACK_VERSION "3.2.1")

if(UNIX)
  find_library(ADDITIONAL_LAPACK_LIBRARY m)
endif()

if(NOT F2C_LIBRARY)
    find_library(F2C_LIBRARY_RELEASE NAMES f2c libf2c)
    find_library(F2C_LIBRARY_DEBUG NAMES f2cd libf2cd)
    list(APPEND F2C_LIBRARY_RELEASE ${ADDITIONAL_LAPACK_LIBRARY})
    list(APPEND F2C_LIBRARY_DEBUG ${ADDITIONAL_LAPACK_LIBRARY})
    select_library_configurations(F2C)
endif()

find_package(BLAS)

if(NOT LAPACK_LIBRARY)
    find_library(LAPACK_LIBRARY_RELEASE NAMES lapack)
    find_library(LAPACK_LIBRARY_DEBUG NAMES lapackd)
    list(APPEND LAPACK_LIBRARY_RELEASE ${F2C_LIBRARY_RELEASE})
    list(APPEND LAPACK_LIBRARY_DEBUG ${F2C_LIBRARY_DEBUG})
    select_library_configurations(LAPACK)
endif()

list(APPEND LAPACK_LIBRARY ${BLAS_LIBRARIES})

set(F2C_LIBRARIES "${F2C_LIBRARY}" CACHE STRING "" FORCE)
set(LAPACK_VERSION "${CLAPACK_VERSION}" CACHE STRING "" FORCE)
set(LAPACK_LIBRARIES "${LAPACK_LIBRARY}" CACHE STRING "" FORCE)
set(CLAPACK_LIBRARY "${LAPACK_LIBRARY}" CACHE STRING "" FORCE)
set(CLAPACK_LIBRARIES "${LAPACK_LIBRARY}" CACHE STRING "" FORCE)

if(NOT F2C_INCLUDE_DIR)
  find_path(F2C_INCLUDE_DIR NAMES f2c.h)
endif()

if(NOT LAPACK_INCLUDE_DIR)
  find_path(LAPACK_INCLUDE_DIR NAMES clapack.h)
endif()

list(APPEND LAPACK_INCLUDE_DIR ${F2C_INCLUDE_DIR})
set(LAPACK_INCLUDE_DIRS "${LAPACK_INCLUDE_DIR}" CACHE PATH "" FORCE)
set(CLAPACK_INCLUDE_DIR "${LAPACK_INCLUDE_DIR}" CACHE PATH "" FORCE)
set(CLAPACK_INCLUDE_DIRS "${LAPACK_INCLUDE_DIR}" CACHE PATH "" FORCE)
set(F2C_INCLUDE_DIRS "${F2C_INCLUDE_DIR}" CACHE PATH "" FORCE)

if(WIN32)
  string( REPLACE ".lib" ".dll" LAPACK_LIBRARY_RELEASE_DLL "${LAPACK_LIBRARY_RELEASE}" )
  string( REPLACE ".lib" ".dll" LAPACK_LIBRARY_DEBUG_DLL   "${LAPACK_LIBRARY_DEBUG}" )
  string( REPLACE ".lib" ".dll" F2C_LIBRARY_RELEASE_DLL    "${F2C_LIBRARY_RELEASE}" )
  string( REPLACE ".lib" ".dll" F2C_LIBRARY_DEBUG_DLL      "${F2C_LIBRARY_DEBUG}" )
endif()

find_package_handle_standard_args(CLAPACK DEFAULT_MSG CLAPACK_LIBRARY CLAPACK_INCLUDE_DIR)
mark_as_advanced(CLAPACK_INCLUDE_DIR CLAPACK_LIBRARY)

find_package_handle_standard_args(LAPACK  DEFAULT_MSG LAPACK_LIBRARY LAPACK_INCLUDE_DIR)
mark_as_advanced(LAPACK_INCLUDE_DIR LAPACK_LIBRARY)

find_package_handle_standard_args(F2C     DEFAULT_MSG F2C_LIBRARY F2C_INCLUDE_DIR)
mark_as_advanced(F2C_INCLUDE_DIR F2C_LIBRARY)

#TARGETS
if( CLAPACK_FOUND AND NOT TARGET clapack::clapack )
  if( EXISTS "${LAPACK_LIBRARY_RELEASE_DLL}" )
    add_library( clapack::clapack      SHARED IMPORTED )
    set_target_properties( clapack::clapack PROPERTIES
      IMPORTED_LOCATION_RELEASE         "${LAPACK_LIBRARY_RELEASE_DLL}"
      IMPORTED_IMPLIB                   "${LAPACK_LIBRARY_RELEASE}"
      INTERFACE_INCLUDE_DIRECTORIES     "${LAPACK_INCLUDE_DIR}"
      IMPORTED_CONFIGURATIONS           Release
      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
    if( EXISTS "${LAPACK_LIBRARY_DEBUG_DLL}" )
      set_property( TARGET clapack::clapack APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
      set_target_properties( clapack::clapack PROPERTIES
        IMPORTED_LOCATION_DEBUG           "${LAPACK_LIBRARY_DEBUG_DLL}"
        IMPORTED_IMPLIB_DEBUG             "${LAPACK_LIBRARY_DEBUG}" )
    endif()
  else()
    add_library( clapack::clapack      UNKNOWN IMPORTED )
    set_target_properties( clapack::clapack PROPERTIES
      IMPORTED_LOCATION_RELEASE         "${LAPACK_LIBRARY_RELEASE}"
      INTERFACE_INCLUDE_DIRECTORIES     "${LAPACK_INCLUDE_DIR}"
      IMPORTED_CONFIGURATIONS           Release
      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
    if( EXISTS "${LAPACK_LIBRARY_DEBUG}" )
      set_property( TARGET clapack::clapack APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
      set_target_properties( clapack::clapack PROPERTIES
        IMPORTED_LOCATION_DEBUG           "${LAPACK_LIBRARY_DEBUG}" )
    endif()
  endif()
endif()

if( CLAPACK_FOUND AND NOT TARGET lapack )
  if( EXISTS "${LAPACK_LIBRARY_RELEASE_DLL}" )
    add_library( lapack      SHARED IMPORTED )
    set_target_properties( lapack PROPERTIES
      IMPORTED_LOCATION_RELEASE         "${LAPACK_LIBRARY_RELEASE_DLL}"
      IMPORTED_IMPLIB                   "${LAPACK_LIBRARY_RELEASE}"
      INTERFACE_INCLUDE_DIRECTORIES     "${LAPACK_INCLUDE_DIR}"
      IMPORTED_CONFIGURATIONS           Release
      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
    if( EXISTS "${LAPACK_LIBRARY_DEBUG_DLL}" )
      set_property( TARGET lapack APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
      set_target_properties( lapack PROPERTIES
        IMPORTED_LOCATION_DEBUG           "${LAPACK_LIBRARY_DEBUG_DLL}"
        IMPORTED_IMPLIB_DEBUG             "${LAPACK_LIBRARY_DEBUG}" )
    endif()
  else()
    add_library( lapack      UNKNOWN IMPORTED )
    set_target_properties( lapack PROPERTIES
      IMPORTED_LOCATION_RELEASE         "${LAPACK_LIBRARY_RELEASE}"
      INTERFACE_INCLUDE_DIRECTORIES     "${LAPACK_INCLUDE_DIR}"
      IMPORTED_CONFIGURATIONS           Release
      IMPORTED_LINK_INTERFACE_LANGUAGES "C" )
    if( EXISTS "${LAPACK_LIBRARY_DEBUG}" )
      set_property( TARGET lapack APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug )
      set_target_properties( lapack PROPERTIES
        IMPORTED_LOCATION_DEBUG           "${LAPACK_LIBRARY_DEBUG}" )
    endif()
  endif()
endif()

set(LAPACK_LIBRARY "${LAPACK_LIBRARY}" CACHE STRING "" FORCE)
set(F2C_LIBRARY "${F2C_LIBRARY}" CACHE STRING "" FORCE)
set(LAPACK_LIBRARY_RELEASE "${LAPACK_LIBRARY_RELEASE}" CACHE STRING "" FORCE)
set(LAPACK_LIBRARY_DEBUG "${LAPACK_LIBRARY_DEBUG}" CACHE STRING "" FORCE)
set(F2C_LIBRARY_RELEASE "${F2C_LIBRARY_RELEASE}" CACHE STRING "" FORCE)
set(F2C_LIBRARY_DEBUG "${F2C_LIBRARY_DEBUG}" CACHE STRING "" FORCE)