2024-11-11 20:18:27 +00:00
|
|
|
if (GGML_STATIC)
|
|
|
|
set(BLA_STATIC ON)
|
|
|
|
endif()
|
|
|
|
#if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.22)
|
|
|
|
# set(BLA_SIZEOF_INTEGER 8)
|
|
|
|
#endif()
|
|
|
|
|
|
|
|
set(BLA_VENDOR ${GGML_BLAS_VENDOR})
|
|
|
|
find_package(BLAS)
|
|
|
|
|
|
|
|
if (BLAS_FOUND)
|
|
|
|
message(STATUS "BLAS found, Libraries: ${BLAS_LIBRARIES}")
|
|
|
|
|
|
|
|
add_library(ggml-blas
|
|
|
|
ggml-blas.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
target_link_libraries(ggml-blas PRIVATE ggml-base)
|
|
|
|
target_include_directories(ggml-blas PRIVATE . ..)
|
|
|
|
|
|
|
|
if (${GGML_BLAS_VENDOR} MATCHES "Apple")
|
2024-11-11 22:44:27 +00:00
|
|
|
add_compile_definitions(ACCELERATE_NEW_LAPACK)
|
|
|
|
add_compile_definitions(ACCELERATE_LAPACK_ILP64)
|
2024-11-11 20:18:27 +00:00
|
|
|
add_compile_definitions(GGML_BLAS_USE_ACCELERATE)
|
|
|
|
elseif ("${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 (${GGML_BLAS_VENDOR} MATCHES "Generic")
|
|
|
|
pkg_check_modules(DepBLAS blas)
|
|
|
|
elseif (${GGML_BLAS_VENDOR} MATCHES "OpenBLAS")
|
|
|
|
# As of openblas v0.3.22, the 64-bit is named openblas64.pc
|
|
|
|
pkg_check_modules(DepBLAS openblas64)
|
|
|
|
if (NOT DepBLAS_FOUND)
|
|
|
|
pkg_check_modules(DepBLAS openblas)
|
|
|
|
endif()
|
|
|
|
elseif (${GGML_BLAS_VENDOR} MATCHES "FLAME")
|
|
|
|
add_compile_definitions(GGML_BLAS_USE_BLIS)
|
|
|
|
pkg_check_modules(DepBLAS blis)
|
|
|
|
elseif (${GGML_BLAS_VENDOR} MATCHES "ATLAS")
|
|
|
|
pkg_check_modules(DepBLAS blas-atlas)
|
|
|
|
elseif (${GGML_BLAS_VENDOR} MATCHES "FlexiBLAS")
|
|
|
|
pkg_check_modules(DepBLAS flexiblas_api)
|
|
|
|
elseif (${GGML_BLAS_VENDOR} MATCHES "Intel")
|
|
|
|
add_compile_definitions(GGML_BLAS_USE_MKL)
|
|
|
|
# all Intel* libraries share the same include path
|
|
|
|
pkg_check_modules(DepBLAS mkl-sdl)
|
|
|
|
elseif (${GGML_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})
|
|
|
|
target_compile_options(ggml-blas PRIVATE ${BLAS_LINKER_FLAGS})
|
|
|
|
|
|
|
|
if (${BLAS_INCLUDE_DIRS} MATCHES "mkl" AND (${GGML_BLAS_VENDOR} MATCHES "Generic" OR ${GGML_BLAS_VENDOR} MATCHES "Intel"))
|
|
|
|
add_compile_definitions(GGML_BLAS_USE_MKL)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
target_link_libraries (ggml-blas PRIVATE ${BLAS_LIBRARIES})
|
|
|
|
target_include_directories(ggml-blas PRIVATE ${BLAS_INCLUDE_DIRS})
|
|
|
|
else()
|
|
|
|
message(ERROR "BLAS not found, please refer to "
|
|
|
|
"https://cmake.org/cmake/help/latest/module/FindBLAS.html#blas-lapack-vendors"
|
|
|
|
" to set correct GGML_BLAS_VENDOR")
|
|
|
|
endif()
|