|
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}") |
|
|
|
ggml_add_backend_library(ggml-blas |
|
ggml-blas.cpp |
|
) |
|
|
|
if (${GGML_BLAS_VENDOR} MATCHES "Apple") |
|
add_compile_definitions(ACCELERATE_NEW_LAPACK) |
|
add_compile_definitions(ACCELERATE_LAPACK_ILP64) |
|
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}") |
|
|
|
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() |
|
|