Skip to content

Commit

Permalink
static MKL detection and linkage fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
soumith committed Jul 19, 2017
1 parent 3e9e141 commit 1aba999
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
8 changes: 7 additions & 1 deletion lib/TH/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,13 @@ ENDIF()
FIND_PACKAGE(BLAS)
IF(BLAS_FOUND)
SET(USE_BLAS 1)
TARGET_LINK_LIBRARIES(TH ${BLAS_LIBRARIES})
IF ($ENV{TH_BINARY_BUILD})
MESSAGE(STATUS "TH_BINARY_BUILD detected. Enabling special linkage.")
TARGET_LINK_LIBRARIES(TH "${BLAS_LIBRARIES};${BLAS_LIBRARIES};${BLAS_LIBRARIES}")
ELSE ($ENV{TH_BINARY_BUILD})
TARGET_LINK_LIBRARIES(TH ${BLAS_LIBRARIES})
ENDIF ($ENV{TH_BINARY_BUILD})

IF(BLAS_INFO STREQUAL "mkl")
ADD_DEFINITIONS(-DTH_BLAS_MKL)
ENDIF()
Expand Down
27 changes: 20 additions & 7 deletions lib/TH/cmake/FindMKL.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ ENDIF ("${SIZE_OF_VOIDP}" EQUAL 8)
IF(CMAKE_COMPILER_IS_GNUCC)
SET(mklthreads "mkl_gnu_thread" "mkl_intel_thread")
SET(mklifaces "gf" "intel")
SET(mklrtls "iomp5")
SET(mklrtls "gomp" "iomp5")
ELSE(CMAKE_COMPILER_IS_GNUCC)
SET(mklthreads "mkl_intel_thread")
SET(mklifaces "intel")
Expand Down Expand Up @@ -92,7 +92,7 @@ ENDIF (INTEL_MKL_DIR)
# Try linking multiple libs
MACRO(CHECK_ALL_LIBRARIES LIBRARIES _name _list _flags)
# This macro checks for the existence of the combination of libraries given by _list.
# If the combination is found, this macro whether we can link against that library
# If the combination is found, this macro checks whether we can link against that library
# combination using the name of a routine given by _name using the linker
# flags given by _flags. If the combination of libraries is found and passes
# the link test, LIBRARIES is set to the list of complete library paths that
Expand All @@ -116,8 +116,15 @@ MACRO(CHECK_ALL_LIBRARIES LIBRARIES _name _list _flags)
message(STATUS "Checking for [${__list}]")
FOREACH(_library ${_list})
SET(_combined_name ${_combined_name}_${_library})
IF(_libraries_work)
FIND_LIBRARY(${_prefix}_${_library}_LIBRARY NAMES ${_library})
IF(_libraries_work)
IF(${_library} STREQUAL "gomp")
FIND_PACKAGE(OpenMP)
IF(OPENMP_FOUND)
SET(${_prefix}_${_library}_LIBRARY ${OpenMP_C_FLAGS})
ENDIF(OPENMP_FOUND)
ELSE(${_library} STREQUAL "gomp")
FIND_LIBRARY(${_prefix}_${_library}_LIBRARY NAMES ${_library})
ENDIF(${_library} STREQUAL "gomp")
MARK_AS_ADVANCED(${_prefix}_${_library}_LIBRARY)
SET(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
SET(_libraries_work ${${_prefix}_${_library}_LIBRARY})
Expand All @@ -131,6 +138,7 @@ MACRO(CHECK_ALL_LIBRARIES LIBRARIES _name _list _flags)
# Test this combination of libraries.
IF(_libraries_work)
SET(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}})
SET(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}")
CHECK_FUNCTION_EXISTS(${_name} ${_prefix}${_combined_name}_WORKS)
SET(CMAKE_REQUIRED_LIBRARIES)
MARK_AS_ADVANCED(${_prefix}${_combined_name}_WORKS)
Expand All @@ -150,6 +158,11 @@ else(WIN32)
set(mkl_m "m")
endif(WIN32)

if(UNIX AND NOT APPLE)
set(mkl_dl "${CMAKE_DL_LIBS}")
else(UNIX AND NOT APPLE)
set(mkl_dl "")
endif(UNIX AND NOT APPLE)

# Check for version 10/11
IF (NOT MKL_LIBRARIES)
Expand All @@ -161,7 +174,7 @@ FOREACH(mklrtl ${mklrtls} "")
FOREACH(mklthread ${mklthreads})
IF (NOT MKL_LIBRARIES AND NOT INTEL_MKL_SEQUENTIAL)
CHECK_ALL_LIBRARIES(MKL_LIBRARIES cblas_sgemm
"mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m}" "")
"mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m};${mkl_dl}" "")
ENDIF (NOT MKL_LIBRARIES AND NOT INTEL_MKL_SEQUENTIAL)
ENDFOREACH(mklthread)
ENDFOREACH(mkl64)
Expand All @@ -172,7 +185,7 @@ FOREACH(mklrtl ${mklrtls} "")
FOREACH(mkl64 ${mkl64s} "")
IF (NOT MKL_LIBRARIES)
CHECK_ALL_LIBRARIES(MKL_LIBRARIES cblas_sgemm
"mkl_${mkliface}${mkl64};mkl_sequential;mkl_core;${mkl_m}" "")
"mkl_${mkliface}${mkl64};mkl_sequential;mkl_core;${mkl_m};${mkl_dl}" "")
IF (MKL_LIBRARIES)
SET(mklseq "_sequential")
ENDIF (MKL_LIBRARIES)
Expand All @@ -186,7 +199,7 @@ FOREACH(mklrtl ${mklrtls} "")
FOREACH(mklthread ${mklthreads})
IF (NOT MKL_LIBRARIES)
CHECK_ALL_LIBRARIES(MKL_LIBRARIES cblas_sgemm
"mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m}" "")
"mkl_${mkliface}${mkl64};${mklthread};mkl_core;${mklrtl};pthread;${mkl_m};${mkl_dl}" "")
ENDIF (NOT MKL_LIBRARIES)
ENDFOREACH(mklthread)
ENDFOREACH(mkl64)
Expand Down

0 comments on commit 1aba999

Please sign in to comment.