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