1
0
Эх сурвалжийг харах

FindBLAS: Make Intel MKL code block respect prior found BLAS libraries

All non-Intel BLAS library detection blocks have an if-statement
"if (NOT BLAS_LIBRARIES)" to ensure that if a BLAS library was
found we are not going to try and find another one. This causes
a problem when we have already found that we do not need to specify
a BLAS library, as the Intel MKL library takes precedence over
everything. Introducing the "if (NOT BLAS_LIBRARIES)" if-statement
fixes this problem.
Hubertus van Dam 7 жил өмнө
parent
commit
608de88f29
1 өөрчлөгдсөн 157 нэмэгдсэн , 155 устгасан
  1. 157 155
      Modules/FindBLAS.cmake

+ 157 - 155
Modules/FindBLAS.cmake

@@ -536,179 +536,181 @@ endif ()
 
 #BLAS in intel mkl 10 library? (em64t 64bit)
 if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
-  if (NOT WIN32)
-    set(LM "-lm")
-  endif ()
-  if (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
-    if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
-      find_package(Threads)
-    else()
-      find_package(Threads REQUIRED)
-    endif()
+  if (NOT BLAS_LIBRARIES)
+    if (NOT WIN32)
+      set(LM "-lm")
+    endif ()
+    if (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
+      if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
+        find_package(Threads)
+      else()
+        find_package(Threads REQUIRED)
+      endif()
 
-    set(BLAS_SEARCH_LIBS "")
-
-    if(BLA_F95)
-      set(BLAS_mkl_SEARCH_SYMBOL SGEMM)
-      set(_LIBRARIES BLAS95_LIBRARIES)
-      if (WIN32)
-        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 MATCHES "^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 ()
+      set(BLAS_SEARCH_LIBS "")
 
-        # Add threading/sequential libs
-        set(BLAS_SEARCH_LIBS_WIN_THREAD "")
-        if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All")
-          list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
-            "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
-        endif()
-        if (NOT BLA_VENDOR MATCHES "_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
-            "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide")
-        endif ()
-        if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
-          # old version
-          list(APPEND BLAS_SEARCH_LIBS
-            "mkl_blas95 mkl_intel_lp64 mkl_intel_thread mkl_core guide")
+      if(BLA_F95)
+        set(BLAS_mkl_SEARCH_SYMBOL SGEMM)
+        set(_LIBRARIES BLAS95_LIBRARIES)
+        if (WIN32)
+          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 MATCHES "^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 ()
 
-          # mkl >= 10.3
-          if (CMAKE_C_COMPILER MATCHES ".+gcc")
+          # Add threading/sequential libs
+          set(BLAS_SEARCH_LIBS_WIN_THREAD "")
+          if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
+              "mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
+          endif()
+          if (NOT BLA_VENDOR MATCHES "_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
-              "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core gomp")
-          else ()
+              "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide")
+          endif ()
+          if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
+            # old version
             list(APPEND BLAS_SEARCH_LIBS
-              "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core iomp5")
+              "mkl_blas95 mkl_intel_lp64 mkl_intel_thread mkl_core guide")
+
+            # mkl >= 10.3
+            if (CMAKE_C_COMPILER MATCHES ".+gcc")
+              list(APPEND BLAS_SEARCH_LIBS
+                "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core gomp")
+            else ()
+              list(APPEND BLAS_SEARCH_LIBS
+                "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_intel_lp64 mkl_sequential mkl_core")
-        endif ()
-      endif ()
-    else ()
-      set(BLAS_mkl_SEARCH_SYMBOL sgemm)
-      set(_LIBRARIES BLAS_LIBRARIES)
-      if (WIN32)
-        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 MATCHES "^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 MATCHES "_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 MATCHES "_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})
+          if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All")
             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
-            "mkl_intel mkl_intel_thread mkl_core guide")
+              "mkl_intel_lp64 mkl_sequential mkl_core")
+          endif ()
         endif ()
-        if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
+      else ()
+        set(BLAS_mkl_SEARCH_SYMBOL sgemm)
+        set(_LIBRARIES BLAS_LIBRARIES)
+        if (WIN32)
+          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 MATCHES "^Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
+              "mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}")
+          endif ()
 
-          # old version
-          list(APPEND BLAS_SEARCH_LIBS
-            "mkl_intel_lp64 mkl_intel_thread mkl_core guide")
+          # Add threading/sequential libs
+          set(BLAS_SEARCH_LIBS_WIN_THREAD "")
+          if (NOT BLA_VENDOR MATCHES "_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 MATCHES "_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
+              "mkl_intel mkl_intel_thread mkl_core guide")
+          endif ()
+          if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All")
 
-          # mkl >= 10.3
-          if (CMAKE_C_COMPILER MATCHES ".+gcc")
+            # old version
             list(APPEND BLAS_SEARCH_LIBS
-              "mkl_intel_lp64 mkl_gnu_thread mkl_core gomp")
-          else ()
+              "mkl_intel_lp64 mkl_intel_thread mkl_core guide")
+
+            # mkl >= 10.3
+            if (CMAKE_C_COMPILER MATCHES ".+gcc")
+              list(APPEND BLAS_SEARCH_LIBS
+                "mkl_intel_lp64 mkl_gnu_thread mkl_core gomp")
+            else ()
+              list(APPEND BLAS_SEARCH_LIBS
+                "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_intel_thread mkl_core iomp5")
+              "mkl_intel_lp64 mkl_sequential mkl_core")
           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")
-          list(APPEND BLAS_SEARCH_LIBS
-            "mkl")
-          list(APPEND BLAS_SEARCH_LIBS
-            "mkl_ia32")
-          list(APPEND BLAS_SEARCH_LIBS
-            "mkl_em64t")
+          #older vesions of intel mkl libs
+          if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl")
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_ia32")
+            list(APPEND BLAS_SEARCH_LIBS
+              "mkl_em64t")
+          endif ()
         endif ()
       endif ()
-    endif ()
 
-    foreach (IT ${BLAS_SEARCH_LIBS})
-      string(REPLACE " " ";" SEARCH_LIBS ${IT})
-      if (NOT ${_LIBRARIES})
-        check_fortran_libraries(
-          ${_LIBRARIES}
-          BLAS
-          ${BLAS_mkl_SEARCH_SYMBOL}
-          ""
-          "${SEARCH_LIBS}"
-          "${CMAKE_THREAD_LIBS_INIT};${LM}"
-          )
-      endif ()
-    endforeach ()
+      foreach (IT ${BLAS_SEARCH_LIBS})
+        string(REPLACE " " ";" SEARCH_LIBS ${IT})
+        if (NOT ${_LIBRARIES})
+          check_fortran_libraries(
+            ${_LIBRARIES}
+            BLAS
+            ${BLAS_mkl_SEARCH_SYMBOL}
+            ""
+            "${SEARCH_LIBS}"
+            "${CMAKE_THREAD_LIBS_INIT};${LM}"
+            )
+        endif ()
+      endforeach ()
 
+    endif ()
   endif ()
 endif ()