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