xref: /aosp_15_r20/external/eigen/cmake/FindBLASEXT.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 EXTENDED for MORSE projects: find include dirs and libraries
12*bf2c3715SXin Li#
13*bf2c3715SXin Li# This module allows to find BLAS libraries by calling the official FindBLAS module
14*bf2c3715SXin Li# and handles the creation of different library lists whether the user wishes to link
15*bf2c3715SXin Li# with a sequential BLAS or a multihreaded (BLAS_SEQ_LIBRARIES and BLAS_PAR_LIBRARIES).
16*bf2c3715SXin Li# BLAS is detected with a FindBLAS call then if the BLAS vendor is Intel10_64lp, ACML
17*bf2c3715SXin Li# or IBMESSLMT then the module attempts to find the corresponding multithreaded libraries.
18*bf2c3715SXin Li#
19*bf2c3715SXin Li# The following variables have been added to manage links with sequential or multithreaded
20*bf2c3715SXin Li# versions:
21*bf2c3715SXin Li#  BLAS_INCLUDE_DIRS  - BLAS include directories
22*bf2c3715SXin Li#  BLAS_LIBRARY_DIRS  - Link directories for BLAS libraries
23*bf2c3715SXin Li#  BLAS_SEQ_LIBRARIES - BLAS component libraries to be linked (sequential)
24*bf2c3715SXin Li#  BLAS_PAR_LIBRARIES - BLAS component libraries to be linked (multithreaded)
25*bf2c3715SXin Li
26*bf2c3715SXin Li#=============================================================================
27*bf2c3715SXin Li# Copyright 2012-2013 Inria
28*bf2c3715SXin Li# Copyright 2012-2013 Emmanuel Agullo
29*bf2c3715SXin Li# Copyright 2012-2013 Mathieu Faverge
30*bf2c3715SXin Li# Copyright 2012      Cedric Castagnede
31*bf2c3715SXin Li# Copyright 2013-2016 Florent Pruvost
32*bf2c3715SXin Li#
33*bf2c3715SXin Li# Distributed under the OSI-approved BSD License (the "License");
34*bf2c3715SXin Li# see accompanying file MORSE-Copyright.txt for details.
35*bf2c3715SXin Li#
36*bf2c3715SXin Li# This software is distributed WITHOUT ANY WARRANTY; without even the
37*bf2c3715SXin Li# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
38*bf2c3715SXin Li# See the License for more information.
39*bf2c3715SXin Li#=============================================================================
40*bf2c3715SXin Li# (To distribute this file outside of Morse, substitute the full
41*bf2c3715SXin Li#  License text for the above reference.)
42*bf2c3715SXin Li
43*bf2c3715SXin Li# macro to factorize this call
44*bf2c3715SXin Liinclude(CMakeFindDependencyMacro)
45*bf2c3715SXin Limacro(find_package_blas)
46*bf2c3715SXin Li  if(BLASEXT_FIND_REQUIRED)
47*bf2c3715SXin Li    if(BLASEXT_FIND_QUIETLY)
48*bf2c3715SXin Li      find_dependency(BLAS REQUIRED QUIET)
49*bf2c3715SXin Li    else()
50*bf2c3715SXin Li      find_dependency(BLAS REQUIRED)
51*bf2c3715SXin Li    endif()
52*bf2c3715SXin Li  else()
53*bf2c3715SXin Li    if(BLASEXT_FIND_QUIETLY)
54*bf2c3715SXin Li      find_dependency(BLAS QUIET)
55*bf2c3715SXin Li    else()
56*bf2c3715SXin Li      find_dependency(BLAS)
57*bf2c3715SXin Li    endif()
58*bf2c3715SXin Li  endif()
59*bf2c3715SXin Liendmacro()
60*bf2c3715SXin Li
61*bf2c3715SXin Li# add a cache variable to let the user specify the BLAS vendor
62*bf2c3715SXin Liset(BLA_VENDOR "" CACHE STRING "list of possible BLAS vendor:
63*bf2c3715SXin Li    Open, Eigen, Goto, ATLAS PhiPACK, CXML, DXML, SunPerf, SCSL, SGIMATH, IBMESSL, IBMESSLMT,
64*bf2c3715SXin Li    Intel10_32 (intel mkl v10 32 bit),
65*bf2c3715SXin Li    Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model),
66*bf2c3715SXin Li    Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model),
67*bf2c3715SXin Li    Intel( older versions of mkl 32 and 64 bit),
68*bf2c3715SXin Li    ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic")
69*bf2c3715SXin Li
70*bf2c3715SXin Liif(NOT BLASEXT_FIND_QUIETLY)
71*bf2c3715SXin Li  message(STATUS "In FindBLASEXT")
72*bf2c3715SXin Li  message(STATUS "If you want to force the use of one specific library, "
73*bf2c3715SXin Li    "\n   please specify the BLAS vendor by setting -DBLA_VENDOR=blas_vendor_name"
74*bf2c3715SXin Li    "\n   at cmake configure.")
75*bf2c3715SXin Li  message(STATUS "List of possible BLAS vendor: Goto, ATLAS PhiPACK, CXML, "
76*bf2c3715SXin Li    "\n   DXML, SunPerf, SCSL, SGIMATH, IBMESSL, IBMESSLMT, Intel10_32 (intel mkl v10 32 bit),"
77*bf2c3715SXin Li    "\n   Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model),"
78*bf2c3715SXin Li    "\n   Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model),"
79*bf2c3715SXin Li    "\n   Intel( older versions of mkl 32 and 64 bit),"
80*bf2c3715SXin Li    "\n   ACML, ACML_MP, ACML_GPU, Apple, NAS, Generic")
81*bf2c3715SXin Liendif()
82*bf2c3715SXin Li
83*bf2c3715SXin Liif (NOT BLAS_FOUND)
84*bf2c3715SXin Li  # First try to detect two cases:
85*bf2c3715SXin Li  # 1: only SEQ libs are handled
86*bf2c3715SXin Li  # 2: both SEQ and PAR libs are handled
87*bf2c3715SXin Li  find_package_blas()
88*bf2c3715SXin Liendif ()
89*bf2c3715SXin Li
90*bf2c3715SXin Li# detect the cases where SEQ and PAR libs are handled
91*bf2c3715SXin Liif(BLA_VENDOR STREQUAL "All" AND
92*bf2c3715SXin Li    (BLAS_mkl_core_LIBRARY OR BLAS_mkl_core_dll_LIBRARY)
93*bf2c3715SXin Li    )
94*bf2c3715SXin Li  set(BLA_VENDOR "Intel")
95*bf2c3715SXin Li  if(BLAS_mkl_intel_LIBRARY)
96*bf2c3715SXin Li    set(BLA_VENDOR "Intel10_32")
97*bf2c3715SXin Li  endif()
98*bf2c3715SXin Li  if(BLAS_mkl_intel_lp64_LIBRARY)
99*bf2c3715SXin Li    set(BLA_VENDOR "Intel10_64lp")
100*bf2c3715SXin Li  endif()
101*bf2c3715SXin Li  if(NOT BLASEXT_FIND_QUIETLY)
102*bf2c3715SXin Li    message(STATUS "A BLAS library has been found (${BLAS_LIBRARIES}) but we"
103*bf2c3715SXin Li      "\n   have also potentially detected some multithreaded BLAS libraries from the MKL."
104*bf2c3715SXin Li      "\n   We try to find both libraries lists (Sequential/Multithreaded).")
105*bf2c3715SXin Li  endif()
106*bf2c3715SXin Li  set(BLAS_FOUND "")
107*bf2c3715SXin Lielseif(BLA_VENDOR STREQUAL "All" AND BLAS_acml_LIBRARY)
108*bf2c3715SXin Li  set(BLA_VENDOR "ACML")
109*bf2c3715SXin Li  if(NOT BLASEXT_FIND_QUIETLY)
110*bf2c3715SXin Li    message(STATUS "A BLAS library has been found (${BLAS_LIBRARIES}) but we"
111*bf2c3715SXin Li      "\n   have also potentially detected some multithreaded BLAS libraries from the ACML."
112*bf2c3715SXin Li      "\n   We try to find both libraries lists (Sequential/Multithreaded).")
113*bf2c3715SXin Li  endif()
114*bf2c3715SXin Li  set(BLAS_FOUND "")
115*bf2c3715SXin Lielseif(BLA_VENDOR STREQUAL "All" AND BLAS_essl_LIBRARY)
116*bf2c3715SXin Li  set(BLA_VENDOR "IBMESSL")
117*bf2c3715SXin Li  if(NOT BLASEXT_FIND_QUIETLY)
118*bf2c3715SXin Li    message(STATUS "A BLAS library has been found (${BLAS_LIBRARIES}) but we"
119*bf2c3715SXin Li      "\n   have also potentially detected some multithreaded BLAS libraries from the ESSL."
120*bf2c3715SXin Li      "\n   We try to find both libraries lists (Sequential/Multithreaded).")
121*bf2c3715SXin Li  endif()
122*bf2c3715SXin Li  set(BLAS_FOUND "")
123*bf2c3715SXin Liendif()
124*bf2c3715SXin Li
125*bf2c3715SXin Li# Intel case
126*bf2c3715SXin Liif(BLA_VENDOR MATCHES "Intel*")
127*bf2c3715SXin Li
128*bf2c3715SXin Li  ###
129*bf2c3715SXin Li  # look for include path if the BLAS vendor is Intel
130*bf2c3715SXin Li  ###
131*bf2c3715SXin Li
132*bf2c3715SXin Li  # gather system include paths
133*bf2c3715SXin Li  unset(_inc_env)
134*bf2c3715SXin Li  if(WIN32)
135*bf2c3715SXin Li    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
136*bf2c3715SXin Li  else()
137*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
138*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
139*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
140*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
141*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
142*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
143*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
144*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
145*bf2c3715SXin Li  endif()
146*bf2c3715SXin Li  list(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
147*bf2c3715SXin Li  list(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
148*bf2c3715SXin Li  set(ENV_MKLROOT "$ENV{MKLROOT}")
149*bf2c3715SXin Li  if (ENV_MKLROOT)
150*bf2c3715SXin Li    list(APPEND _inc_env "${ENV_MKLROOT}/include")
151*bf2c3715SXin Li  endif()
152*bf2c3715SXin Li  list(REMOVE_DUPLICATES _inc_env)
153*bf2c3715SXin Li
154*bf2c3715SXin Li  # find mkl.h inside known include paths
155*bf2c3715SXin Li  set(BLAS_mkl.h_INCLUDE_DIRS "BLAS_mkl.h_INCLUDE_DIRS-NOTFOUND")
156*bf2c3715SXin Li  if(BLAS_INCDIR)
157*bf2c3715SXin Li    set(BLAS_mkl.h_INCLUDE_DIRS "BLAS_mkl.h_INCLUDE_DIRS-NOTFOUND")
158*bf2c3715SXin Li    find_path(BLAS_mkl.h_INCLUDE_DIRS
159*bf2c3715SXin Li      NAMES mkl.h
160*bf2c3715SXin Li      HINTS ${BLAS_INCDIR})
161*bf2c3715SXin Li  else()
162*bf2c3715SXin Li    if(BLAS_DIR)
163*bf2c3715SXin Li      set(BLAS_mkl.h_INCLUDE_DIRS "BLAS_mkl.h_INCLUDE_DIRS-NOTFOUND")
164*bf2c3715SXin Li      find_path(BLAS_mkl.h_INCLUDE_DIRS
165*bf2c3715SXin Li	NAMES mkl.h
166*bf2c3715SXin Li	HINTS ${BLAS_DIR}
167*bf2c3715SXin Li	PATH_SUFFIXES include)
168*bf2c3715SXin Li    else()
169*bf2c3715SXin Li      set(BLAS_mkl.h_INCLUDE_DIRS "BLAS_mkl.h_INCLUDE_DIRS-NOTFOUND")
170*bf2c3715SXin Li      find_path(BLAS_mkl.h_INCLUDE_DIRS
171*bf2c3715SXin Li	NAMES mkl.h
172*bf2c3715SXin Li	HINTS ${_inc_env})
173*bf2c3715SXin Li    endif()
174*bf2c3715SXin Li  endif()
175*bf2c3715SXin Li  mark_as_advanced(BLAS_mkl.h_INCLUDE_DIRS)
176*bf2c3715SXin Li  ## Print status if not found
177*bf2c3715SXin Li  ## -------------------------
178*bf2c3715SXin Li  #if (NOT BLAS_mkl.h_INCLUDE_DIRS AND MORSE_VERBOSE)
179*bf2c3715SXin Li  #    Print_Find_Header_Status(blas mkl.h)
180*bf2c3715SXin Li  #endif ()
181*bf2c3715SXin Li  set(BLAS_INCLUDE_DIRS "")
182*bf2c3715SXin Li  if(BLAS_mkl.h_INCLUDE_DIRS)
183*bf2c3715SXin Li    list(APPEND BLAS_INCLUDE_DIRS "${BLAS_mkl.h_INCLUDE_DIRS}" )
184*bf2c3715SXin Li  endif()
185*bf2c3715SXin Li
186*bf2c3715SXin Li  ###
187*bf2c3715SXin Li  # look for libs
188*bf2c3715SXin Li  ###
189*bf2c3715SXin Li  # if Intel 10 64 bit -> look for sequential and multithreaded versions
190*bf2c3715SXin Li  if(BLA_VENDOR MATCHES "Intel10_64lp*")
191*bf2c3715SXin Li
192*bf2c3715SXin Li    ## look for the sequential version
193*bf2c3715SXin Li    set(BLA_VENDOR "Intel10_64lp_seq")
194*bf2c3715SXin Li    if(NOT BLASEXT_FIND_QUIETLY)
195*bf2c3715SXin Li      message(STATUS "Look for the sequential version Intel10_64lp_seq")
196*bf2c3715SXin Li    endif()
197*bf2c3715SXin Li    find_package_blas()
198*bf2c3715SXin Li    if(BLAS_FOUND)
199*bf2c3715SXin Li      set(BLAS_SEQ_LIBRARIES "${BLAS_LIBRARIES}")
200*bf2c3715SXin Li    else()
201*bf2c3715SXin Li      set(BLAS_SEQ_LIBRARIES "${BLAS_SEQ_LIBRARIES-NOTFOUND}")
202*bf2c3715SXin Li    endif()
203*bf2c3715SXin Li
204*bf2c3715SXin Li    ## look for the multithreaded version
205*bf2c3715SXin Li    set(BLA_VENDOR "Intel10_64lp")
206*bf2c3715SXin Li    if(NOT BLASEXT_FIND_QUIETLY)
207*bf2c3715SXin Li      message(STATUS "Look for the multithreaded version Intel10_64lp")
208*bf2c3715SXin Li    endif()
209*bf2c3715SXin Li    find_package_blas()
210*bf2c3715SXin Li    if(BLAS_FOUND)
211*bf2c3715SXin Li      set(BLAS_PAR_LIBRARIES "${BLAS_LIBRARIES}")
212*bf2c3715SXin Li    else()
213*bf2c3715SXin Li      set(BLAS_PAR_LIBRARIES "${BLAS_PAR_LIBRARIES-NOTFOUND}")
214*bf2c3715SXin Li    endif()
215*bf2c3715SXin Li
216*bf2c3715SXin Li  else()
217*bf2c3715SXin Li
218*bf2c3715SXin Li    if(BLAS_FOUND)
219*bf2c3715SXin Li      set(BLAS_SEQ_LIBRARIES "${BLAS_LIBRARIES}")
220*bf2c3715SXin Li    else()
221*bf2c3715SXin Li      set(BLAS_SEQ_LIBRARIES "${BLAS_SEQ_LIBRARIES-NOTFOUND}")
222*bf2c3715SXin Li    endif()
223*bf2c3715SXin Li
224*bf2c3715SXin Li  endif()
225*bf2c3715SXin Li
226*bf2c3715SXin Li  # ACML case
227*bf2c3715SXin Lielseif(BLA_VENDOR MATCHES "ACML*")
228*bf2c3715SXin Li
229*bf2c3715SXin Li  ## look for the sequential version
230*bf2c3715SXin Li  set(BLA_VENDOR "ACML")
231*bf2c3715SXin Li  find_package_blas()
232*bf2c3715SXin Li  if(BLAS_FOUND)
233*bf2c3715SXin Li    set(BLAS_SEQ_LIBRARIES "${BLAS_LIBRARIES}")
234*bf2c3715SXin Li  else()
235*bf2c3715SXin Li    set(BLAS_SEQ_LIBRARIES "${BLAS_SEQ_LIBRARIES-NOTFOUND}")
236*bf2c3715SXin Li  endif()
237*bf2c3715SXin Li
238*bf2c3715SXin Li  ## look for the multithreaded version
239*bf2c3715SXin Li  set(BLA_VENDOR "ACML_MP")
240*bf2c3715SXin Li  find_package_blas()
241*bf2c3715SXin Li  if(BLAS_FOUND)
242*bf2c3715SXin Li    set(BLAS_PAR_LIBRARIES "${BLAS_LIBRARIES}")
243*bf2c3715SXin Li  else()
244*bf2c3715SXin Li    set(BLAS_PAR_LIBRARIES "${BLAS_PAR_LIBRARIES-NOTFOUND}")
245*bf2c3715SXin Li  endif()
246*bf2c3715SXin Li
247*bf2c3715SXin Li  # IBMESSL case
248*bf2c3715SXin Lielseif(BLA_VENDOR MATCHES "IBMESSL*")
249*bf2c3715SXin Li
250*bf2c3715SXin Li  ## look for the sequential version
251*bf2c3715SXin Li  set(BLA_VENDOR "IBMESSL")
252*bf2c3715SXin Li  find_package_blas()
253*bf2c3715SXin Li  if(BLAS_FOUND)
254*bf2c3715SXin Li    set(BLAS_SEQ_LIBRARIES "${BLAS_LIBRARIES}")
255*bf2c3715SXin Li  else()
256*bf2c3715SXin Li    set(BLAS_SEQ_LIBRARIES "${BLAS_SEQ_LIBRARIES-NOTFOUND}")
257*bf2c3715SXin Li  endif()
258*bf2c3715SXin Li
259*bf2c3715SXin Li  ## look for the multithreaded version
260*bf2c3715SXin Li  set(BLA_VENDOR "IBMESSLMT")
261*bf2c3715SXin Li  find_package_blas()
262*bf2c3715SXin Li  if(BLAS_FOUND)
263*bf2c3715SXin Li    set(BLAS_PAR_LIBRARIES "${BLAS_LIBRARIES}")
264*bf2c3715SXin Li  else()
265*bf2c3715SXin Li    set(BLAS_PAR_LIBRARIES "${BLAS_PAR_LIBRARIES-NOTFOUND}")
266*bf2c3715SXin Li  endif()
267*bf2c3715SXin Li
268*bf2c3715SXin Lielse()
269*bf2c3715SXin Li
270*bf2c3715SXin Li  if(BLAS_FOUND)
271*bf2c3715SXin Li    # define the SEQ libs as the BLAS_LIBRARIES
272*bf2c3715SXin Li    set(BLAS_SEQ_LIBRARIES "${BLAS_LIBRARIES}")
273*bf2c3715SXin Li  else()
274*bf2c3715SXin Li    set(BLAS_SEQ_LIBRARIES "${BLAS_SEQ_LIBRARIES-NOTFOUND}")
275*bf2c3715SXin Li  endif()
276*bf2c3715SXin Li  set(BLAS_PAR_LIBRARIES "${BLAS_PAR_LIBRARIES-NOTFOUND}")
277*bf2c3715SXin Li
278*bf2c3715SXin Liendif()
279*bf2c3715SXin Li
280*bf2c3715SXin Li
281*bf2c3715SXin Liif(BLAS_SEQ_LIBRARIES)
282*bf2c3715SXin Li  set(BLAS_LIBRARIES "${BLAS_SEQ_LIBRARIES}")
283*bf2c3715SXin Liendif()
284*bf2c3715SXin Li
285*bf2c3715SXin Li# extract libs paths
286*bf2c3715SXin Li# remark: because it is not given by find_package(BLAS)
287*bf2c3715SXin Liset(BLAS_LIBRARY_DIRS "")
288*bf2c3715SXin Listring(REPLACE " " ";" BLAS_LIBRARIES "${BLAS_LIBRARIES}")
289*bf2c3715SXin Liforeach(blas_lib ${BLAS_LIBRARIES})
290*bf2c3715SXin Li  if (EXISTS "${blas_lib}")
291*bf2c3715SXin Li    get_filename_component(a_blas_lib_dir "${blas_lib}" PATH)
292*bf2c3715SXin Li    list(APPEND BLAS_LIBRARY_DIRS "${a_blas_lib_dir}" )
293*bf2c3715SXin Li  else()
294*bf2c3715SXin Li    string(REPLACE "-L" "" blas_lib "${blas_lib}")
295*bf2c3715SXin Li    if (EXISTS "${blas_lib}")
296*bf2c3715SXin Li      list(APPEND BLAS_LIBRARY_DIRS "${blas_lib}" )
297*bf2c3715SXin Li    else()
298*bf2c3715SXin Li      get_filename_component(a_blas_lib_dir "${blas_lib}" PATH)
299*bf2c3715SXin Li      if (EXISTS "${a_blas_lib_dir}")
300*bf2c3715SXin Li	list(APPEND BLAS_LIBRARY_DIRS "${a_blas_lib_dir}" )
301*bf2c3715SXin Li      endif()
302*bf2c3715SXin Li    endif()
303*bf2c3715SXin Li  endif()
304*bf2c3715SXin Liendforeach()
305*bf2c3715SXin Liif (BLAS_LIBRARY_DIRS)
306*bf2c3715SXin Li  list(REMOVE_DUPLICATES BLAS_LIBRARY_DIRS)
307*bf2c3715SXin Liendif ()
308*bf2c3715SXin Li
309*bf2c3715SXin Li# check that BLAS has been found
310*bf2c3715SXin Li# ---------------------------------
311*bf2c3715SXin Liinclude(FindPackageHandleStandardArgs)
312*bf2c3715SXin Liif(BLA_VENDOR MATCHES "Intel*")
313*bf2c3715SXin Li  if(BLA_VENDOR MATCHES "Intel10_64lp*")
314*bf2c3715SXin Li    if(NOT BLASEXT_FIND_QUIETLY)
315*bf2c3715SXin Li      message(STATUS "BLAS found is Intel MKL:"
316*bf2c3715SXin Li	"\n   we manage two lists of libs, one sequential and one parallel if found"
317*bf2c3715SXin Li	"\n   (see BLAS_SEQ_LIBRARIES and BLAS_PAR_LIBRARIES)")
318*bf2c3715SXin Li      message(STATUS "BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES")
319*bf2c3715SXin Li    endif()
320*bf2c3715SXin Li    find_package_handle_standard_args(BLASEXT DEFAULT_MSG
321*bf2c3715SXin Li      BLAS_SEQ_LIBRARIES
322*bf2c3715SXin Li      BLAS_LIBRARY_DIRS
323*bf2c3715SXin Li      BLAS_INCLUDE_DIRS)
324*bf2c3715SXin Li    if(BLAS_PAR_LIBRARIES)
325*bf2c3715SXin Li      if(NOT BLASEXT_FIND_QUIETLY)
326*bf2c3715SXin Li	message(STATUS "BLAS parallel libraries stored in BLAS_PAR_LIBRARIES")
327*bf2c3715SXin Li      endif()
328*bf2c3715SXin Li      find_package_handle_standard_args(BLASEXT DEFAULT_MSG
329*bf2c3715SXin Li	BLAS_PAR_LIBRARIES)
330*bf2c3715SXin Li    endif()
331*bf2c3715SXin Li  else()
332*bf2c3715SXin Li    if(NOT BLASEXT_FIND_QUIETLY)
333*bf2c3715SXin Li      message(STATUS "BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES")
334*bf2c3715SXin Li    endif()
335*bf2c3715SXin Li    find_package_handle_standard_args(BLASEXT DEFAULT_MSG
336*bf2c3715SXin Li      BLAS_SEQ_LIBRARIES
337*bf2c3715SXin Li      BLAS_LIBRARY_DIRS
338*bf2c3715SXin Li      BLAS_INCLUDE_DIRS)
339*bf2c3715SXin Li  endif()
340*bf2c3715SXin Lielseif(BLA_VENDOR MATCHES "ACML*")
341*bf2c3715SXin Li  if(NOT BLASEXT_FIND_QUIETLY)
342*bf2c3715SXin Li    message(STATUS "BLAS found is ACML:"
343*bf2c3715SXin Li      "\n   we manage two lists of libs, one sequential and one parallel if found"
344*bf2c3715SXin Li      "\n   (see BLAS_SEQ_LIBRARIES and BLAS_PAR_LIBRARIES)")
345*bf2c3715SXin Li    message(STATUS "BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES")
346*bf2c3715SXin Li  endif()
347*bf2c3715SXin Li  find_package_handle_standard_args(BLASEXT DEFAULT_MSG
348*bf2c3715SXin Li    BLAS_SEQ_LIBRARIES
349*bf2c3715SXin Li    BLAS_LIBRARY_DIRS)
350*bf2c3715SXin Li  if(BLAS_PAR_LIBRARIES)
351*bf2c3715SXin Li    if(NOT BLASEXT_FIND_QUIETLY)
352*bf2c3715SXin Li      message(STATUS "BLAS parallel libraries stored in BLAS_PAR_LIBRARIES")
353*bf2c3715SXin Li    endif()
354*bf2c3715SXin Li    find_package_handle_standard_args(BLASEXT DEFAULT_MSG
355*bf2c3715SXin Li      BLAS_PAR_LIBRARIES)
356*bf2c3715SXin Li  endif()
357*bf2c3715SXin Lielseif(BLA_VENDOR MATCHES "IBMESSL*")
358*bf2c3715SXin Li  if(NOT BLASEXT_FIND_QUIETLY)
359*bf2c3715SXin Li    message(STATUS "BLAS found is ESSL:"
360*bf2c3715SXin Li      "\n   we manage two lists of libs, one sequential and one parallel if found"
361*bf2c3715SXin Li      "\n   (see BLAS_SEQ_LIBRARIES and BLAS_PAR_LIBRARIES)")
362*bf2c3715SXin Li    message(STATUS "BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES")
363*bf2c3715SXin Li  endif()
364*bf2c3715SXin Li  find_package_handle_standard_args(BLASEXT DEFAULT_MSG
365*bf2c3715SXin Li    BLAS_SEQ_LIBRARIES
366*bf2c3715SXin Li    BLAS_LIBRARY_DIRS)
367*bf2c3715SXin Li  if(BLAS_PAR_LIBRARIES)
368*bf2c3715SXin Li    if(NOT BLASEXT_FIND_QUIETLY)
369*bf2c3715SXin Li      message(STATUS "BLAS parallel libraries stored in BLAS_PAR_LIBRARIES")
370*bf2c3715SXin Li    endif()
371*bf2c3715SXin Li    find_package_handle_standard_args(BLASEXT DEFAULT_MSG
372*bf2c3715SXin Li      BLAS_PAR_LIBRARIES)
373*bf2c3715SXin Li  endif()
374*bf2c3715SXin Lielse()
375*bf2c3715SXin Li  if(NOT BLASEXT_FIND_QUIETLY)
376*bf2c3715SXin Li    message(STATUS "BLAS sequential libraries stored in BLAS_SEQ_LIBRARIES")
377*bf2c3715SXin Li  endif()
378*bf2c3715SXin Li  find_package_handle_standard_args(BLASEXT DEFAULT_MSG
379*bf2c3715SXin Li    BLAS_SEQ_LIBRARIES
380*bf2c3715SXin Li    BLAS_LIBRARY_DIRS)
381*bf2c3715SXin Liendif()
382*bf2c3715SXin Li
383*bf2c3715SXin Li# Callers expect BLAS_FOUND to be set as well.
384*bf2c3715SXin Liset(BLAS_FOUND BLASEXT_FOUND)
385