blob: 1bb8f19652c9582dca81662e1bad7fb23a7aea1b [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)
Austin Schuhc55b0172022-02-20 17:52:35 -0800150include(CMakeFindDependencyMacro)
Brian Silverman72890c22015-09-19 14:37:37 -0400151
Austin Schuh189376f2018-12-20 22:11:15 +1100152set(_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
Brian Silverman72890c22015-09-19 14:37:37 -0400153
Austin Schuh189376f2018-12-20 22:11:15 +1100154# Check the language being used
155get_property( _LANGUAGES_ GLOBAL PROPERTY ENABLED_LANGUAGES )
156if( _LANGUAGES_ MATCHES Fortran AND CMAKE_Fortran_COMPILER)
157 set( _CHECK_FORTRAN TRUE )
158elseif( (_LANGUAGES_ MATCHES C) OR (_LANGUAGES_ MATCHES CXX) )
159 set( _CHECK_FORTRAN FALSE )
160else()
161 if(BLAS_FIND_REQUIRED)
162 message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.")
163 else()
164 message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)")
165 return()
166 endif()
167endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400168
Austin Schuh189376f2018-12-20 22:11:15 +1100169macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread)
170 # This macro checks for the existence of the combination of fortran libraries
171 # given by _list. If the combination is found, this macro checks (using the
172 # Check_Fortran_Function_Exists macro) whether can link against that library
173 # combination using the name of a routine given by _name using the linker
174 # flags given by _flags. If the combination of libraries is found and passes
175 # the link test, LIBRARIES is set to the list of complete library paths that
176 # have been found. Otherwise, LIBRARIES is set to FALSE.
177
178 # N.B. _prefix is the prefix applied to the names of all cached variables that
179 # are generated internally and marked advanced by this macro.
180
181 set(_libdir ${ARGN})
182
183 set(_libraries_work TRUE)
184 set(${LIBRARIES})
Brian Silverman72890c22015-09-19 14:37:37 -0400185 set(_combined_name)
Austin Schuh189376f2018-12-20 22:11:15 +1100186 set(ENV_MKLROOT "$ENV{MKLROOT}")
187 set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
188 set(ENV_BLAS_LIBDIR "$ENV{BLAS_LIBDIR}")
189 if (NOT _libdir)
190 if (BLAS_LIBDIR)
191 list(APPEND _libdir "${BLAS_LIBDIR}")
192 elseif (BLAS_DIR)
193 list(APPEND _libdir "${BLAS_DIR}")
194 list(APPEND _libdir "${BLAS_DIR}/lib")
195 if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
196 list(APPEND _libdir "${BLAS_DIR}/lib64")
197 list(APPEND _libdir "${BLAS_DIR}/lib/intel64")
198 else()
199 list(APPEND _libdir "${BLAS_DIR}/lib32")
200 list(APPEND _libdir "${BLAS_DIR}/lib/ia32")
201 endif()
202 elseif(ENV_BLAS_LIBDIR)
203 list(APPEND _libdir "${ENV_BLAS_LIBDIR}")
204 elseif(ENV_BLAS_DIR)
205 list(APPEND _libdir "${ENV_BLAS_DIR}")
206 list(APPEND _libdir "${ENV_BLAS_DIR}/lib")
207 if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
208 list(APPEND _libdir "${ENV_BLAS_DIR}/lib64")
209 list(APPEND _libdir "${ENV_BLAS_DIR}/lib/intel64")
210 else()
211 list(APPEND _libdir "${ENV_BLAS_DIR}/lib32")
212 list(APPEND _libdir "${ENV_BLAS_DIR}/lib/ia32")
213 endif()
214 else()
215 if (ENV_MKLROOT)
216 list(APPEND _libdir "${ENV_MKLROOT}/lib")
217 if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
218 list(APPEND _libdir "${ENV_MKLROOT}/lib64")
219 list(APPEND _libdir "${ENV_MKLROOT}/lib/intel64")
220 else()
221 list(APPEND _libdir "${ENV_MKLROOT}/lib32")
222 list(APPEND _libdir "${ENV_MKLROOT}/lib/ia32")
223 endif()
224 endif()
225 if (WIN32)
226 string(REPLACE ":" ";" _libdir2 "$ENV{LIB}")
227 elseif (APPLE)
228 string(REPLACE ":" ";" _libdir2 "$ENV{DYLD_LIBRARY_PATH}")
229 else ()
230 string(REPLACE ":" ";" _libdir2 "$ENV{LD_LIBRARY_PATH}")
231 endif ()
232 list(APPEND _libdir "${_libdir2}")
233 list(APPEND _libdir "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
234 list(APPEND _libdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
235 endif()
236 endif ()
237
238 if (BLAS_VERBOSE)
239 message("${Cyan}Try to find BLAS libraries: ${_list}")
240 endif ()
241
Brian Silverman72890c22015-09-19 14:37:37 -0400242 foreach(_library ${_list})
243 set(_combined_name ${_combined_name}_${_library})
244
Austin Schuh189376f2018-12-20 22:11:15 +1100245 if(_libraries_work)
246 if (BLA_STATIC)
247 if (WIN32)
248 set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
249 endif ()
250 if (APPLE)
251 set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
252 else ()
253 set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
254 endif ()
Brian Silverman72890c22015-09-19 14:37:37 -0400255 else ()
Austin Schuh189376f2018-12-20 22:11:15 +1100256 if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
257 # for ubuntu's libblas3gf and liblapack3gf packages
258 set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
259 endif ()
260 endif ()
261 find_library(${_prefix}_${_library}_LIBRARY
262 NAMES ${_library}
263 HINTS ${_libdir}
264 NO_DEFAULT_PATH
265 )
Brian Silverman72890c22015-09-19 14:37:37 -0400266 mark_as_advanced(${_prefix}_${_library}_LIBRARY)
Austin Schuh189376f2018-12-20 22:11:15 +1100267 # Print status if not found
268 # -------------------------
269 if (NOT ${_prefix}_${_library}_LIBRARY AND NOT BLAS_FIND_QUIETLY AND BLAS_VERBOSE)
270 Print_Find_Library_Blas_Status(blas ${_library} ${_libdir})
271 endif ()
Brian Silverman72890c22015-09-19 14:37:37 -0400272 set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
Austin Schuh189376f2018-12-20 22:11:15 +1100273 set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
Austin Schuhc55b0172022-02-20 17:52:35 -0800274 endif()
275 endforeach()
Brian Silverman72890c22015-09-19 14:37:37 -0400276
Austin Schuh189376f2018-12-20 22:11:15 +1100277 if(_libraries_work)
278 # Test this combination of libraries.
279 if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND BLA_STATIC)
280 list(INSERT ${LIBRARIES} 0 "-Wl,--start-group")
281 list(APPEND ${LIBRARIES} "-Wl,--end-group")
Brian Silverman72890c22015-09-19 14:37:37 -0400282 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100283 set(CMAKE_REQUIRED_LIBRARIES "${_flags};${${LIBRARIES}};${_thread}")
284 set(CMAKE_REQUIRED_FLAGS "${BLAS_COMPILER_FLAGS}")
285 if (BLAS_VERBOSE)
286 message("${Cyan}BLAS libs found for BLA_VENDOR ${BLA_VENDOR}."
287 "Try to compile symbol ${_name} with following libraries:"
288 "${CMAKE_REQUIRED_LIBRARIES}")
289 endif ()
290 if(NOT BLAS_FOUND)
291 unset(${_prefix}${_combined_name}_WORKS CACHE)
292 endif()
293 if (_CHECK_FORTRAN)
294 if (CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
295 string(REPLACE "mkl_intel_lp64" "mkl_gf_lp64" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
296 string(REPLACE "mkl_intel_ilp64" "mkl_gf_ilp64" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
297 endif()
298 check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
299 else()
300 check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
301 endif()
302 mark_as_advanced(${_prefix}${_combined_name}_WORKS)
303 set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
304 # Print status if not found
305 # -------------------------
306 if (NOT _libraries_work AND NOT BLAS_FIND_QUIETLY AND BLAS_VERBOSE)
307 Print_Find_Library_Blas_CheckFunc_Status(${_name} ${CMAKE_REQUIRED_LIBRARIES})
308 endif ()
309 set(CMAKE_REQUIRED_LIBRARIES)
Brian Silverman72890c22015-09-19 14:37:37 -0400310 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100311
312 if(_libraries_work)
313 set(${LIBRARIES} ${${LIBRARIES}} ${_thread})
Austin Schuhc55b0172022-02-20 17:52:35 -0800314 else()
Austin Schuh189376f2018-12-20 22:11:15 +1100315 set(${LIBRARIES} FALSE)
Austin Schuhc55b0172022-02-20 17:52:35 -0800316 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100317
Austin Schuhc55b0172022-02-20 17:52:35 -0800318endmacro()
Brian Silverman72890c22015-09-19 14:37:37 -0400319
320
Austin Schuh189376f2018-12-20 22:11:15 +1100321set(BLAS_LINKER_FLAGS)
322set(BLAS_LIBRARIES)
323set(BLAS95_LIBRARIES)
324if ($ENV{BLA_VENDOR} MATCHES ".+")
325 set(BLA_VENDOR $ENV{BLA_VENDOR})
326else ()
327 if(NOT BLA_VENDOR)
328 set(BLA_VENDOR "All")
329 endif()
330endif ()
Brian Silverman72890c22015-09-19 14:37:37 -0400331
Austin Schuh189376f2018-12-20 22:11:15 +1100332#BLAS in intel mkl 10 library? (em64t 64bit)
333if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
Brian Silverman72890c22015-09-19 14:37:37 -0400334
Austin Schuh189376f2018-12-20 22:11:15 +1100335 if(NOT BLAS_LIBRARIES OR BLA_VENDOR MATCHES "Intel*")
336 # Looking for include
337 # -------------------
Brian Silverman72890c22015-09-19 14:37:37 -0400338
Austin Schuh189376f2018-12-20 22:11:15 +1100339 # Add system include paths to search include
340 # ------------------------------------------
341 unset(_inc_env)
342 set(ENV_MKLROOT "$ENV{MKLROOT}")
343 set(ENV_BLAS_DIR "$ENV{BLAS_DIR}")
344 set(ENV_BLAS_INCDIR "$ENV{BLAS_INCDIR}")
345 if(ENV_BLAS_INCDIR)
346 list(APPEND _inc_env "${ENV_BLAS_INCDIR}")
347 elseif(ENV_BLAS_DIR)
348 list(APPEND _inc_env "${ENV_BLAS_DIR}")
349 list(APPEND _inc_env "${ENV_BLAS_DIR}/include")
350 else()
351 if (ENV_MKLROOT)
352 list(APPEND _inc_env "${ENV_MKLROOT}/include")
353 endif()
354 # system variables
355 if(WIN32)
356 string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
357 list(APPEND _inc_env "${_path_env}")
358 else()
359 string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
360 list(APPEND _inc_env "${_path_env}")
361 string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
362 list(APPEND _inc_env "${_path_env}")
363 string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
364 list(APPEND _inc_env "${_path_env}")
365 string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
366 list(APPEND _inc_env "${_path_env}")
367 endif()
368 endif()
369 list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
370 list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
371 list(REMOVE_DUPLICATES _inc_env)
Brian Silverman72890c22015-09-19 14:37:37 -0400372
Austin Schuh189376f2018-12-20 22:11:15 +1100373 # set paths where to look for
374 set(PATH_TO_LOOK_FOR "${_inc_env}")
Brian Silverman72890c22015-09-19 14:37:37 -0400375
Austin Schuh189376f2018-12-20 22:11:15 +1100376 # Try to find the fftw header in the given paths
377 # -------------------------------------------------
378 # call cmake macro to find the header path
379 if(BLAS_INCDIR)
380 set(BLAS_mkl.h_DIRS "BLAS_mkl.h_DIRS-NOTFOUND")
381 find_path(BLAS_mkl.h_DIRS
382 NAMES mkl.h
383 HINTS ${BLAS_INCDIR})
384 else()
385 if(BLAS_DIR)
386 set(BLAS_mkl.h_DIRS "BLAS_mkl.h_DIRS-NOTFOUND")
387 find_path(BLAS_mkl.h_DIRS
388 NAMES mkl.h
389 HINTS ${BLAS_DIR}
390 PATH_SUFFIXES "include")
391 else()
392 set(BLAS_mkl.h_DIRS "BLAS_mkl.h_DIRS-NOTFOUND")
393 find_path(BLAS_mkl.h_DIRS
394 NAMES mkl.h
395 HINTS ${PATH_TO_LOOK_FOR})
396 endif()
397 endif()
398 mark_as_advanced(BLAS_mkl.h_DIRS)
Brian Silverman72890c22015-09-19 14:37:37 -0400399
Austin Schuh189376f2018-12-20 22:11:15 +1100400 # If found, add path to cmake variable
401 # ------------------------------------
402 if (BLAS_mkl.h_DIRS)
403 set(BLAS_INCLUDE_DIRS "${BLAS_mkl.h_DIRS}")
404 else ()
405 set(BLAS_INCLUDE_DIRS "BLAS_INCLUDE_DIRS-NOTFOUND")
406 if(NOT BLAS_FIND_QUIETLY)
407 message(STATUS "Looking for BLAS -- mkl.h not found")
408 endif()
409 endif()
410
411 if (WIN32)
412 string(REPLACE ":" ";" _libdir "$ENV{LIB}")
413 elseif (APPLE)
414 string(REPLACE ":" ";" _libdir "$ENV{DYLD_LIBRARY_PATH}")
415 else ()
416 string(REPLACE ":" ";" _libdir "$ENV{LD_LIBRARY_PATH}")
417 endif ()
418 list(APPEND _libdir "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
419 list(APPEND _libdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
420 # libiomp5
421 # --------
422 set(OMP_iomp5_LIBRARY "OMP_iomp5_LIBRARY-NOTFOUND")
423 find_library(OMP_iomp5_LIBRARY
424 NAMES iomp5
425 HINTS ${_libdir}
426 )
427 mark_as_advanced(OMP_iomp5_LIBRARY)
428 set(OMP_LIB "")
429 # libgomp
430 # -------
431 set(OMP_gomp_LIBRARY "OMP_gomp_LIBRARY-NOTFOUND")
432 find_library(OMP_gomp_LIBRARY
433 NAMES gomp
434 HINTS ${_libdir}
435 )
436 mark_as_advanced(OMP_gomp_LIBRARY)
437 # choose one or another depending on the compilo
438 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
439 if (OMP_gomp_LIBRARY)
440 set(OMP_LIB "${OMP_gomp_LIBRARY}")
441 endif()
Austin Schuhc55b0172022-02-20 17:52:35 -0800442 else()
Austin Schuh189376f2018-12-20 22:11:15 +1100443 if (OMP_iomp5_LIBRARY)
444 set(OMP_LIB "${OMP_iomp5_LIBRARY}")
445 endif()
446 endif()
447
448 if (UNIX AND NOT WIN32)
449 # m
450 find_library(M_LIBRARY
451 NAMES m
452 HINTS ${_libdir})
453 mark_as_advanced(M_LIBRARY)
454 if(M_LIBRARY)
455 set(LM "-lm")
456 else()
457 set(LM "")
458 endif()
459 # Fortran
460 set(LGFORTRAN "")
461 if (CMAKE_C_COMPILER_ID MATCHES "GNU")
462 find_library(
463 FORTRAN_gfortran_LIBRARY
464 NAMES gfortran
465 HINTS ${_libdir}
466 )
467 mark_as_advanced(FORTRAN_gfortran_LIBRARY)
468 if (FORTRAN_gfortran_LIBRARY)
469 set(LGFORTRAN "${FORTRAN_gfortran_LIBRARY}")
470 endif()
471 elseif (CMAKE_C_COMPILER_ID MATCHES "Intel")
472 find_library(
473 FORTRAN_ifcore_LIBRARY
474 NAMES ifcore
475 HINTS ${_libdir}
476 )
477 mark_as_advanced(FORTRAN_ifcore_LIBRARY)
478 if (FORTRAN_ifcore_LIBRARY)
479 set(LGFORTRAN "{FORTRAN_ifcore_LIBRARY}")
480 endif()
481 endif()
482 set(BLAS_COMPILER_FLAGS "")
483 if (NOT BLA_VENDOR STREQUAL "Intel10_64lp_seq")
484 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
485 list(APPEND BLAS_COMPILER_FLAGS "-openmp")
486 endif()
487 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
488 list(APPEND BLAS_COMPILER_FLAGS "-fopenmp")
489 endif()
490 endif()
491 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
492 if (BLA_VENDOR STREQUAL "Intel10_32")
493 list(APPEND BLAS_COMPILER_FLAGS "-m32")
494 else()
495 list(APPEND BLAS_COMPILER_FLAGS "-m64")
496 endif()
497 if (NOT BLA_VENDOR STREQUAL "Intel10_64lp_seq")
498 list(APPEND OMP_LIB "-ldl")
499 endif()
500 if (ENV_MKLROOT)
501 list(APPEND BLAS_COMPILER_FLAGS "-I${ENV_MKLROOT}/include")
502 endif()
503 endif()
504
505 set(additional_flags "")
506 if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
507 set(additional_flags "-Wl,--no-as-needed")
508 endif()
509 endif ()
510
511 if (_LANGUAGES_ MATCHES C OR _LANGUAGES_ MATCHES CXX)
512 if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
Austin Schuhc55b0172022-02-20 17:52:35 -0800513 find_dependency(Threads)
Austin Schuh189376f2018-12-20 22:11:15 +1100514 else()
Austin Schuhc55b0172022-02-20 17:52:35 -0800515 find_dependency(Threads REQUIRED)
Austin Schuh189376f2018-12-20 22:11:15 +1100516 endif()
517
518 set(BLAS_SEARCH_LIBS "")
519
520 if(BLA_F95)
521
522 set(BLAS_mkl_SEARCH_SYMBOL SGEMM)
523 set(_LIBRARIES BLAS95_LIBRARIES)
524 if (WIN32)
525 if (BLA_STATIC)
526 set(BLAS_mkl_DLL_SUFFIX "")
527 else()
528 set(BLAS_mkl_DLL_SUFFIX "_dll")
529 endif()
530
531 # Find the main file (32-bit or 64-bit)
532 set(BLAS_SEARCH_LIBS_WIN_MAIN "")
533 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
534 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
535 "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
536 endif()
537 if (BLA_VENDOR STREQUAL "Intel10_64lp*" OR BLA_VENDOR STREQUAL "All")
538 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
539 "mkl_blas95_lp64${BLAS_mkl_DLL_SUFFIX} mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
540 endif ()
541
542 # Add threading/sequential libs
543 set(BLAS_SEARCH_LIBS_WIN_THREAD "")
544 if (BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
545 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
546 "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
547 endif()
548 if (NOT BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
549 # old version
550 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
551 "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
552 # mkl >= 10.3
553 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
554 "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
555 endif()
556
557 # Cartesian product of the above
558 foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
559 foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
560 list(APPEND BLAS_SEARCH_LIBS
561 "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
562 endforeach()
563 endforeach()
Austin Schuhc55b0172022-02-20 17:52:35 -0800564 else ()
Austin Schuh189376f2018-12-20 22:11:15 +1100565 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
566 list(APPEND BLAS_SEARCH_LIBS
567 "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide")
568 endif ()
569 if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
570 # old version
571 list(APPEND BLAS_SEARCH_LIBS
572 "mkl_blas95 mkl_intel_lp64 mkl_intel_thread mkl_core guide")
573 # mkl >= 10.3
574 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
575 list(APPEND BLAS_SEARCH_LIBS
576 "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core")
577 endif()
578 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
579 list(APPEND BLAS_SEARCH_LIBS
580 "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core")
581 endif()
582 endif ()
583 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
584 list(APPEND BLAS_SEARCH_LIBS
585 "mkl_intel_lp64 mkl_sequential mkl_core")
586 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq")
587 set(OMP_LIB "")
588 endif()
589 endif ()
Austin Schuhc55b0172022-02-20 17:52:35 -0800590 endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100591
Austin Schuhc55b0172022-02-20 17:52:35 -0800592 else ()
Austin Schuh189376f2018-12-20 22:11:15 +1100593
594 set(BLAS_mkl_SEARCH_SYMBOL sgemm)
595 set(_LIBRARIES BLAS_LIBRARIES)
596 if (WIN32)
597 if (BLA_STATIC)
598 set(BLAS_mkl_DLL_SUFFIX "")
599 else()
600 set(BLAS_mkl_DLL_SUFFIX "_dll")
601 endif()
602
603 # Find the main file (32-bit or 64-bit)
604 set(BLAS_SEARCH_LIBS_WIN_MAIN "")
605 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
606 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
607 "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
608 endif()
609 if (BLA_VENDOR STREQUAL "Intel10_64lp*" OR BLA_VENDOR STREQUAL "All")
610 list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
611 "mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
612 endif ()
613
614 # Add threading/sequential libs
615 set(BLAS_SEARCH_LIBS_WIN_THREAD "")
616 if (NOT BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
617 # old version
618 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
619 "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
620 # mkl >= 10.3
621 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
622 "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
623 endif()
624 if (BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
625 list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
626 "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
627 endif()
628
629 # Cartesian product of the above
630 foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
631 foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
632 list(APPEND BLAS_SEARCH_LIBS
633 "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
634 endforeach()
635 endforeach()
Austin Schuhc55b0172022-02-20 17:52:35 -0800636 else ()
Austin Schuh189376f2018-12-20 22:11:15 +1100637 if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
638 list(APPEND BLAS_SEARCH_LIBS
639 "mkl_intel mkl_intel_thread mkl_core guide")
640 endif ()
641 if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
642 # old version
643 list(APPEND BLAS_SEARCH_LIBS
644 "mkl_intel_lp64 mkl_intel_thread mkl_core guide")
645 # mkl >= 10.3
646 if (CMAKE_C_COMPILER_ID STREQUAL "Intel")
647 list(APPEND BLAS_SEARCH_LIBS
648 "mkl_intel_lp64 mkl_intel_thread mkl_core")
649 endif()
650 if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
651 list(APPEND BLAS_SEARCH_LIBS
652 "mkl_intel_lp64 mkl_gnu_thread mkl_core")
653 endif()
654 endif ()
655 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
656 list(APPEND BLAS_SEARCH_LIBS
657 "mkl_intel_lp64 mkl_sequential mkl_core")
658 if (BLA_VENDOR STREQUAL "Intel10_64lp_seq")
659 set(OMP_LIB "")
660 endif()
661 endif ()
662 #older vesions of intel mkl libs
663 if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
664 list(APPEND BLAS_SEARCH_LIBS
665 "mkl")
666 list(APPEND BLAS_SEARCH_LIBS
667 "mkl_ia32")
668 list(APPEND BLAS_SEARCH_LIBS
669 "mkl_em64t")
670 endif ()
Austin Schuhc55b0172022-02-20 17:52:35 -0800671 endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100672
Austin Schuhc55b0172022-02-20 17:52:35 -0800673 endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100674
675 foreach (IT ${BLAS_SEARCH_LIBS})
676 string(REPLACE " " ";" SEARCH_LIBS ${IT})
677 if (${_LIBRARIES})
678 else ()
679 check_fortran_libraries(
680 ${_LIBRARIES}
681 BLAS
682 ${BLAS_mkl_SEARCH_SYMBOL}
683 "${additional_flags}"
684 "${SEARCH_LIBS}"
685 "${OMP_LIB};${CMAKE_THREAD_LIBS_INIT};${LM}"
686 )
687 if(_LIBRARIES)
688 set(BLAS_LINKER_FLAGS "${additional_flags}")
689 endif()
690 endif()
691 endforeach ()
692 if(NOT BLAS_FIND_QUIETLY)
693 if(${_LIBRARIES})
694 message(STATUS "Looking for MKL BLAS: found")
695 else()
696 message(STATUS "Looking for MKL BLAS: not found")
697 endif()
698 endif()
699 if (${_LIBRARIES} AND NOT BLAS_VENDOR_FOUND)
700 set (BLAS_VENDOR_FOUND "Intel MKL")
701 endif()
Austin Schuhc55b0172022-02-20 17:52:35 -0800702 endif ()
703 endif()
704endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100705
706
707if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
708
709 if(NOT BLAS_LIBRARIES)
710 # gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
711 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400712 BLAS_LIBRARIES
713 BLAS
714 sgemm
715 ""
Austin Schuh189376f2018-12-20 22:11:15 +1100716 "goto2"
717 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400718 )
Austin Schuh189376f2018-12-20 22:11:15 +1100719 if(NOT BLAS_FIND_QUIETLY)
720 if(BLAS_LIBRARIES)
721 message(STATUS "Looking for Goto BLAS: found")
722 else()
723 message(STATUS "Looking for Goto BLAS: not found")
724 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400725 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100726 endif()
727 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
728 set (BLAS_VENDOR_FOUND "Goto")
729 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400730
Austin Schuhc55b0172022-02-20 17:52:35 -0800731endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100732
733
734# OpenBlas
735if (BLA_VENDOR STREQUAL "Open" OR BLA_VENDOR STREQUAL "All")
736
737 if(NOT BLAS_LIBRARIES)
738 # openblas (http://www.openblas.net/)
739 check_fortran_libraries(
740 BLAS_LIBRARIES
741 BLAS
742 sgemm
743 ""
744 "openblas"
745 ""
746 )
747 if(NOT BLAS_FIND_QUIETLY)
748 if(BLAS_LIBRARIES)
749 message(STATUS "Looking for Open BLAS: found")
750 else()
751 message(STATUS "Looking for Open BLAS: not found")
752 endif()
753 endif()
754 endif()
755 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
756 set (BLAS_VENDOR_FOUND "Openblas")
757 endif()
758
Austin Schuhc55b0172022-02-20 17:52:35 -0800759endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100760
761
762# EigenBlas
763if (BLA_VENDOR STREQUAL "Eigen" OR BLA_VENDOR STREQUAL "All")
764
765 if(NOT BLAS_LIBRARIES)
766 # eigenblas (http://eigen.tuxfamily.org/index.php?title=Main_Page)
767 check_fortran_libraries(
768 BLAS_LIBRARIES
769 BLAS
770 sgemm
771 ""
772 "eigen_blas"
773 ""
774 )
775 if(NOT BLAS_FIND_QUIETLY)
776 if(BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
777 message(STATUS "Looking for Eigen BLAS: found")
778 else()
779 message(STATUS "Looking for Eigen BLAS: not found")
780 endif()
781 endif()
782 endif()
783
784 if(NOT BLAS_LIBRARIES)
785 # eigenblas (http://eigen.tuxfamily.org/index.php?title=Main_Page)
786 check_fortran_libraries(
787 BLAS_LIBRARIES
788 BLAS
789 sgemm
790 ""
791 "eigen_blas_static"
792 ""
793 )
794 if(NOT BLAS_FIND_QUIETLY)
795 if(BLAS_LIBRARIES)
796 message(STATUS "Looking for Eigen BLAS: found")
797 else()
798 message(STATUS "Looking for Eigen BLAS: not found")
799 endif()
800 endif()
801 endif()
802 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
803 set (BLAS_VENDOR_FOUND "Eigen")
804 endif()
805
Austin Schuhc55b0172022-02-20 17:52:35 -0800806endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100807
808
809if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All")
810
811 if(NOT BLAS_LIBRARIES)
812 # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)
813 check_fortran_libraries(
814 BLAS_LIBRARIES
815 BLAS
816 dgemm
817 ""
818 "f77blas;atlas"
819 ""
820 )
821 if(NOT BLAS_FIND_QUIETLY)
822 if(BLAS_LIBRARIES)
823 message(STATUS "Looking for Atlas BLAS: found")
824 else()
825 message(STATUS "Looking for Atlas BLAS: not found")
826 endif()
827 endif()
828 endif()
829
830 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
831 set (BLAS_VENDOR_FOUND "Atlas")
832 endif()
833
Austin Schuhc55b0172022-02-20 17:52:35 -0800834endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100835
836
837# BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
838if (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All")
839
840 if(NOT BLAS_LIBRARIES)
841 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400842 BLAS_LIBRARIES
843 BLAS
844 sgemm
845 ""
846 "sgemm;dgemm;blas"
Austin Schuh189376f2018-12-20 22:11:15 +1100847 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400848 )
Austin Schuh189376f2018-12-20 22:11:15 +1100849 if(NOT BLAS_FIND_QUIETLY)
850 if(BLAS_LIBRARIES)
851 message(STATUS "Looking for PhiPACK BLAS: found")
852 else()
853 message(STATUS "Looking for PhiPACK BLAS: not found")
854 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400855 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100856 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400857
Austin Schuh189376f2018-12-20 22:11:15 +1100858 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
859 set (BLAS_VENDOR_FOUND "PhiPACK")
860 endif()
861
Austin Schuhc55b0172022-02-20 17:52:35 -0800862endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100863
864
865# BLAS in Alpha CXML library?
866if (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All")
867
868 if(NOT BLAS_LIBRARIES)
869 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400870 BLAS_LIBRARIES
871 BLAS
872 sgemm
873 ""
874 "cxml"
Austin Schuh189376f2018-12-20 22:11:15 +1100875 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400876 )
Austin Schuh189376f2018-12-20 22:11:15 +1100877 if(NOT BLAS_FIND_QUIETLY)
878 if(BLAS_LIBRARIES)
879 message(STATUS "Looking for CXML BLAS: found")
880 else()
881 message(STATUS "Looking for CXML BLAS: not found")
882 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400883 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100884 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400885
Austin Schuh189376f2018-12-20 22:11:15 +1100886 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
887 set (BLAS_VENDOR_FOUND "CXML")
888 endif()
889
Austin Schuhc55b0172022-02-20 17:52:35 -0800890endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100891
892
893# BLAS in Alpha DXML library? (now called CXML, see above)
894if (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All")
895
896 if(NOT BLAS_LIBRARIES)
897 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400898 BLAS_LIBRARIES
899 BLAS
900 sgemm
901 ""
902 "dxml"
Austin Schuh189376f2018-12-20 22:11:15 +1100903 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400904 )
Austin Schuh189376f2018-12-20 22:11:15 +1100905 if(NOT BLAS_FIND_QUIETLY)
906 if(BLAS_LIBRARIES)
907 message(STATUS "Looking for DXML BLAS: found")
908 else()
909 message(STATUS "Looking for DXML BLAS: not found")
910 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400911 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100912 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400913
Austin Schuh189376f2018-12-20 22:11:15 +1100914 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
915 set (BLAS_VENDOR_FOUND "DXML")
916 endif()
917
Austin Schuhc55b0172022-02-20 17:52:35 -0800918endif ()
Austin Schuh189376f2018-12-20 22:11:15 +1100919
920
921# BLAS in Sun Performance library?
922if (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All")
923
924 if(NOT BLAS_LIBRARIES)
925 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400926 BLAS_LIBRARIES
927 BLAS
928 sgemm
929 "-xlic_lib=sunperf"
930 "sunperf;sunmath"
Austin Schuh189376f2018-12-20 22:11:15 +1100931 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400932 )
Austin Schuh189376f2018-12-20 22:11:15 +1100933 if(BLAS_LIBRARIES)
934 set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf")
935 endif()
936 if(NOT BLAS_FIND_QUIETLY)
Brian Silverman72890c22015-09-19 14:37:37 -0400937 if(BLAS_LIBRARIES)
Austin Schuh189376f2018-12-20 22:11:15 +1100938 message(STATUS "Looking for SunPerf BLAS: found")
939 else()
940 message(STATUS "Looking for SunPerf BLAS: not found")
Brian Silverman72890c22015-09-19 14:37:37 -0400941 endif()
942 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100943 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400944
Austin Schuh189376f2018-12-20 22:11:15 +1100945 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
946 set (BLAS_VENDOR_FOUND "SunPerf")
947 endif()
948
949endif ()
950
951
952# BLAS in SCSL library? (SGI/Cray Scientific Library)
953if (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All")
954
955 if(NOT BLAS_LIBRARIES)
956 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400957 BLAS_LIBRARIES
958 BLAS
959 sgemm
960 ""
961 "scsl"
Austin Schuh189376f2018-12-20 22:11:15 +1100962 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400963 )
Austin Schuh189376f2018-12-20 22:11:15 +1100964 if(NOT BLAS_FIND_QUIETLY)
965 if(BLAS_LIBRARIES)
966 message(STATUS "Looking for SCSL BLAS: found")
967 else()
968 message(STATUS "Looking for SCSL BLAS: not found")
969 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400970 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100971 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400972
Austin Schuh189376f2018-12-20 22:11:15 +1100973 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
974 set (BLAS_VENDOR_FOUND "SunPerf")
975 endif()
976
977endif ()
978
979
980# BLAS in SGIMATH library?
981if (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All")
982
983 if(NOT BLAS_LIBRARIES)
984 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -0400985 BLAS_LIBRARIES
986 BLAS
987 sgemm
988 ""
989 "complib.sgimath"
Austin Schuh189376f2018-12-20 22:11:15 +1100990 ""
Brian Silverman72890c22015-09-19 14:37:37 -0400991 )
Austin Schuh189376f2018-12-20 22:11:15 +1100992 if(NOT BLAS_FIND_QUIETLY)
993 if(BLAS_LIBRARIES)
994 message(STATUS "Looking for SGIMATH BLAS: found")
995 else()
996 message(STATUS "Looking for SGIMATH BLAS: not found")
997 endif()
Brian Silverman72890c22015-09-19 14:37:37 -0400998 endif()
Austin Schuh189376f2018-12-20 22:11:15 +1100999 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001000
Austin Schuh189376f2018-12-20 22:11:15 +11001001 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1002 set (BLAS_VENDOR_FOUND "SGIMATH")
1003 endif()
1004
1005endif ()
1006
1007
1008# BLAS in IBM ESSL library (requires generic BLAS lib, too)
1009if (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All")
1010
1011 if(NOT BLAS_LIBRARIES)
1012 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001013 BLAS_LIBRARIES
1014 BLAS
1015 sgemm
1016 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001017 "essl;xlfmath;xlf90_r;blas"
1018 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001019 )
Austin Schuh189376f2018-12-20 22:11:15 +11001020 if(NOT BLAS_FIND_QUIETLY)
1021 if(BLAS_LIBRARIES)
1022 message(STATUS "Looking for IBM ESSL BLAS: found")
1023 else()
1024 message(STATUS "Looking for IBM ESSL BLAS: not found")
1025 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001026 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001027 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001028
Austin Schuh189376f2018-12-20 22:11:15 +11001029 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1030 set (BLAS_VENDOR_FOUND "IBM ESSL")
1031 endif()
1032
1033endif ()
1034
1035# BLAS in IBM ESSL_MT library (requires generic BLAS lib, too)
1036if (BLA_VENDOR STREQUAL "IBMESSLMT" OR BLA_VENDOR STREQUAL "All")
1037
1038 if(NOT BLAS_LIBRARIES)
1039 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001040 BLAS_LIBRARIES
1041 BLAS
1042 sgemm
1043 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001044 "esslsmp;xlsmp;xlfmath;xlf90_r;blas"
Brian Silverman72890c22015-09-19 14:37:37 -04001045 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001046 )
Austin Schuh189376f2018-12-20 22:11:15 +11001047 if(NOT BLAS_FIND_QUIETLY)
1048 if(BLAS_LIBRARIES)
1049 message(STATUS "Looking for IBM ESSL MT BLAS: found")
1050 else()
1051 message(STATUS "Looking for IBM ESSL MT BLAS: not found")
1052 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001053 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001054 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001055
Austin Schuh189376f2018-12-20 22:11:15 +11001056 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1057 set (BLAS_VENDOR_FOUND "IBM ESSL MT")
1058 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001059
Austin Schuh189376f2018-12-20 22:11:15 +11001060endif ()
1061
1062
1063#BLAS in acml library?
1064if (BLA_VENDOR MATCHES "ACML.*" OR BLA_VENDOR STREQUAL "All")
1065
1066 if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR
1067 ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR
1068 ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)))
1069
1070 # try to find acml in "standard" paths
1071 if( WIN32 )
1072 file( GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt" )
1073 else()
1074 file( GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt" )
1075 endif()
1076 if( WIN32 )
1077 file( GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples" )
1078 else()
1079 file( GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples" )
1080 endif()
1081 list(GET _ACML_ROOT 0 _ACML_ROOT)
1082 list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)
1083
1084 if( _ACML_ROOT )
1085
1086 get_filename_component( _ACML_ROOT ${_ACML_ROOT} PATH )
1087 if( SIZEOF_INTEGER EQUAL 8 )
1088 set( _ACML_PATH_SUFFIX "_int64" )
1089 else()
1090 set( _ACML_PATH_SUFFIX "" )
1091 endif()
1092 if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
1093 set( _ACML_COMPILER32 "ifort32" )
1094 set( _ACML_COMPILER64 "ifort64" )
1095 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
1096 set( _ACML_COMPILER32 "sun32" )
1097 set( _ACML_COMPILER64 "sun64" )
1098 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" )
1099 set( _ACML_COMPILER32 "pgi32" )
1100 if( WIN32 )
1101 set( _ACML_COMPILER64 "win64" )
1102 else()
1103 set( _ACML_COMPILER64 "pgi64" )
1104 endif()
1105 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" )
1106 # 32 bit builds not supported on Open64 but for code simplicity
1107 # We'll just use the same directory twice
1108 set( _ACML_COMPILER32 "open64_64" )
1109 set( _ACML_COMPILER64 "open64_64" )
1110 elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" )
1111 set( _ACML_COMPILER32 "nag32" )
1112 set( _ACML_COMPILER64 "nag64" )
1113 else()
1114 set( _ACML_COMPILER32 "gfortran32" )
1115 set( _ACML_COMPILER64 "gfortran64" )
1116 endif()
1117
1118 if( BLA_VENDOR STREQUAL "ACML_MP" )
1119 set(_ACML_MP_LIB_DIRS
1120 "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib"
1121 "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" )
1122 else()
1123 set(_ACML_LIB_DIRS
1124 "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib"
1125 "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" )
1126 endif()
1127
Austin Schuhc55b0172022-02-20 17:52:35 -08001128 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001129
1130 elseif(BLAS_${BLA_VENDOR}_LIB_DIRS)
1131
1132 set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS})
1133
1134 endif()
1135
1136 if( BLA_VENDOR STREQUAL "ACML_MP" )
1137 foreach( BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS})
1138 check_fortran_libraries (
1139 BLAS_LIBRARIES
1140 BLAS
1141 sgemm
1142 "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS}
1143 )
1144 if( BLAS_LIBRARIES )
1145 break()
1146 endif()
1147 endforeach()
1148 elseif( BLA_VENDOR STREQUAL "ACML_GPU" )
1149 foreach( BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS})
1150 check_fortran_libraries (
1151 BLAS_LIBRARIES
1152 BLAS
1153 sgemm
1154 "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS}
1155 )
1156 if( BLAS_LIBRARIES )
1157 break()
1158 endif()
1159 endforeach()
1160 else()
1161 foreach( BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS} )
1162 check_fortran_libraries (
1163 BLAS_LIBRARIES
1164 BLAS
1165 sgemm
1166 "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS}
1167 )
1168 if( BLAS_LIBRARIES )
1169 break()
1170 endif()
1171 endforeach()
1172 endif()
1173
1174 # Either acml or acml_mp should be in LD_LIBRARY_PATH but not both
1175 if(NOT BLAS_LIBRARIES)
1176 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001177 BLAS_LIBRARIES
1178 BLAS
1179 sgemm
1180 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001181 "acml;acml_mv"
1182 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001183 )
Austin Schuh189376f2018-12-20 22:11:15 +11001184 if(NOT BLAS_FIND_QUIETLY)
1185 if(BLAS_LIBRARIES)
1186 message(STATUS "Looking for ACML BLAS: found")
1187 else()
1188 message(STATUS "Looking for ACML BLAS: not found")
1189 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001190 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001191 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001192
Austin Schuh189376f2018-12-20 22:11:15 +11001193 if(NOT BLAS_LIBRARIES)
1194 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001195 BLAS_LIBRARIES
1196 BLAS
1197 sgemm
1198 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001199 "acml_mp;acml_mv"
1200 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001201 )
Austin Schuh189376f2018-12-20 22:11:15 +11001202 if(NOT BLAS_FIND_QUIETLY)
1203 if(BLAS_LIBRARIES)
1204 message(STATUS "Looking for ACML BLAS: found")
1205 else()
1206 message(STATUS "Looking for ACML BLAS: not found")
1207 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001208 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001209 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001210
Austin Schuh189376f2018-12-20 22:11:15 +11001211 if(NOT BLAS_LIBRARIES)
1212 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001213 BLAS_LIBRARIES
1214 BLAS
1215 sgemm
1216 ""
Austin Schuh189376f2018-12-20 22:11:15 +11001217 "acml;acml_mv;CALBLAS"
Brian Silverman72890c22015-09-19 14:37:37 -04001218 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001219 )
Austin Schuh189376f2018-12-20 22:11:15 +11001220 if(NOT BLAS_FIND_QUIETLY)
1221 if(BLAS_LIBRARIES)
1222 message(STATUS "Looking for ACML BLAS: found")
1223 else()
1224 message(STATUS "Looking for ACML BLAS: not found")
1225 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001226 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001227 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001228
Austin Schuh189376f2018-12-20 22:11:15 +11001229 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1230 set (BLAS_VENDOR_FOUND "ACML")
1231 endif()
1232
Austin Schuhc55b0172022-02-20 17:52:35 -08001233endif () # ACML
Austin Schuh189376f2018-12-20 22:11:15 +11001234
1235
1236# Apple BLAS library?
1237if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
1238
1239 if(NOT BLAS_LIBRARIES)
1240 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001241 BLAS_LIBRARIES
1242 BLAS
Austin Schuh189376f2018-12-20 22:11:15 +11001243 dgemm
Brian Silverman72890c22015-09-19 14:37:37 -04001244 ""
1245 "Accelerate"
Austin Schuh189376f2018-12-20 22:11:15 +11001246 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001247 )
Austin Schuh189376f2018-12-20 22:11:15 +11001248 if(NOT BLAS_FIND_QUIETLY)
1249 if(BLAS_LIBRARIES)
1250 message(STATUS "Looking for Apple BLAS: found")
1251 else()
1252 message(STATUS "Looking for Apple BLAS: not found")
1253 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001254 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001255 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001256
Austin Schuh189376f2018-12-20 22:11:15 +11001257 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1258 set (BLAS_VENDOR_FOUND "Apple Accelerate")
1259 endif()
1260
Austin Schuhc55b0172022-02-20 17:52:35 -08001261endif ()
Austin Schuh189376f2018-12-20 22:11:15 +11001262
1263
1264if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
1265
1266 if ( NOT BLAS_LIBRARIES )
1267 check_fortran_libraries(
Brian Silverman72890c22015-09-19 14:37:37 -04001268 BLAS_LIBRARIES
1269 BLAS
Austin Schuh189376f2018-12-20 22:11:15 +11001270 dgemm
Brian Silverman72890c22015-09-19 14:37:37 -04001271 ""
1272 "vecLib"
Brian Silverman72890c22015-09-19 14:37:37 -04001273 ""
Brian Silverman72890c22015-09-19 14:37:37 -04001274 )
Austin Schuh189376f2018-12-20 22:11:15 +11001275 if(NOT BLAS_FIND_QUIETLY)
1276 if(BLAS_LIBRARIES)
1277 message(STATUS "Looking for NAS BLAS: found")
1278 else()
1279 message(STATUS "Looking for NAS BLAS: not found")
1280 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001281 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001282 endif ()
Brian Silverman72890c22015-09-19 14:37:37 -04001283
Austin Schuh189376f2018-12-20 22:11:15 +11001284 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1285 set (BLAS_VENDOR_FOUND "NAS")
1286 endif()
1287
Austin Schuhc55b0172022-02-20 17:52:35 -08001288endif ()
Austin Schuh189376f2018-12-20 22:11:15 +11001289
1290
1291# Generic BLAS library?
1292if (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All")
1293
1294 set(BLAS_SEARCH_LIBS "blas;blas_LINUX;blas_MAC;blas_WINDOWS;refblas")
1295 foreach (SEARCH_LIB ${BLAS_SEARCH_LIBS})
1296 if (BLAS_LIBRARIES)
1297 else ()
1298 check_fortran_libraries(
1299 BLAS_LIBRARIES
1300 BLAS
1301 sgemm
1302 ""
1303 "${SEARCH_LIB}"
1304 "${LGFORTRAN}"
1305 )
1306 if(NOT BLAS_FIND_QUIETLY)
1307 if(BLAS_LIBRARIES)
1308 message(STATUS "Looking for Generic BLAS: found")
1309 else()
1310 message(STATUS "Looking for Generic BLAS: not found")
1311 endif()
1312 endif()
1313 endif()
1314 endforeach ()
1315
1316 if (BLAS_LIBRARIES AND NOT BLAS_VENDOR_FOUND)
1317 set (BLAS_VENDOR_FOUND "Netlib or other Generic libblas")
1318 endif()
1319
Austin Schuhc55b0172022-02-20 17:52:35 -08001320endif ()
Austin Schuh189376f2018-12-20 22:11:15 +11001321
1322
1323if(BLA_F95)
1324
1325 if(BLAS95_LIBRARIES)
1326 set(BLAS95_FOUND TRUE)
1327 else()
1328 set(BLAS95_FOUND FALSE)
1329 endif()
1330
1331 if(NOT BLAS_FIND_QUIETLY)
1332 if(BLAS95_FOUND)
1333 message(STATUS "A library with BLAS95 API found.")
1334 message(STATUS "BLAS_LIBRARIES ${BLAS_LIBRARIES}")
Austin Schuhc55b0172022-02-20 17:52:35 -08001335 else()
Austin Schuh189376f2018-12-20 22:11:15 +11001336 message(WARNING "BLA_VENDOR has been set to ${BLA_VENDOR} but blas 95 libraries could not be found or check of symbols failed."
1337 "\nPlease indicate where to find blas libraries. You have three options:\n"
1338 "- Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas\n"
1339 "- Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs\n"
1340 "- Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)\n"
1341 "\nTo follow libraries detection more precisely you can activate a verbose mode with -DBLAS_VERBOSE=ON at cmake configure."
1342 "\nYou could also specify a BLAS vendor to look for by setting -DBLA_VENDOR=blas_vendor_name."
1343 "\nList of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf, SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit),"
1344 "Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model),"
1345 "Intel( older versions of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic")
1346 if(BLAS_FIND_REQUIRED)
1347 message(FATAL_ERROR
1348 "A required library with BLAS95 API not found. Please specify library location.")
1349 else()
1350 message(STATUS
1351 "A library with BLAS95 API not found. Please specify library location.")
1352 endif()
Austin Schuhc55b0172022-02-20 17:52:35 -08001353 endif()
1354 endif()
Austin Schuh189376f2018-12-20 22:11:15 +11001355
1356 set(BLAS_FOUND TRUE)
1357 set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}")
1358
Austin Schuhc55b0172022-02-20 17:52:35 -08001359else()
Austin Schuh189376f2018-12-20 22:11:15 +11001360
1361 if(BLAS_LIBRARIES)
Brian Silverman72890c22015-09-19 14:37:37 -04001362 set(BLAS_FOUND TRUE)
1363 else()
1364 set(BLAS_FOUND FALSE)
1365 endif()
1366
1367 if(NOT BLAS_FIND_QUIETLY)
1368 if(BLAS_FOUND)
1369 message(STATUS "A library with BLAS API found.")
Austin Schuh189376f2018-12-20 22:11:15 +11001370 message(STATUS "BLAS_LIBRARIES ${BLAS_LIBRARIES}")
Austin Schuhc55b0172022-02-20 17:52:35 -08001371 else()
Austin Schuh189376f2018-12-20 22:11:15 +11001372 message(WARNING "BLA_VENDOR has been set to ${BLA_VENDOR} but blas libraries could not be found or check of symbols failed."
1373 "\nPlease indicate where to find blas libraries. You have three options:\n"
1374 "- Option 1: Provide the installation directory of BLAS library with cmake option: -DBLAS_DIR=your/path/to/blas\n"
1375 "- Option 2: Provide the directory where to find BLAS libraries with cmake option: -DBLAS_LIBDIR=your/path/to/blas/libs\n"
1376 "- Option 3: Update your environment variable (Linux: LD_LIBRARY_PATH, Windows: LIB, Mac: DYLD_LIBRARY_PATH)\n"
1377 "\nTo follow libraries detection more precisely you can activate a verbose mode with -DBLAS_VERBOSE=ON at cmake configure."
1378 "\nYou could also specify a BLAS vendor to look for by setting -DBLA_VENDOR=blas_vendor_name."
1379 "\nList of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, DXML, SunPerf, SCSL, SGIMATH, IBMESSL, Intel10_32 (intel mkl v10 32 bit),"
1380 "Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model), Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model),"
1381 "Intel( older versions of mkl 32 and 64 bit), ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic")
Brian Silverman72890c22015-09-19 14:37:37 -04001382 if(BLAS_FIND_REQUIRED)
Austin Schuh189376f2018-12-20 22:11:15 +11001383 message(FATAL_ERROR
1384 "A required library with BLAS API not found. Please specify library location.")
Brian Silverman72890c22015-09-19 14:37:37 -04001385 else()
Austin Schuh189376f2018-12-20 22:11:15 +11001386 message(STATUS
1387 "A library with BLAS API not found. Please specify library location.")
Brian Silverman72890c22015-09-19 14:37:37 -04001388 endif()
Austin Schuhc55b0172022-02-20 17:52:35 -08001389 endif()
1390 endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001391
Austin Schuhc55b0172022-02-20 17:52:35 -08001392endif()
Brian Silverman72890c22015-09-19 14:37:37 -04001393
Austin Schuh189376f2018-12-20 22:11:15 +11001394set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
Brian Silverman72890c22015-09-19 14:37:37 -04001395
Austin Schuh189376f2018-12-20 22:11:15 +11001396if (BLAS_FOUND)
1397 list(GET BLAS_LIBRARIES 0 first_lib)
1398 get_filename_component(first_lib_path "${first_lib}" PATH)
1399 if (${first_lib_path} MATCHES "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)")
1400 string(REGEX REPLACE "(/lib(32|64)?$)|(/lib/intel64$|/lib/ia32$)" "" not_cached_dir "${first_lib_path}")
1401 set(BLAS_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of BLAS library" FORCE)
1402 else()
1403 set(BLAS_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of BLAS library" FORCE)
1404 endif()
1405endif()
1406mark_as_advanced(BLAS_DIR)
1407mark_as_advanced(BLAS_DIR_FOUND)