blob: e3395bc10ec08c14869fa7d28bb8ebfdff4b30a9 [file] [log] [blame]
Austin Schuh189376f2018-12-20 22:11:15 +11001###
Brian Silverman72890c22015-09-19 14:37:37 -04002#
Austin Schuh189376f2018-12-20 22:11:15 +11003# @copyright (c) 2009-2014 The University of Tennessee and The University
4# of Tennessee Research Foundation.
5# All rights reserved.
6# @copyright (c) 2012-2016 Inria. All rights reserved.
7# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
8#
9###
10#
11# - Find BLAS library
12# This module finds an installed fortran library that implements the BLAS
Brian Silverman72890c22015-09-19 14:37:37 -040013# linear-algebra interface (see http://www.netlib.org/blas/).
Austin Schuh189376f2018-12-20 22:11:15 +110014# The list of libraries searched for is taken
Brian Silverman72890c22015-09-19 14:37:37 -040015# from the autoconf macro file, acx_blas.m4 (distributed at
16# http://ac-archive.sourceforge.net/ac-archive/acx_blas.html).
17#
18# This module sets the following variables:
19# BLAS_FOUND - set to true if a library implementing the BLAS interface
20# is found
Austin Schuh189376f2018-12-20 22:11:15 +110021# BLAS_LINKER_FLAGS - uncached list of required linker flags (excluding -l
Brian Silverman72890c22015-09-19 14:37:37 -040022# and -L).
Austin Schuh189376f2018-12-20 22:11:15 +110023# BLAS_COMPILER_FLAGS - uncached list of required compiler flags (including -I for mkl headers).
24# BLAS_LIBRARIES - uncached list of libraries (using full path name) to
25# link against to use BLAS
26# BLAS95_LIBRARIES - uncached list of libraries (using full path name)
27# to link against to use BLAS95 interface
28# BLAS95_FOUND - set to true if a library implementing the BLAS f95 interface
29# is found
30# BLA_STATIC if set on this determines what kind of linkage we do (static)
31# BLA_VENDOR if set checks only the specified vendor, if not set checks
32# all the possibilities
33# BLAS_VENDOR_FOUND stores the BLAS vendor found
34# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK
35# The user can give specific paths where to find the libraries adding cmake
36# options at configure (ex: cmake path/to/project -DBLAS_DIR=path/to/blas):
37# BLAS_DIR - Where to find the base directory of blas
38# BLAS_INCDIR - Where to find the header files
39# BLAS_LIBDIR - Where to find the library files
40# The module can also look for the following environment variables if paths
41# are not given as cmake variable: BLAS_DIR, BLAS_INCDIR, BLAS_LIBDIR
42# For MKL case and if no paths are given as hints, we will try to use the MKLROOT
43# environment variable
44# BLAS_VERBOSE Print some additional information during BLAS libraries detection
45##########
46### List of vendors (BLA_VENDOR) valid in this module
47########## List of vendors (BLA_VENDOR) valid in this module
48## Open (for OpenBlas), Eigen (for EigenBlas), Goto, ATLAS PhiPACK,
49##  CXML, DXML, SunPerf, SCSL, SGIMATH, IBMESSL, IBMESSLMT
50## Intel10_32 (intel mkl v10 32 bit), Intel10_64lp (intel mkl v10 64 bit,lp thread model, lp64 model),
51## Intel10_64lp_seq (intel mkl v10 64 bit,sequential code, lp64 model),
52## Intel( older versions of mkl 32 and 64 bit),
53##  ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic
54# C/CXX should be enabled to use Intel mkl
55###
56# We handle different modes to find the dependency
Brian Silverman72890c22015-09-19 14:37:37 -040057#
Austin Schuh189376f2018-12-20 22:11:15 +110058# - Detection if already installed on the system
59# - BLAS libraries can be detected from different ways
60# Here is the order of precedence:
61# 1) we look in cmake variable BLAS_LIBDIR or BLAS_DIR (we guess the libdirs) if defined
62# 2) we look in environment variable BLAS_LIBDIR or BLAS_DIR (we guess the libdirs) if defined
63# 3) we look in common environnment variables depending on the system (INCLUDE, C_INCLUDE_PATH, CPATH - LIB, DYLD_LIBRARY_PATH, LD_LIBRARY_PATH)
64# 4) we look in common system paths depending on the system, see for example paths contained in the following cmake variables:
65# - CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES, CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
66# - CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES, CMAKE_C_IMPLICIT_LINK_DIRECTORIES
67#
68
69#=============================================================================
70# Copyright 2007-2009 Kitware, Inc.
71#
72# Distributed under the OSI-approved BSD License (the "License");
73# see accompanying file Copyright.txt for details.
74#
75# This software is distributed WITHOUT ANY WARRANTY; without even the
76# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
77# See the License for more information.
78#=============================================================================
79# (To distribute this file outside of CMake, substitute the full
80# License text for the above reference.)
81
82## Some macros to print status when search for headers and libs
83# This macro informs why the _lib_to_find file has not been found
84macro(Print_Find_Library_Blas_Status _libname _lib_to_find)
85
86 # save _libname upper/lower case
87 string(TOUPPER ${_libname} LIBNAME)
88 string(TOLOWER ${_libname} libname)
89
90 # print status
91 #message(" ")
92 if(${LIBNAME}_LIBDIR)
93 message("${Yellow}${LIBNAME}_LIBDIR is defined but ${_lib_to_find}"
94 "has not been found in ${ARGN}${ColourReset}")
95 else()
96 if(${LIBNAME}_DIR)
97 message("${Yellow}${LIBNAME}_DIR is defined but ${_lib_to_find}"
98 "has not been found in ${ARGN}${ColourReset}")
99 else()
100 message("${Yellow}${_lib_to_find} not found."
101 "Nor ${LIBNAME}_DIR neither ${LIBNAME}_LIBDIR"
102 "are defined so that we look for ${_lib_to_find} in"
103 "system paths (Linux: LD_LIBRARY_PATH, Windows: LIB,"
104 "Mac: DYLD_LIBRARY_PATH,"
105 "CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES,"
106 "CMAKE_C_IMPLICIT_LINK_DIRECTORIES)${ColourReset}")
107 if(_lib_env)
108 message("${Yellow}${_lib_to_find} has not been found in"
109 "${_lib_env}${ColourReset}")
110 endif()
111 endif()
112 endif()
113 message("${BoldYellow}Please indicate where to find ${_lib_to_find}. You have three options:\n"
114 "- Option 1: Provide the Installation directory of BLAS library with cmake option: -D${LIBNAME}_DIR=your/path/to/${libname}/\n"
115 "- Option 2: Provide the directory where to find the library with cmake option: -D${LIBNAME}_LIBDIR=your/path/to/${libname}/lib/\n"
116 "- Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)\n"
117 "- Option 4: If your library provides a PkgConfig file, make sure pkg-config finds your library${ColourReset}")
118
119endmacro()
120
121# This macro informs why the _lib_to_find file has not been found
122macro(Print_Find_Library_Blas_CheckFunc_Status _name)
123
124 # save _libname upper/lower case
125 string(TOUPPER ${_name} FUNCNAME)
126 string(TOLOWER ${_name} funcname)
127
128 # print status
129 #message(" ")
130 message("${Red}Libs have been found but check of symbol ${_name} failed "
131 "with following libraries ${ARGN}${ColourReset}")
132 message("${BoldRed}Please open your error file CMakeFiles/CMakeError.log"
133 "to figure out why it fails${ColourReset}")
134 #message(" ")
135
136endmacro()
137
138if (NOT BLAS_FOUND)
139 set(BLAS_DIR "" CACHE PATH "Installation directory of BLAS library")
140 if (NOT BLAS_FIND_QUIETLY)
141 message(STATUS "A cache variable, namely BLAS_DIR, has been set to specify the install directory of BLAS")
142 endif()
143endif()
144
145option(BLAS_VERBOSE "Print some additional information during BLAS libraries detection" OFF)
146mark_as_advanced(BLAS_VERBOSE)
Brian Silverman72890c22015-09-19 14:37:37 -0400147
148include(CheckFunctionExists)
Austin Schuh189376f2018-12-20 22:11:15 +1100149include(CheckFortranFunctionExists)
Brian Silverman72890c22015-09-19 14:37:37 -0400150
Austin Schuh189376f2018-12-20 22:11:15 +1100151set(_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
Brian Silverman72890c22015-09-19 14:37:37 -0400152
Austin Schuh189376f2018-12-20 22:11:15 +1100153# Check the language being used
154get_property( _LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES )
155if( _LANGUAGES_ MATCHES Fortran AND CMAKE_Fortran_COMPILER)
156 set( _CHECK_FORTRAN TRUE )
157elseif( (_LANGUAGES_ MATCHES C) OR (_LANGUAGES_ MATCHES CXX) )
158 set( _CHECK_FORTRAN FALSE )
159else()
160 if(BLAS_FIND_REQUIRED)
161 message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.")
162 else()
163 message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)")
164 return()
165 endif()
166endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400167
Austin Schuh189376f2018-12-20 22:11:15 +1100168macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread)
169 # This macro checks for the existence of the combination of fortran libraries
170 # given by _list. If the combination is found, this macro checks (using the
171 # Check_Fortran_Function_Exists macro) whether can link against that library
172 # combination using the name of a routine given by _name using the linker
173 # flags given by _flags. If the combination of libraries is found and passes
174 # the link test, LIBRARIES is set to the list of complete library paths that
175 # have been found. Otherwise, LIBRARIES is set to FALSE.
176
177 # N.B. _prefix is the prefix applied to the names of all cached variables that
178 # are generated internally and marked advanced by this macro.
179
180 set(_libdir ${ARGN})
181
182 set(_libraries_work TRUE)
183 set(${LIBRARIES})
Brian Silverman72890c22015-09-19 14:37:37 -0400184 set(_combined_name)
Austin Schuh189376f2018-12-20 22:11:15 +1100185 set(ENV_MKLROOT "$ENV{MKLROOT}")
186 set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
187 set(ENV_BLAS_LIBDIR "$ENV{BLAS_LIBDIR}")
188 if (NOT _libdir)
189 if (BLAS_LIBDIR)
190 list(APPEND _libdir "${BLAS_LIBDIR}")
191 elseif (BLAS_DIR)
192 list(APPEND _libdir "${BLAS_DIR}")
193 list(APPEND _libdir "${BLAS_DIR}/lib")
194 if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
195 list(APPEND _libdir "${BLAS_DIR}/lib64")
196 list(APPEND _libdir "${BLAS_DIR}/lib/intel64")
197 else()
198 list(APPEND _libdir "${BLAS_DIR}/lib32")
199 list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
200 endif()
201 elseif(ENV_BLAS_LIBDIR)
202 list(APPEND _libdir "${ENV_BLAS_LIBDIR}")
203 elseif(ENV_BLAS_DIR)
204 list(APPEND _libdir "${ENV_BLAS_DIR}")
205 list(APPEND _libdir "${ENV_BLAS_DIR}/lib")
206 if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
207 list(APPEND _libdir "${ENV_BLAS_DIR}/lib64")
208 list(APPEND _libdir "${ENV_BLAS_DIR}/lib/intel64")
209 else()
210 list(APPEND _libdir "${ENV_BLAS_DIR}/lib32")
211 list(APPEND _libdir "${ENV_BLAS_DIR}/lib/ia32")
212 endif()
213 else()
214 if (ENV_MKLROOT)
215 list(APPEND _libdir "${ENV_MKLROOT}/lib")
216 if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
217 list(APPEND _libdir "${ENV_MKLROOT}/lib64")
218 list(APPEND _libdir "${ENV_MKLROOT}/lib/intel64")
219 else()
220 list(APPEND _libdir "${ENV_MKLROOT}/lib32")
221 list(APPEND _libdir "${ENV_MKLROOT}/lib/ia32")
222 endif()
223 endif()
224 if (WIN32)
225 string(REPLACE ":" ";" _libdir2 "$ENV{LIB}")
226 elseif (APPLE)
227 string(REPLACE ":" ";" _libdir2 "$ENV{DYLD_LIBRARY_PATH}")
228 else ()
229 string(REPLACE ":" ";" _libdir2 "$ENV{LD_LIBRARY_PATH}")
230 endif ()
231 list(APPEND _libdir "${_libdir2}")
232 list(APPEND _libdir "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
233 list(APPEND _libdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
234 endif()
235 endif ()
236
237 if (BLAS_VERBOSE)
238 message("${Cyan}Try to find BLAS libraries: ${_list}")
239 endif ()
240
Brian Silverman72890c22015-09-19 14:37:37 -0400241 foreach(_library ${_list})
242 set(_combined_name ${_combined_name}_${_library})
243
Austin Schuh189376f2018-12-20 22:11:15 +1100244 if(_libraries_work)
245 if (BLA_STATIC)
246 if (WIN32)
247 set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
248 endif ()
249 if (APPLE)
250 set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
251 else ()
252 set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
253 endif ()
Brian Silverman72890c22015-09-19 14:37:37 -0400254 else ()
Austin Schuh189376f2018-12-20 22:11:15 +1100255 if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
256 # for ubuntu's libblas3gf and liblapack3gf packages
257 set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
258 endif ()
259 endif ()
260 find_library(${_prefix}_${_library}_LIBRARY
261 NAMES ${_library}
262 HINTS ${_libdir}
263 NO_DEFAULT_PATH
264 )
Brian Silverman72890c22015-09-19 14:37:37 -0400265 mark_as_advanced(${_prefix}_${_library}_LIBRARY)
Austin Schuh189376f2018-12-20 22:11:15 +1100266 # Print status if not found
267 # -------------------------
268 if (NOT ${_prefix}_${_library}_LIBRARY AND NOT BLAS_FIND_QUIETLY AND BLAS_VERBOSE)
269 Print_Find_Library_Blas_Status(blas ${_library} ${_libdir})
270 endif ()
Brian Silverman72890c22015-09-19 14:37:37 -0400271 set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
Austin Schuh189376f2018-12-20 22:11:15 +1100272 set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
273 endif(_libraries_work)
Brian Silverman72890c22015-09-19 14:37:37 -0400274 endforeach(_library ${_list})
Brian Silverman72890c22015-09-19 14:37:37 -0400275
Austin Schuh189376f2018-12-20 22:11:15 +1100276 if(_libraries_work)
277 # Test this combination of libraries.
278 if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND BLA_STATIC)
279 list(INSERT ${LIBRARIES} 0 "-Wl,--start-group")
280 list(APPEND ${LIBRARIES} "-Wl,--end-group")
Brian Silverman72890c22015-09-19 14:37:37 -0400281 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100282 set(CMAKE_REQUIRED_LIBRARIES "${_flags};${${LIBRARIES}};${_thread}")
283 set(CMAKE_REQUIRED_FLAGS "${BLAS_COMPILER_FLAGS}")
284 if (BLAS_VERBOSE)
285 message("${Cyan}BLAS libs found for BLA_VENDOR ${BLA_VENDOR}."
286 "Try to compile symbol ${_name} with following libraries:"
287 "${CMAKE_REQUIRED_LIBRARIES}")
288 endif ()
289 if(NOT BLAS_FOUND)
290 unset(${_prefix}${_combined_name}_WORKS CACHE)
291 endif()
292 if (_CHECK_FORTRAN)
293 if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
294 string(REPLACE "mkl_intel_lp64" "mkl_gf_lp64" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
295 string(REPLACE "mkl_intel_ilp64" "mkl_gf_ilp64" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
296 endif()
297 check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
298 else()
299 check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
300 endif()
301 mark_as_advanced(${_prefix}${_combined_name}_WORKS)
302 set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
303 # Print status if not found
304 # -------------------------
305 if (NOT _libraries_work AND NOT BLAS_FIND_QUIETLY AND BLAS_VERBOSE)
306 Print_Find_Library_Blas_CheckFunc_Status(${_name} ${CMAKE_REQUIRED_LIBRARIES})
307 endif ()
308 set(CMAKE_REQUIRED_LIBRARIES)
Brian Silverman72890c22015-09-19 14:37:37 -0400309 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100310
311 if(_libraries_work)
312 set(${LIBRARIES} ${${LIBRARIES}} ${_thread})
313 else(_libraries_work)
314 set(${LIBRARIES} FALSE)
315 endif(_libraries_work)
316
317endmacro(Check_Fortran_Libraries)
Brian Silverman72890c22015-09-19 14:37:37 -0400318
319
Austin Schuh189376f2018-12-20 22:11:15 +1100320set(BLAS_LINKER_FLAGS)
321set(BLAS_LIBRARIES)
322set(BLAS95_LIBRARIES)
323if ($ENV{BLA_VENDOR} MATCHES ".+")
324 set(BLA_VENDOR $ENV{BLA_VENDOR})
325else ()
326 if(NOT BLA_VENDOR)
327 set(BLA_VENDOR "All")
328 endif()
329endif ()
Brian Silverman72890c22015-09-19 14:37:37 -0400330
Austin Schuh189376f2018-12-20 22:11:15 +1100331#BLAS in intel mkl 10 library? (em64t 64bit)
332if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
Brian Silverman72890c22015-09-19 14:37:37 -0400333
Austin Schuh189376f2018-12-20 22:11:15 +1100334 if(NOT BLAS_LIBRARIES OR BLA_VENDOR MATCHES "Intel*")
335 # Looking for include
336 # -------------------
Brian Silverman72890c22015-09-19 14:37:37 -0400337
Austin Schuh189376f2018-12-20 22:11:15 +1100338 # Add system include paths to search include
339 # ------------------------------------------
340 unset(_inc_env)
341 set(ENV_MKLROOT "$ENV{MKLROOT}")
342 set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
343 set(ENV_BLAS_INCDIR "$ENV{BLAS_INCDIR}")
344 if(ENV_BLAS_INCDIR)
345 list(APPEND _inc_env "${ENV_BLAS_INCDIR}")
346 elseif(ENV_BLAS_DIR)
347 list(APPEND _inc_env "${ENV_BLAS_DIR}")
348 list(APPEND _inc_env "${ENV_BLAS_DIR}/include")
349 else()
350 if (ENV_MKLROOT)
351 list(APPEND _inc_env "${ENV_MKLROOT}/include")
352 endif()
353 # system variables
354 if(WIN32)
355 string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
356 list(APPEND _inc_env "${_path_env}")
357 else()
358 string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
359 list(APPEND _inc_env "${_path_env}")
360 string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
361 list(APPEND _inc_env "${_path_env}")
362 string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
363 list(APPEND _inc_env "${_path_env}")
364 string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
365 list(APPEND _inc_env "${_path_env}")
366 endif()
367 endif()
368 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
369 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
370 list(REMOVE_DUPLICATES _inc_env)
Brian Silverman72890c22015-09-19 14:37:37 -0400371
Austin Schuh189376f2018-12-20 22:11:15 +1100372 # set paths where to look for
373 set(PATH_TO_LOOK_FOR "${_inc_env}")
Brian Silverman72890c22015-09-19 14:37:37 -0400374
Austin Schuh189376f2018-12-20 22:11:15 +1100375 # Try to find the fftw header in the given paths
376 # -------------------------------------------------
377 # call cmake macro to find the header path
378 if(BLAS_INCDIR)
379 set(BLAS_mkl.h_DIRS "BLAS_mkl.h_DIRS-NOTFOUND")
380 find_path(BLAS_mkl.h_DIRS
381 NAMES mkl.h
382 HINTS ${BLAS_INCDIR})
383 else()
384 if(BLAS_DIR)
385 set(BLAS_mkl.h_DIRS "BLAS_mkl.h_DIRS-NOTFOUND")
386 find_path(BLAS_mkl.h_DIRS
387 NAMES mkl.h
388 HINTS ${BLAS_DIR}
389 PATH_SUFFIXES "include")
390 else()
391 set(BLAS_mkl.h_DIRS "BLAS_mkl.h_DIRS-NOTFOUND")
392 find_path(BLAS_mkl.h_DIRS
393 NAMES mkl.h
394 HINTS ${PATH_TO_LOOK_FOR})
395 endif()
396 endif()
397 mark_as_advanced(BLAS_mkl.h_DIRS)
Brian Silverman72890c22015-09-19 14:37:37 -0400398
Austin Schuh189376f2018-12-20 22:11:15 +1100399 # If found, add path to cmake variable
400 # ------------------------------------
401 if (BLAS_mkl.h_DIRS)
402 set(BLAS_INCLUDE_DIRS "${BLAS_mkl.h_DIRS}")
403 else ()
404 set(BLAS_INCLUDE_DIRS "BLAS_INCLUDE_DIRS-NOTFOUND")
405 if(NOT BLAS_FIND_QUIETLY)
406 message(STATUS "Looking for BLAS -- mkl.h not found")
407 endif()
408 endif()
409
410 if (WIN32)
411 string(REPLACE ":" ";" _libdir "$ENV{LIB}")
412 elseif (APPLE)
413 string(REPLACE ":" ";" _libdir "$ENV{DYLD_LIBRARY_PATH}")
414 else ()
415 string(REPLACE ":" ";" _libdir "$ENV{LD_LIBRARY_PATH}")
416 endif ()
417 list(APPEND _libdir "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
418 list(APPEND _libdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
419 # libiomp5
420 # --------
421 set(OMP_iomp5_LIBRARY "OMP_iomp5_LIBRARY-NOTFOUND")
422 find_library(OMP_iomp5_LIBRARY
423 NAMES iomp5
424 HINTS ${_libdir}
425 )
426 mark_as_advanced(OMP_iomp5_LIBRARY)
427 set(OMP_LIB "")
428 # libgomp
429 # -------
430 set(OMP_gomp_LIBRARY "OMP_gomp_LIBRARY-NOTFOUND")
431 find_library(OMP_gomp_LIBRARY
432 NAMES gomp
433 HINTS ${_libdir}
434 )
435 mark_as_advanced(OMP_gomp_LIBRARY)
436 # choose one or another depending on the compilo
437 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
438 if (OMP_gomp_LIBRARY)
439 set(OMP_LIB "${OMP_gomp_LIBRARY}")
440 endif()
441 else(CMAKE_C_COMPILER_ID STREQUAL "Intel")
442 if (OMP_iomp5_LIBRARY)
443 set(OMP_LIB "${OMP_iomp5_LIBRARY}")
444 endif()
445 endif()
446
447 if (UNIX AND NOT WIN32)
448 # m
449 find_library(M_LIBRARY
450 NAMES m
451 HINTS ${_libdir})
452 mark_as_advanced(M_LIBRARY)
453 if(M_LIBRARY)
454 set(LM "-lm")
455 else()
456 set(LM "")
457 endif()
458 # Fortran
459 set(LGFORTRAN "")
460 if (CMAKE_C_COMPILER_ID MATCHES "GNU")
461 find_library(
462 FORTRAN_gfortran_LIBRARY
463 NAMES gfortran
464 HINTS ${_libdir}
465 )
466 mark_as_advanced(FORTRAN_gfortran_LIBRARY)
467 if (FORTRAN_gfortran_LIBRARY)
468 set(LGFORTRAN "${FORTRAN_gfortran_LIBRARY}")
469 endif()
470 elseif (CMAKE_C_COMPILER_ID MATCHES "Intel")
471 find_library(
472 FORTRAN_ifcore_LIBRARY
473 NAMES ifcore
474 HINTS ${_libdir}
475 )
476 mark_as_advanced(FORTRAN_ifcore_LIBRARY)
477 if (FORTRAN_ifcore_LIBRARY)
478 set(LGFORTRAN "{FORTRAN_ifcore_LIBRARY}")
479 endif()
480 endif()
481 set(BLAS_COMPILER_FLAGS "")
482 if (NOT BLA_VENDOR STREQUAL "Intel10_64lp_seq")
483 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
484 list(APPEND BLAS_COMPILER_FLAGS "-openmp")
485 endif()
486 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
487 list(APPEND BLAS_COMPILER_FLAGS "-fopenmp")
488 endif()
489 endif()
490 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
491 if (BLA_VENDOR STREQUAL "Intel10_32")
492 list(APPEND BLAS_COMPILER_FLAGS "-m32")
493 else()
494 list(APPEND BLAS_COMPILER_FLAGS "-m64")
495 endif()
496 if (NOT BLA_VENDOR STREQUAL "Intel10_64lp_seq")
497 list(APPEND OMP_LIB "-ldl")
498 endif()
499 if (ENV_MKLROOT)
500 list(APPEND BLAS_COMPILER_FLAGS "-I${ENV_MKLROOT}/include")
501 endif()
502 endif()
503
504 set(additional_flags "")
505 if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
506 set(additional_flags "-Wl,--no-as-needed")
507 endif()
508 endif ()
509
510 if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)
511 if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
512 find_package(Threads)
513 else()
514 find_package(Threads REQUIRED)
515 endif()
516
517 set(BLAS_SEARCH_LIBS "")
518
519 if(BLA_F95)
520
521 set(BLAS_mkl_SEARCH_SYMBOL SGEMM)
522 set(_LIBRARIES BLAS95_LIBRARIES)
523 if (WIN32)
524 if (BLA_STATIC)
525 set(BLAS_mkl_DLL_SUFFIX "")
526 else()
527 set(BLAS_mkl_DLL_SUFFIX "_dll")
528 endif()
529
530 # Find the main file (32-bit or 64-bit)
531 set(BLAS_SEARCH_LIBS_WIN_MAIN "")
532 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
533 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
534 "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
535 endif()
536 if (BLA_VENDOR STREQUAL "Intel10_64lp*" OR BLA_VENDOR STREQUAL "All")
537 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
538 "mkl_blas95_lp64${BLAS_mkl_DLL_SUFFIX} mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
539 endif ()
540
541 # Add threading/sequential libs
542 set(BLAS_SEARCH_LIBS_WIN_THREAD "")
543 if (BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
544 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
545 "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
546 endif()
547 if (NOT BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
548 # old version
549 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
550 "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
551 # mkl >= 10.3
552 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
553 "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
554 endif()
555
556 # Cartesian product of the above
557 foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
558 foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
559 list(APPEND BLAS_SEARCH_LIBS
560 "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
561 endforeach()
562 endforeach()
563 else (WIN32)
564 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
565 list(APPEND BLAS_SEARCH_LIBS
566 "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide")
567 endif ()
568 if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
569 # old version
570 list(APPEND BLAS_SEARCH_LIBS
571 "mkl_blas95 mkl_intel_lp64 mkl_intel_thread mkl_core guide")
572 # mkl >= 10.3
573 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
574 list(APPEND BLAS_SEARCH_LIBS
575 "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core")
576 endif()
577 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
578 list(APPEND BLAS_SEARCH_LIBS
579 "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core")
580 endif()
581 endif ()
582 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
583 list(APPEND BLAS_SEARCH_LIBS
584 "mkl_intel_lp64 mkl_sequential mkl_core")
585 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq")
586 set(OMP_LIB "")
587 endif()
588 endif ()
589 endif (WIN32)
590
591 else (BLA_F95)
592
593 set(BLAS_mkl_SEARCH_SYMBOL sgemm)
594 set(_LIBRARIES BLAS_LIBRARIES)
595 if (WIN32)
596 if (BLA_STATIC)
597 set(BLAS_mkl_DLL_SUFFIX "")
598 else()
599 set(BLAS_mkl_DLL_SUFFIX "_dll")
600 endif()
601
602 # Find the main file (32-bit or 64-bit)
603 set(BLAS_SEARCH_LIBS_WIN_MAIN "")
604 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
605 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
606 "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
607 endif()
608 if (BLA_VENDOR STREQUAL "Intel10_64lp*" OR BLA_VENDOR STREQUAL "All")
609 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
610 "mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
611 endif ()
612
613 # Add threading/sequential libs
614 set(BLAS_SEARCH_LIBS_WIN_THREAD "")
615 if (NOT BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
616 # old version
617 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
618 "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
619 # mkl >= 10.3
620 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
621 "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
622 endif()
623 if (BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
624 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
625 "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
626 endif()
627
628 # Cartesian product of the above
629 foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
630 foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
631 list(APPEND BLAS_SEARCH_LIBS
632 "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
633 endforeach()
634 endforeach()
635 else (WIN32)
636 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
637 list(APPEND BLAS_SEARCH_LIBS
638 "mkl_intel mkl_intel_thread mkl_core guide")
639 endif ()
640 if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
641 # old version
642 list(APPEND BLAS_SEARCH_LIBS
643 "mkl_intel_lp64 mkl_intel_thread mkl_core guide")
644 # mkl >= 10.3
645 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
646 list(APPEND BLAS_SEARCH_LIBS
647 "mkl_intel_lp64 mkl_intel_thread mkl_core")
648 endif()
649 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
650 list(APPEND BLAS_SEARCH_LIBS
651 "mkl_intel_lp64 mkl_gnu_thread mkl_core")
652 endif()
653 endif ()
654 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
655 list(APPEND BLAS_SEARCH_LIBS
656 "mkl_intel_lp64 mkl_sequential mkl_core")
657 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq")
658 set(OMP_LIB "")
659 endif()
660 endif ()
661 #older vesions of intel mkl libs
662 if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
663 list(APPEND BLAS_SEARCH_LIBS
664 "mkl")
665 list(APPEND BLAS_SEARCH_LIBS
666 "mkl_ia32")
667 list(APPEND BLAS_SEARCH_LIBS
668 "mkl_em64t")
669 endif ()
670 endif (WIN32)
671
672 endif (BLA_F95)
673
674 foreach (IT ${BLAS_SEARCH_LIBS})
675 string(REPLACE " " ";" SEARCH_LIBS ${IT})
676 if (${_LIBRARIES})
677 else ()
678 check_fortran_libraries(
679 ${_LIBRARIES}
680 BLAS
681 ${BLAS_mkl_SEARCH_SYMBOL}
682 "${additional_flags}"
683 "${SEARCH_LIBS}"
684 "${OMP_LIB};${CMAKE_THREAD_LIBS_INIT};${LM}"
685 )
686 if(_LIBRARIES)
687 set(BLAS_LINKER_FLAGS "${additional_flags}")
688 endif()
689 endif()
690 endforeach ()
691 if(NOT BLAS_FIND_QUIETLY)
692 if(${_LIBRARIES})
693 message(STATUS "Looking for MKL BLAS: found")
694 else()
695 message(STATUS "Looking for MKL BLAS: not found")
696 endif()
697 endif()
698 if (${_LIBRARIES} AND NOT BLAS_VENDOR_FOUND)
699 set (BLAS_VENDOR_FOUND "Intel MKL")
700 endif()
701 endif (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)
702 endif(NOT BLAS_LIBRARIES OR BLA_VENDOR MATCHES "Intel*")
703endif (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
704
705
706if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
707
708 if(NOT BLAS_LIBRARIES)
709 # gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
710 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400711 BLAS_LIBRARIES
712 BLAS
713 sgemm
714 ""
Austin Schuh189376f2018-12-20 22:11:15 +1100715 "goto2"
716 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400717 )
Austin Schuh189376f2018-12-20 22:11:15 +1100718 if(NOT BLAS_FIND_QUIETLY)
719 if(BLAS_LIBRARIES)
720 message(STATUS "Looking for Goto BLAS: found")
721 else()
722 message(STATUS "Looking for Goto BLAS: not found")
723 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400724 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100725 endif()
726 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
727 set (BLAS_VENDOR_FOUND "Goto")
728 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400729
Austin Schuh189376f2018-12-20 22:11:15 +1100730endif (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
731
732
733# OpenBlas
734if (BLA_VENDOR STREQUAL "Open" OR BLA_VENDOR STREQUAL "All")
735
736 if(NOT BLAS_LIBRARIES)
737 # openblas (http://www.openblas.net/)
738 check_fortran_libraries(
739 BLAS_LIBRARIES
740 BLAS
741 sgemm
742 ""
743 "openblas"
744 ""
745 )
746 if(NOT BLAS_FIND_QUIETLY)
747 if(BLAS_LIBRARIES)
748 message(STATUS "Looking for Open BLAS: found")
749 else()
750 message(STATUS "Looking for Open BLAS: not found")
751 endif()
752 endif()
753 endif()
754 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
755 set (BLAS_VENDOR_FOUND "Openblas")
756 endif()
757
758endif (BLA_VENDOR STREQUAL "Open" OR BLA_VENDOR STREQUAL "All")
759
760
761# EigenBlas
762if (BLA_VENDOR STREQUAL "Eigen" OR BLA_VENDOR STREQUAL "All")
763
764 if(NOT BLAS_LIBRARIES)
765 # eigenblas (http://eigen.tuxfamily.org/index.php?title=Main_Page)
766 check_fortran_libraries(
767 BLAS_LIBRARIES
768 BLAS
769 sgemm
770 ""
771 "eigen_blas"
772 ""
773 )
774 if(NOT BLAS_FIND_QUIETLY)
775 if(BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
776 message(STATUS "Looking for Eigen BLAS: found")
777 else()
778 message(STATUS "Looking for Eigen BLAS: not found")
779 endif()
780 endif()
781 endif()
782
783 if(NOT BLAS_LIBRARIES)
784 # eigenblas (http://eigen.tuxfamily.org/index.php?title=Main_Page)
785 check_fortran_libraries(
786 BLAS_LIBRARIES
787 BLAS
788 sgemm
789 ""
790 "eigen_blas_static"
791 ""
792 )
793 if(NOT BLAS_FIND_QUIETLY)
794 if(BLAS_LIBRARIES)
795 message(STATUS "Looking for Eigen BLAS: found")
796 else()
797 message(STATUS "Looking for Eigen BLAS: not found")
798 endif()
799 endif()
800 endif()
801 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
802 set (BLAS_VENDOR_FOUND "Eigen")
803 endif()
804
805endif (BLA_VENDOR STREQUAL "Eigen" OR BLA_VENDOR STREQUAL "All")
806
807
808if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All")
809
810 if(NOT BLAS_LIBRARIES)
811 # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)
812 check_fortran_libraries(
813 BLAS_LIBRARIES
814 BLAS
815 dgemm
816 ""
817 "f77blas;atlas"
818 ""
819 )
820 if(NOT BLAS_FIND_QUIETLY)
821 if(BLAS_LIBRARIES)
822 message(STATUS "Looking for Atlas BLAS: found")
823 else()
824 message(STATUS "Looking for Atlas BLAS: not found")
825 endif()
826 endif()
827 endif()
828
829 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
830 set (BLAS_VENDOR_FOUND "Atlas")
831 endif()
832
833endif (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All")
834
835
836# BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
837if (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All")
838
839 if(NOT BLAS_LIBRARIES)
840 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400841 BLAS_LIBRARIES
842 BLAS
843 sgemm
844 ""
845 "sgemm;dgemm;blas"
Austin Schuh189376f2018-12-20 22:11:15 +1100846 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400847 )
Austin Schuh189376f2018-12-20 22:11:15 +1100848 if(NOT BLAS_FIND_QUIETLY)
849 if(BLAS_LIBRARIES)
850 message(STATUS "Looking for PhiPACK BLAS: found")
851 else()
852 message(STATUS "Looking for PhiPACK BLAS: not found")
853 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400854 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100855 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400856
Austin Schuh189376f2018-12-20 22:11:15 +1100857 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
858 set (BLAS_VENDOR_FOUND "PhiPACK")
859 endif()
860
861endif (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All")
862
863
864# BLAS in Alpha CXML library?
865if (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All")
866
867 if(NOT BLAS_LIBRARIES)
868 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400869 BLAS_LIBRARIES
870 BLAS
871 sgemm
872 ""
873 "cxml"
Austin Schuh189376f2018-12-20 22:11:15 +1100874 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400875 )
Austin Schuh189376f2018-12-20 22:11:15 +1100876 if(NOT BLAS_FIND_QUIETLY)
877 if(BLAS_LIBRARIES)
878 message(STATUS "Looking for CXML BLAS: found")
879 else()
880 message(STATUS "Looking for CXML BLAS: not found")
881 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400882 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100883 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400884
Austin Schuh189376f2018-12-20 22:11:15 +1100885 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
886 set (BLAS_VENDOR_FOUND "CXML")
887 endif()
888
889endif (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All")
890
891
892# BLAS in Alpha DXML library? (now called CXML, see above)
893if (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All")
894
895 if(NOT BLAS_LIBRARIES)
896 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400897 BLAS_LIBRARIES
898 BLAS
899 sgemm
900 ""
901 "dxml"
Austin Schuh189376f2018-12-20 22:11:15 +1100902 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400903 )
Austin Schuh189376f2018-12-20 22:11:15 +1100904 if(NOT BLAS_FIND_QUIETLY)
905 if(BLAS_LIBRARIES)
906 message(STATUS "Looking for DXML BLAS: found")
907 else()
908 message(STATUS "Looking for DXML BLAS: not found")
909 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400910 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100911 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400912
Austin Schuh189376f2018-12-20 22:11:15 +1100913 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
914 set (BLAS_VENDOR_FOUND "DXML")
915 endif()
916
917endif (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All")
918
919
920# BLAS in Sun Performance library?
921if (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All")
922
923 if(NOT BLAS_LIBRARIES)
924 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400925 BLAS_LIBRARIES
926 BLAS
927 sgemm
928 "-xlic_lib=sunperf"
929 "sunperf;sunmath"
Austin Schuh189376f2018-12-20 22:11:15 +1100930 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400931 )
Austin Schuh189376f2018-12-20 22:11:15 +1100932 if(BLAS_LIBRARIES)
933 set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf")
934 endif()
935 if(NOT BLAS_FIND_QUIETLY)
Brian Silverman72890c22015-09-19 14:37:37 -0400936 if(BLAS_LIBRARIES)
Austin Schuh189376f2018-12-20 22:11:15 +1100937 message(STATUS "Looking for SunPerf BLAS: found")
938 else()
939 message(STATUS "Looking for SunPerf BLAS: not found")
Brian Silverman72890c22015-09-19 14:37:37 -0400940 endif()
941 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100942 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400943
Austin Schuh189376f2018-12-20 22:11:15 +1100944 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
945 set (BLAS_VENDOR_FOUND "SunPerf")
946 endif()
947
948endif ()
949
950
951# BLAS in SCSL library? (SGI/Cray Scientific Library)
952if (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All")
953
954 if(NOT BLAS_LIBRARIES)
955 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400956 BLAS_LIBRARIES
957 BLAS
958 sgemm
959 ""
960 "scsl"
Austin Schuh189376f2018-12-20 22:11:15 +1100961 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400962 )
Austin Schuh189376f2018-12-20 22:11:15 +1100963 if(NOT BLAS_FIND_QUIETLY)
964 if(BLAS_LIBRARIES)
965 message(STATUS "Looking for SCSL BLAS: found")
966 else()
967 message(STATUS "Looking for SCSL BLAS: not found")
968 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400969 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100970 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400971
Austin Schuh189376f2018-12-20 22:11:15 +1100972 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
973 set (BLAS_VENDOR_FOUND "SunPerf")
974 endif()
975
976endif ()
977
978
979# BLAS in SGIMATH library?
980if (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All")
981
982 if(NOT BLAS_LIBRARIES)
983 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400984 BLAS_LIBRARIES
985 BLAS
986 sgemm
987 ""
988 "complib.sgimath"
Austin Schuh189376f2018-12-20 22:11:15 +1100989 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400990 )
Austin Schuh189376f2018-12-20 22:11:15 +1100991 if(NOT BLAS_FIND_QUIETLY)
992 if(BLAS_LIBRARIES)
993 message(STATUS "Looking for SGIMATH BLAS: found")
994 else()
995 message(STATUS "Looking for SGIMATH BLAS: not found")
996 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400997 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100998 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400999
Austin Schuh189376f2018-12-20 22:11:15 +11001000 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1001 set (BLAS_VENDOR_FOUND "SGIMATH")
1002 endif()
1003
1004endif ()
1005
1006
1007# BLAS in IBM ESSL library (requires generic BLAS lib, too)
1008if (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All")
1009
1010 if(NOT BLAS_LIBRARIES)
1011 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001012 BLAS_LIBRARIES
1013 BLAS
1014 sgemm
1015 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001016 "essl;xlfmath;xlf90_r;blas"
1017 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001018 )
Austin Schuh189376f2018-12-20 22:11:15 +11001019 if(NOT BLAS_FIND_QUIETLY)
1020 if(BLAS_LIBRARIES)
1021 message(STATUS "Looking for IBM ESSL BLAS: found")
1022 else()
1023 message(STATUS "Looking for IBM ESSL BLAS: not found")
1024 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001025 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001026 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001027
Austin Schuh189376f2018-12-20 22:11:15 +11001028 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1029 set (BLAS_VENDOR_FOUND "IBM ESSL")
1030 endif()
1031
1032endif ()
1033
1034# BLAS in IBM ESSL_MT library (requires generic BLAS lib, too)
1035if (BLA_VENDOR STREQUAL "IBMESSLMT" OR BLA_VENDOR STREQUAL "All")
1036
1037 if(NOT BLAS_LIBRARIES)
1038 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001039 BLAS_LIBRARIES
1040 BLAS
1041 sgemm
1042 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001043 "esslsmp;xlsmp;xlfmath;xlf90_r;blas"
Brian Silverman72890c22015-09-19 14:37:37 -04001044 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001045 )
Austin Schuh189376f2018-12-20 22:11:15 +11001046 if(NOT BLAS_FIND_QUIETLY)
1047 if(BLAS_LIBRARIES)
1048 message(STATUS "Looking for IBM ESSL MT BLAS: found")
1049 else()
1050 message(STATUS "Looking for IBM ESSL MT BLAS: not found")
1051 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001052 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001053 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001054
Austin Schuh189376f2018-12-20 22:11:15 +11001055 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1056 set (BLAS_VENDOR_FOUND "IBM ESSL MT")
1057 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001058
Austin Schuh189376f2018-12-20 22:11:15 +11001059endif ()
1060
1061
1062#BLAS in acml library?
1063if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All")
1064
1065 if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR
1066 ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR
1067 ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)))
1068
1069 # try to find acml in "standard" paths
1070 if( WIN32 )
1071 file( GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt" )
1072 else()
1073 file( GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt" )
1074 endif()
1075 if( WIN32 )
1076 file( GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples" )
1077 else()
1078 file( GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples" )
1079 endif()
1080 list(GET _ACML_ROOT 0 _ACML_ROOT)
1081 list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)
1082
1083 if( _ACML_ROOT )
1084
1085 get_filename_component( _ACML_ROOT ${_ACML_ROOT} PATH )
1086 if( SIZEOF_INTEGER EQUAL 8 )
1087 set( _ACML_PATH_SUFFIX "_int64" )
1088 else()
1089 set( _ACML_PATH_SUFFIX "" )
1090 endif()
1091 if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
1092 set( _ACML_COMPILER32 "ifort32" )
1093 set( _ACML_COMPILER64 "ifort64" )
1094 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
1095 set( _ACML_COMPILER32 "sun32" )
1096 set( _ACML_COMPILER64 "sun64" )
1097 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" )
1098 set( _ACML_COMPILER32 "pgi32" )
1099 if( WIN32 )
1100 set( _ACML_COMPILER64 "win64" )
1101 else()
1102 set( _ACML_COMPILER64 "pgi64" )
1103 endif()
1104 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" )
1105 # 32 bit builds not supported on Open64 but for code simplicity
1106 # We'll just use the same directory twice
1107 set( _ACML_COMPILER32 "open64_64" )
1108 set( _ACML_COMPILER64 "open64_64" )
1109 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" )
1110 set( _ACML_COMPILER32 "nag32" )
1111 set( _ACML_COMPILER64 "nag64" )
1112 else()
1113 set( _ACML_COMPILER32 "gfortran32" )
1114 set( _ACML_COMPILER64 "gfortran64" )
1115 endif()
1116
1117 if( BLA_VENDOR STREQUAL "ACML_MP" )
1118 set(_ACML_MP_LIB_DIRS
1119 "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib"
1120 "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" )
1121 else()
1122 set(_ACML_LIB_DIRS
1123 "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib"
1124 "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" )
1125 endif()
1126
1127 endif(_ACML_ROOT)
1128
1129 elseif(BLAS_${BLA_VENDOR}_LIB_DIRS)
1130
1131 set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS})
1132
1133 endif()
1134
1135 if( BLA_VENDOR STREQUAL "ACML_MP" )
1136 foreach( BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS})
1137 check_fortran_libraries (
1138 BLAS_LIBRARIES
1139 BLAS
1140 sgemm
1141 "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS}
1142 )
1143 if( BLAS_LIBRARIES )
1144 break()
1145 endif()
1146 endforeach()
1147 elseif( BLA_VENDOR STREQUAL "ACML_GPU" )
1148 foreach( BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS})
1149 check_fortran_libraries (
1150 BLAS_LIBRARIES
1151 BLAS
1152 sgemm
1153 "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS}
1154 )
1155 if( BLAS_LIBRARIES )
1156 break()
1157 endif()
1158 endforeach()
1159 else()
1160 foreach( BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS} )
1161 check_fortran_libraries (
1162 BLAS_LIBRARIES
1163 BLAS
1164 sgemm
1165 "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS}
1166 )
1167 if( BLAS_LIBRARIES )
1168 break()
1169 endif()
1170 endforeach()
1171 endif()
1172
1173 # Either acml or acml_mp should be in LD_LIBRARY_PATH but not both
1174 if(NOT BLAS_LIBRARIES)
1175 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001176 BLAS_LIBRARIES
1177 BLAS
1178 sgemm
1179 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001180 "acml;acml_mv"
1181 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001182 )
Austin Schuh189376f2018-12-20 22:11:15 +11001183 if(NOT BLAS_FIND_QUIETLY)
1184 if(BLAS_LIBRARIES)
1185 message(STATUS "Looking for ACML BLAS: found")
1186 else()
1187 message(STATUS "Looking for ACML BLAS: not found")
1188 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001189 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001190 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001191
Austin Schuh189376f2018-12-20 22:11:15 +11001192 if(NOT BLAS_LIBRARIES)
1193 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001194 BLAS_LIBRARIES
1195 BLAS
1196 sgemm
1197 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001198 "acml_mp;acml_mv"
1199 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001200 )
Austin Schuh189376f2018-12-20 22:11:15 +11001201 if(NOT BLAS_FIND_QUIETLY)
1202 if(BLAS_LIBRARIES)
1203 message(STATUS "Looking for ACML BLAS: found")
1204 else()
1205 message(STATUS "Looking for ACML BLAS: not found")
1206 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001207 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001208 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001209
Austin Schuh189376f2018-12-20 22:11:15 +11001210 if(NOT BLAS_LIBRARIES)
1211 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001212 BLAS_LIBRARIES
1213 BLAS
1214 sgemm
1215 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001216 "acml;acml_mv;CALBLAS"
Brian Silverman72890c22015-09-19 14:37:37 -04001217 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001218 )
Austin Schuh189376f2018-12-20 22:11:15 +11001219 if(NOT BLAS_FIND_QUIETLY)
1220 if(BLAS_LIBRARIES)
1221 message(STATUS "Looking for ACML BLAS: found")
1222 else()
1223 message(STATUS "Looking for ACML BLAS: not found")
1224 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001225 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001226 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001227
Austin Schuh189376f2018-12-20 22:11:15 +11001228 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1229 set (BLAS_VENDOR_FOUND "ACML")
1230 endif()
1231
1232endif (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All") # ACML
1233
1234
1235# Apple BLAS library?
1236if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
1237
1238 if(NOT BLAS_LIBRARIES)
1239 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001240 BLAS_LIBRARIES
1241 BLAS
Austin Schuh189376f2018-12-20 22:11:15 +11001242 dgemm
Brian Silverman72890c22015-09-19 14:37:37 -04001243 ""
1244 "Accelerate"
Austin Schuh189376f2018-12-20 22:11:15 +11001245 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001246 )
Austin Schuh189376f2018-12-20 22:11:15 +11001247 if(NOT BLAS_FIND_QUIETLY)
1248 if(BLAS_LIBRARIES)
1249 message(STATUS "Looking for Apple BLAS: found")
1250 else()
1251 message(STATUS "Looking for Apple BLAS: not found")
1252 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001253 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001254 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001255
Austin Schuh189376f2018-12-20 22:11:15 +11001256 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1257 set (BLAS_VENDOR_FOUND "Apple Accelerate")
1258 endif()
1259
1260endif (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
1261
1262
1263if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
1264
1265 if ( NOT BLAS_LIBRARIES )
1266 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001267 BLAS_LIBRARIES
1268 BLAS
Austin Schuh189376f2018-12-20 22:11:15 +11001269 dgemm
Brian Silverman72890c22015-09-19 14:37:37 -04001270 ""
1271 "vecLib"
Brian Silverman72890c22015-09-19 14:37:37 -04001272 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001273 )
Austin Schuh189376f2018-12-20 22:11:15 +11001274 if(NOT BLAS_FIND_QUIETLY)
1275 if(BLAS_LIBRARIES)
1276 message(STATUS "Looking for NAS BLAS: found")
1277 else()
1278 message(STATUS "Looking for NAS BLAS: not found")
1279 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001280 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001281 endif ()
Brian Silverman72890c22015-09-19 14:37:37 -04001282
Austin Schuh189376f2018-12-20 22:11:15 +11001283 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1284 set (BLAS_VENDOR_FOUND "NAS")
1285 endif()
1286
1287endif (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
1288
1289
1290# Generic BLAS library?
1291if (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All")
1292
1293 set(BLAS_SEARCH_LIBS "blas;blas_LINUX;blas_MAC;blas_WINDOWS;refblas")
1294 foreach (SEARCH_LIB ${BLAS_SEARCH_LIBS})
1295 if (BLAS_LIBRARIES)
1296 else ()
1297 check_fortran_libraries(
1298 BLAS_LIBRARIES
1299 BLAS
1300 sgemm
1301 ""
1302 "${SEARCH_LIB}"
1303 "${LGFORTRAN}"
1304 )
1305 if(NOT BLAS_FIND_QUIETLY)
1306 if(BLAS_LIBRARIES)
1307 message(STATUS "Looking for Generic BLAS: found")
1308 else()
1309 message(STATUS "Looking for Generic BLAS: not found")
1310 endif()
1311 endif()
1312 endif()
1313 endforeach ()
1314
1315 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1316 set (BLAS_VENDOR_FOUND "Netlib or other Generic libblas")
1317 endif()
1318
1319endif (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All")
1320
1321
1322if(BLA_F95)
1323
1324 if(BLAS95_LIBRARIES)
1325 set(BLAS95_FOUND TRUE)
1326 else()
1327 set(BLAS95_FOUND FALSE)
1328 endif()
1329
1330 if(NOT BLAS_FIND_QUIETLY)
1331 if(BLAS95_FOUND)
1332 message(STATUS "A library with BLAS95 API found.")
1333 message(STATUS "BLAS_LIBRARIES ${BLAS_LIBRARIES}")
1334 else(BLAS95_FOUND)
1335 message(WARNING "BLA_VENDOR has been set to ${BLA_VENDOR} but blas 95 libraries could not be found or check of symbols failed."
1336 "\nPlease indicate where to find blas libraries. You have three options:\n"
1337 "- Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas\n"
1338 "- Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs\n"
1339 "- Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)\n"
1340 "\nTo follow libraries detection more precisely you can activate a verbose mode with -DBLAS_VERBOSE=ON at cmake configure."
1341 "\nYou could also specify a BLAS vendor to look for by setting -DBLA_VENDOR=blas_vendor_name."
1342 "\nList of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf, SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit),"
1343 "Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model),"
1344 "Intel( older versions of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic")
1345 if(BLAS_FIND_REQUIRED)
1346 message(FATAL_ERROR
1347 "A required library with BLAS95 API not found. Please specify library location.")
1348 else()
1349 message(STATUS
1350 "A library with BLAS95 API not found. Please specify library location.")
1351 endif()
1352 endif(BLAS95_FOUND)
1353 endif(NOT BLAS_FIND_QUIETLY)
1354
1355 set(BLAS_FOUND TRUE)
1356 set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}")
1357
1358else(BLA_F95)
1359
1360 if(BLAS_LIBRARIES)
Brian Silverman72890c22015-09-19 14:37:37 -04001361 set(BLAS_FOUND TRUE)
1362 else()
1363 set(BLAS_FOUND FALSE)
1364 endif()
1365
1366 if(NOT BLAS_FIND_QUIETLY)
1367 if(BLAS_FOUND)
1368 message(STATUS "A library with BLAS API found.")
Austin Schuh189376f2018-12-20 22:11:15 +11001369 message(STATUS "BLAS_LIBRARIES ${BLAS_LIBRARIES}")
Brian Silverman72890c22015-09-19 14:37:37 -04001370 else(BLAS_FOUND)
Austin Schuh189376f2018-12-20 22:11:15 +11001371 message(WARNING "BLA_VENDOR has been set to ${BLA_VENDOR} but blas libraries could not be found or check of symbols failed."
1372 "\nPlease indicate where to find blas libraries. You have three options:\n"
1373 "- Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas\n"
1374 "- Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs\n"
1375 "- Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)\n"
1376 "\nTo follow libraries detection more precisely you can activate a verbose mode with -DBLAS_VERBOSE=ON at cmake configure."
1377 "\nYou could also specify a BLAS vendor to look for by setting -DBLA_VENDOR=blas_vendor_name."
1378 "\nList of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf, SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit),"
1379 "Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model),"
1380 "Intel( older versions of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic")
Brian Silverman72890c22015-09-19 14:37:37 -04001381 if(BLAS_FIND_REQUIRED)
Austin Schuh189376f2018-12-20 22:11:15 +11001382 message(FATAL_ERROR
1383 "A required library with BLAS API not found. Please specify library location.")
Brian Silverman72890c22015-09-19 14:37:37 -04001384 else()
Austin Schuh189376f2018-12-20 22:11:15 +11001385 message(STATUS
1386 "A library with BLAS API not found. Please specify library location.")
Brian Silverman72890c22015-09-19 14:37:37 -04001387 endif()
1388 endif(BLAS_FOUND)
1389 endif(NOT BLAS_FIND_QUIETLY)
1390
Austin Schuh189376f2018-12-20 22:11:15 +11001391endif(BLA_F95)
Brian Silverman72890c22015-09-19 14:37:37 -04001392
Austin Schuh189376f2018-12-20 22:11:15 +11001393set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
Brian Silverman72890c22015-09-19 14:37:37 -04001394
Austin Schuh189376f2018-12-20 22:11:15 +11001395if (BLAS_FOUND)
1396 list(GET BLAS_LIBRARIES 0 first_lib)
1397 get_filename_component(first_lib_path "${first_lib}" PATH)
1398 if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
1399 string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
1400 set(BLAS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of BLAS library" FORCE)
1401 else()
1402 set(BLAS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of BLAS library" FORCE)
1403 endif()
1404endif()
1405mark_as_advanced(BLAS_DIR)
1406mark_as_advanced(BLAS_DIR_FOUND)