mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-20 05:12:07 -05:00
Find{BLAS,LAPACK}: Added support for static MKL required linker flags
This commit is contained in:
@@ -160,45 +160,46 @@ macro(CHECK_BLAS_LIBRARIES LIBRARIES _prefix _name _flags _list _threadlibs _add
|
|||||||
list(APPEND _addlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
|
list(APPEND _addlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
|
||||||
|
|
||||||
foreach(_library ${_list})
|
foreach(_library ${_list})
|
||||||
set(_combined_name ${_combined_name}_${_library})
|
if(_library MATCHES "^-Wl,--(start|end)-group$")
|
||||||
if(NOT "${_threadlibs}" STREQUAL "")
|
# Respect linker flags like --start/end-group (required by MKL)
|
||||||
set(_combined_name ${_combined_name}_threadlibs)
|
set(${LIBRARIES} ${${LIBRARIES}} "${_library}")
|
||||||
endif()
|
else()
|
||||||
if(_libraries_work)
|
set(_combined_name ${_combined_name}_${_library})
|
||||||
if(BLA_STATIC)
|
if(NOT "${_threadlibs}" STREQUAL "")
|
||||||
if(WIN32)
|
set(_combined_name ${_combined_name}_threadlibs)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
endif()
|
||||||
endif()
|
if(_libraries_work)
|
||||||
if(APPLE)
|
if(BLA_STATIC)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
if(WIN32)
|
||||||
else()
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
endif()
|
||||||
endif()
|
if(APPLE)
|
||||||
else()
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
else()
|
||||||
# for ubuntu's libblas3gf and liblapack3gf packages
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
|
endif()
|
||||||
endif()
|
else()
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
# for ubuntu's libblas3gf and liblapack3gf packages
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
find_library(${_prefix}_${_library}_LIBRARY
|
||||||
|
NAMES ${_library}
|
||||||
|
PATHS ${_addlibdir}
|
||||||
|
PATH_SUFFIXES ${_subdirs}
|
||||||
|
)
|
||||||
|
#message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}")
|
||||||
|
mark_as_advanced(${_prefix}_${_library}_LIBRARY)
|
||||||
|
set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
|
||||||
|
set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
find_library(${_prefix}_${_library}_LIBRARY
|
|
||||||
NAMES ${_library}
|
|
||||||
PATHS ${_addlibdir}
|
|
||||||
PATH_SUFFIXES ${_subdirs}
|
|
||||||
)
|
|
||||||
#message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}")
|
|
||||||
mark_as_advanced(${_prefix}_${_library}_LIBRARY)
|
|
||||||
set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
|
|
||||||
set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
|
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if(_libraries_work)
|
if(_libraries_work)
|
||||||
# Test this combination of libraries.
|
# Test this combination of libraries.
|
||||||
if(UNIX AND BLA_STATIC)
|
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_threadlibs})
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group" ${${LIBRARIES}} "-Wl,--end-group" ${_threadlibs})
|
|
||||||
else()
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_threadlibs})
|
|
||||||
endif()
|
|
||||||
#message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
|
#message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
if(CMAKE_Fortran_COMPILER_LOADED)
|
if(CMAKE_Fortran_COMPILER_LOADED)
|
||||||
check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
|
check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
|
||||||
@@ -260,6 +261,13 @@ if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
|||||||
set(BLAS_mkl_DLL_SUFFIX "_dll")
|
set(BLAS_mkl_DLL_SUFFIX "_dll")
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
|
if(BLA_STATIC)
|
||||||
|
set(BLAS_mkl_START_GROUP "-Wl,--start-group")
|
||||||
|
set(BLAS_mkl_END_GROUP "-Wl,--end-group")
|
||||||
|
else()
|
||||||
|
set(BLAS_mkl_START_GROUP "")
|
||||||
|
set(BLAS_mkl_END_GROUP "")
|
||||||
|
endif()
|
||||||
# Switch to GNU Fortran support layer if needed (but not on Apple, where MKL does not provide it)
|
# Switch to GNU Fortran support layer if needed (but not on Apple, where MKL does not provide it)
|
||||||
if(CMAKE_Fortran_COMPILER_LOADED AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
|
if(CMAKE_Fortran_COMPILER_LOADED AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
|
||||||
set(BLAS_mkl_INTFACE "gf")
|
set(BLAS_mkl_INTFACE "gf")
|
||||||
@@ -334,7 +342,7 @@ if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
|||||||
|
|
||||||
# mkl >= 10.3
|
# mkl >= 10.3
|
||||||
list(APPEND BLAS_SEARCH_LIBS
|
list(APPEND BLAS_SEARCH_LIBS
|
||||||
"mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
"${BLAS_mkl_START_GROUP} mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
|
||||||
endif()
|
endif()
|
||||||
if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
|
if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
|
||||||
# old version
|
# old version
|
||||||
@@ -343,11 +351,11 @@ if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
|||||||
|
|
||||||
# mkl >= 10.3
|
# mkl >= 10.3
|
||||||
list(APPEND BLAS_SEARCH_LIBS
|
list(APPEND BLAS_SEARCH_LIBS
|
||||||
"mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
"${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
|
||||||
endif()
|
endif()
|
||||||
if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
|
if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||||
list(APPEND BLAS_SEARCH_LIBS
|
list(APPEND BLAS_SEARCH_LIBS
|
||||||
"mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core")
|
"${BLAS_mkl_START_GROUP} mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
@@ -395,7 +403,7 @@ if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
|||||||
|
|
||||||
# mkl >= 10.3
|
# mkl >= 10.3
|
||||||
list(APPEND BLAS_SEARCH_LIBS
|
list(APPEND BLAS_SEARCH_LIBS
|
||||||
"mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
"${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
|
||||||
endif()
|
endif()
|
||||||
if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
|
if(BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
|
||||||
# old version
|
# old version
|
||||||
@@ -404,11 +412,11 @@ if(BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
|||||||
|
|
||||||
# mkl >= 10.3
|
# mkl >= 10.3
|
||||||
list(APPEND BLAS_SEARCH_LIBS
|
list(APPEND BLAS_SEARCH_LIBS
|
||||||
"mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
"${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_END_GROUP} ${BLAS_mkl_OMP}")
|
||||||
endif()
|
endif()
|
||||||
if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
|
if(BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||||
list(APPEND BLAS_SEARCH_LIBS
|
list(APPEND BLAS_SEARCH_LIBS
|
||||||
"mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core")
|
"${BLAS_mkl_START_GROUP} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core ${BLAS_mkl_END_GROUP}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#older vesions of intel mkl libs
|
#older vesions of intel mkl libs
|
||||||
|
|||||||
@@ -130,43 +130,43 @@ macro(CHECK_LAPACK_LIBRARIES LIBRARIES _prefix _name _flags _list _threadlibs _a
|
|||||||
list(APPEND _addlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
|
list(APPEND _addlibdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
|
||||||
|
|
||||||
foreach(_library ${_list})
|
foreach(_library ${_list})
|
||||||
set(_combined_name ${_combined_name}_${_library})
|
if(_library MATCHES "^-Wl,--(start|end)-group$")
|
||||||
|
# Respect linker flags like --start/end-group (required by MKL)
|
||||||
if(_libraries_work)
|
set(${LIBRARIES} ${${LIBRARIES}} "${_library}")
|
||||||
if(BLA_STATIC)
|
else()
|
||||||
if(WIN32)
|
set(_combined_name ${_combined_name}_${_library})
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
if(_libraries_work)
|
||||||
endif()
|
if(BLA_STATIC)
|
||||||
if(APPLE)
|
if(WIN32)
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
|
endif()
|
||||||
|
if(APPLE)
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
|
else()
|
||||||
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
endif()
|
# for ubuntu's libblas3gf and liblapack3gf packages
|
||||||
else()
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
endif()
|
||||||
# for ubuntu's libblas3gf and liblapack3gf packages
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
|
|
||||||
endif()
|
endif()
|
||||||
|
find_library(${_prefix}_${_library}_LIBRARY
|
||||||
|
NAMES ${_library}
|
||||||
|
PATHS ${_addlibdir}
|
||||||
|
PATH_SUFFIXES ${_subdirs}
|
||||||
|
)
|
||||||
|
#message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}")
|
||||||
|
mark_as_advanced(${_prefix}_${_library}_LIBRARY)
|
||||||
|
set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
|
||||||
|
set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
find_library(${_prefix}_${_library}_LIBRARY
|
|
||||||
NAMES ${_library}
|
|
||||||
PATHS ${_addlibdir}
|
|
||||||
PATH_SUFFIXES ${_subdirs}
|
|
||||||
)
|
|
||||||
#message("DEBUG: find_library(${_library}) got ${${_prefix}_${_library}_LIBRARY}")
|
|
||||||
mark_as_advanced(${_prefix}_${_library}_LIBRARY)
|
|
||||||
set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
|
|
||||||
set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
|
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if(_libraries_work)
|
if(_libraries_work)
|
||||||
# Test this combination of libraries.
|
# Test this combination of libraries.
|
||||||
if(UNIX AND BLA_STATIC)
|
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threadlibs})
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group" ${${LIBRARIES}} ${_blas} "-Wl,--end-group" ${_threadlibs})
|
|
||||||
else()
|
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threadlibs})
|
|
||||||
endif()
|
|
||||||
#message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
|
#message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
|
||||||
if(CMAKE_Fortran_COMPILER_LOADED)
|
if(CMAKE_Fortran_COMPILER_LOADED)
|
||||||
check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
|
check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
|
||||||
@@ -251,7 +251,7 @@ if(BLAS_FOUND)
|
|||||||
set(_LIBRARIES LAPACK_LIBRARIES)
|
set(_LIBRARIES LAPACK_LIBRARIES)
|
||||||
set(_BLAS_LIBRARIES ${BLAS_LIBRARIES})
|
set(_BLAS_LIBRARIES ${BLAS_LIBRARIES})
|
||||||
|
|
||||||
# old
|
# old and new >= 10.3
|
||||||
list(APPEND LAPACK_SEARCH_LIBS
|
list(APPEND LAPACK_SEARCH_LIBS
|
||||||
"mkl_lapack")
|
"mkl_lapack")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user