Browse Source

FindBLAS: Fixes for Windows MKL support

Leszek Swirski 12 years ago
parent
commit
46c7bcaf96
1 changed files with 86 additions and 12 deletions
  1. 86 12
      Modules/FindBLAS.cmake

+ 86 - 12
Modules/FindBLAS.cmake

@@ -469,8 +469,45 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
     set(BLAS_mkl_SEARCH_SYMBOL SGEMM)
     set(_LIBRARIES BLAS95_LIBRARIES)
     if (WIN32)
-      list(APPEND BLAS_SEARCH_LIBS
-        "mkl_blas95 mkl_intel_c mkl_intel_thread mkl_core libguide40")
+      if (BLA_STATIC)
+        set(BLAS_mkl_DLL_SUFFIX "")
+      else()
+        set(BLAS_mkl_DLL_SUFFIX "_dll")
+      endif()
+
+      # Find the main file (32-bit or 64-bit)
+      set(BLAS_SEARCH_LIBS_WIN_MAIN "")
+      if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+          "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
+      endif()
+      if (BLA_VENDOR STREQUAL "Intel10_64lp*" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+          "mkl_blas95_lp64${BLAS_mkl_DLL_SUFFIX} mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
+      endif ()
+
+      # Add threading/sequential libs
+      set(BLAS_SEARCH_LIBS_WIN_THREAD "")
+      if (BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+          "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
+      endif()
+      if (NOT BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
+        # old version
+        list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+          "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+        # mkl >= 10.3
+        list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+          "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+      endif()
+
+      # Cartesian product of the above
+      foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
+        foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
+          list(APPEND BLAS_SEARCH_LIBS
+            "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
+        endforeach()
+      endforeach()
     else ()
       if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
         list(APPEND BLAS_SEARCH_LIBS
@@ -490,17 +527,54 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
             "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core iomp5")
         endif ()
       endif ()
-    endif ()
-    if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
-      list(APPEND BLAS_SEARCH_LIBS
-        "mkl_blas95_lp64 mkl_intel_lp64 mkl_sequential mkl_core")
+      if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS
+          "mkl_intel_lp64 mkl_sequential mkl_core")
+      endif ()
     endif ()
   else ()
     set(BLAS_mkl_SEARCH_SYMBOL sgemm)
     set(_LIBRARIES BLAS_LIBRARIES)
     if (WIN32)
-      list(APPEND BLAS_SEARCH_LIBS
-        "mkl_c_dll mkl_intel_thread_dll mkl_core_dll libguide40")
+      if (BLA_STATIC)
+        set(BLAS_mkl_DLL_SUFFIX "")
+      else()
+        set(BLAS_mkl_DLL_SUFFIX "_dll")
+      endif()
+
+      # Find the main file (32-bit or 64-bit)
+      set(BLAS_SEARCH_LIBS_WIN_MAIN "")
+      if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+          "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
+      endif()
+      if (BLA_VENDOR STREQUAL "Intel10_64lp*" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+          "mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
+      endif ()
+
+      # Add threading/sequential libs
+      set(BLAS_SEARCH_LIBS_WIN_THREAD "")
+      if (NOT BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
+        # old version
+        list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+          "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+        # mkl >= 10.3
+        list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+          "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
+      endif()
+      if (BLA_VENDOR STREQUAL "*_seq" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+          "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
+      endif()
+
+      # Cartesian product of the above
+      foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
+        foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
+          list(APPEND BLAS_SEARCH_LIBS
+            "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
+        endforeach()
+      endforeach()
     else ()
       if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
         list(APPEND BLAS_SEARCH_LIBS
@@ -521,6 +595,10 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
             "mkl_intel_lp64 mkl_intel_thread mkl_core iomp5")
         endif ()
       endif ()
+      if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
+        list(APPEND BLAS_SEARCH_LIBS
+          "mkl_intel_lp64 mkl_sequential mkl_core")
+      endif ()
 
       #older vesions of intel mkl libs
       if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
@@ -532,10 +610,6 @@ if (BLA_VENDOR MATCHES "Intel*" OR BLA_VENDOR STREQUAL "All")
           "mkl_em64t")
       endif ()
     endif ()
-    if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
-      list(APPEND BLAS_SEARCH_LIBS
-        "mkl_intel_lp64 mkl_sequential mkl_core")
-    endif ()
   endif ()
 
   foreach (IT ${BLAS_SEARCH_LIBS})