aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZenix <zenixls2@gmail.com>2023-06-17 03:53:04 +0900
committerGitHub <noreply@github.com>2023-06-16 21:53:04 +0300
commit13fe9d2d84f30cab613c960bf66ac83916006694 (patch)
tree974cb147e4576561a9374be1d4b20e99f5ae88ad
parentac3b8869538c7fbdb48ff141d78c4dea091789f0 (diff)
cmake : add auto detection of BLAS_INCLUDE_DIRS (#1886)
-rw-r--r--CMakeLists.txt56
1 files changed, 46 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dbbc0b5..935fba8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -159,23 +159,59 @@ if (LLAMA_BLAS)
if ($(CMAKE_VERSION) VERSION_GREATER_EQUAL 3.22)
set(BLA_SIZEOF_INTEGER 8)
endif()
+
set(BLA_VENDOR ${LLAMA_BLAS_VENDOR})
find_package(BLAS)
+
if (BLAS_FOUND)
message(STATUS "BLAS found, Libraries: ${BLAS_LIBRARIES}")
- # BLAS_INCLUDE_DIRS is missing in FindBLAS.cmake.
- # see https://gitlab.kitware.com/cmake/cmake/-/issues/20268
- find_path(BLAS_INCLUDE_DIRS
- NAMES cblas.h
- HINTS
- /usr/include
- /usr/local/include
- /usr/include/openblas
- )
+ if ("${BLAS_INCLUDE_DIRS}" STREQUAL "")
+ # BLAS_INCLUDE_DIRS is missing in FindBLAS.cmake.
+ # see https://gitlab.kitware.com/cmake/cmake/-/issues/20268
+ find_package(PkgConfig REQUIRED)
+ if (${LLAMA_BLAS_VENDOR} MATCHES "Generic")
+ pkg_check_modules(DepBLAS REQUIRED blas)
+ elseif (${LLAMA_BLAS_VENDOR} MATCHES "OpenBLAS")
+ pkg_check_modules(DepBLAS REQUIRED openblas)
+ elseif (${LLAMA_BLAS_VENDOR} MATCHES "FLAME")
+ pkg_check_modules(DepBLAS REQUIRED blis)
+ elseif (${LLAMA_BLAS_VENDOR} MATCHES "ATLAS")
+ pkg_check_modules(DepBLAS REQUIRED blas-atlas)
+ elseif (${LLAMA_BLAS_VENDOR} MATCHES "FlexiBLAS")
+ pkg_check_modules(DepBLAS REQUIRED flexiblas_api)
+ elseif (${LLAMA_BLAS_VENDOR} MATCHES "Intel")
+ # all Intel* libraries share the same include path
+ pkg_check_modules(DepBLAS REQUIRED mkl-sdl)
+ elseif (${LLAMA_BLAS_VENDOR} MATCHES "NVHPC")
+ # this doesn't provide pkg-config
+ # suggest to assign BLAS_INCLUDE_DIRS on your own
+ if ("${NVHPC_VERSION}" STREQUAL "")
+ message(WARNING "Better to set NVHPC_VERSION")
+ else()
+ set(DepBLAS_FOUND ON)
+ set(DepBLAS_INCLUDE_DIRS "/opt/nvidia/hpc_sdk/${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}/${NVHPC_VERSION}/math_libs/include")
+ endif()
+ endif()
+ if (DepBLAS_FOUND)
+ set(BLAS_INCLUDE_DIRS ${DepBLAS_INCLUDE_DIRS})
+ else()
+ message(WARNING "BLAS_INCLUDE_DIRS neither been provided nor been automatically"
+ " detected by pkgconfig, trying to find cblas.h from possible paths...")
+ find_path(BLAS_INCLUDE_DIRS
+ NAMES cblas.h
+ HINTS
+ /usr/include
+ /usr/local/include
+ /usr/include/openblas
+ /opt/homebrew/opt/openblas/include
+ /usr/local/opt/openblas/include
+ /usr/include/x86_64-linux-gnu/openblas/include
+ )
+ endif()
+ endif()
message(STATUS "BLAS found, Includes: ${BLAS_INCLUDE_DIRS}")
-
add_compile_options(${BLAS_LINKER_FLAGS})
add_compile_definitions(GGML_USE_OPENBLAS)
set(LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ${BLAS_LIBRARIES})