mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2025-07-27 11:43:35 -04:00
cmake : fix usage issues (ggml/1257)
* CMake config: Create target only once Fix error on repeated find_package(ggml). For simplicity, check only for the top-level ggml::ggml. * CMake config: Add CUDA link libs * CMake config: Add OpenCL link libs * CMake config: Use canonical find_dependency Use set and append to control link lib variables. Apply more $<LINK_ONLY...>. * CMake config: Wire OpenMP dependency
This commit is contained in:
committed by
Georgi Gerganov
parent
5592f278b6
commit
60f816a79d
@ -1,12 +1,108 @@
|
|||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
@GGML_VARIABLES_EXPANDED@
|
@GGML_VARIABLES_EXPANDED@
|
||||||
|
|
||||||
@PACKAGE_INIT@
|
# Find all dependencies before creating any target.
|
||||||
|
include(CMakeFindDependencyMacro)
|
||||||
|
find_dependency(Threads)
|
||||||
|
if (NOT GGML_SHARED_LIB)
|
||||||
|
set(GGML_CPU_INTERFACE_LINK_LIBRARIES "")
|
||||||
|
set(GGML_CPU_INTERFACE_LINK_OPTIONS "")
|
||||||
|
|
||||||
|
if (APPLE AND GGML_ACCELERATE)
|
||||||
|
find_library(ACCELERATE_FRAMEWORK Accelerate)
|
||||||
|
if(NOT ACCELERATE_FRAMEWORK)
|
||||||
|
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${ACCELERATE_FRAMEWORK})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_OPENMP_ENABLED)
|
||||||
|
find_dependency(OpenMP)
|
||||||
|
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_CPU_HBM)
|
||||||
|
find_library(memkind memkind)
|
||||||
|
if(NOT memkind)
|
||||||
|
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES memkind)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_BLAS)
|
||||||
|
find_dependency(BLAS)
|
||||||
|
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES})
|
||||||
|
list(APPEND GGML_CPU_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_CUDA)
|
||||||
|
set(GGML_CUDA_INTERFACE_LINK_LIBRARIES "")
|
||||||
|
find_dependency(CUDAToolkit)
|
||||||
|
if (GGML_STATIC)
|
||||||
|
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cudart_static>)
|
||||||
|
if (WIN32)
|
||||||
|
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cublas> $<LINK_ONLY:CUDA::cublasLt>)
|
||||||
|
else()
|
||||||
|
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cublas_static> $<LINK_ONLY:CUDA::cublasLt_static>)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (NOT GGML_CUDA_NO_VMM)
|
||||||
|
list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cuda_driver>)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_METAL)
|
||||||
|
find_library(FOUNDATION_LIBRARY Foundation)
|
||||||
|
find_library(METAL_FRAMEWORK Metal)
|
||||||
|
find_library(METALKIT_FRAMEWORK MetalKit)
|
||||||
|
if(NOT FOUNDATION_LIBRARY OR NOT METAL_FRAMEWORK OR NOT METALKIT_FRAMEWORK)
|
||||||
|
set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(GGML_METAL_INTERFACE_LINK_LIBRARIES
|
||||||
|
${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_OPENCL)
|
||||||
|
find_dependency(OpenCL)
|
||||||
|
set(GGML_OPENCL_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:OpenCL::OpenCL>)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_VULKAN)
|
||||||
|
find_dependency(Vulkan)
|
||||||
|
set(GGML_VULKAN_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:Vulkan::Vulkan>)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_HIP)
|
||||||
|
find_dependency(hip)
|
||||||
|
find_dependency(hipblas)
|
||||||
|
find_dependency(rocblas)
|
||||||
|
set(GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GGML_SYCL)
|
||||||
|
set(GGML_SYCL_INTERFACE_LINK_LIBRARIES "")
|
||||||
|
find_package(DNNL)
|
||||||
|
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
|
||||||
|
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES DNNL::dnnl)
|
||||||
|
endif()
|
||||||
|
if (WIN32)
|
||||||
|
find_dependency(IntelSYCL)
|
||||||
|
find_dependency(MKL)
|
||||||
|
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@")
|
set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@")
|
||||||
set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@")
|
set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@")
|
||||||
#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@")
|
#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@")
|
||||||
|
|
||||||
|
if(NOT TARGET ggml::ggml)
|
||||||
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_library(GGML_LIBRARY ggml
|
find_library(GGML_LIBRARY ggml
|
||||||
@ -29,66 +125,6 @@ set_target_properties(ggml::ggml-base
|
|||||||
PROPERTIES
|
PROPERTIES
|
||||||
IMPORTED_LOCATION "${GGML_BASE_LIBRARY}")
|
IMPORTED_LOCATION "${GGML_BASE_LIBRARY}")
|
||||||
|
|
||||||
if (NOT GGML_SHARED_LIB)
|
|
||||||
if (APPLE AND GGML_ACCELERATE)
|
|
||||||
find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED)
|
|
||||||
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${ACCELERATE_FRAMEWORK})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_OPENMP)
|
|
||||||
find_package(OpenMP REQUIRED)
|
|
||||||
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_CPU_HBM)
|
|
||||||
find_library(memkind memkind REQUIRED)
|
|
||||||
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES memkind)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_BLAS)
|
|
||||||
find_package(BLAS REQUIRED)
|
|
||||||
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES})
|
|
||||||
list(APPEND GGML_CPU_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_CUDA)
|
|
||||||
find_package(CUDAToolkit REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_METAL)
|
|
||||||
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
|
||||||
find_library(METAL_FRAMEWORK Metal REQUIRED)
|
|
||||||
find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
|
|
||||||
|
|
||||||
list(APPEND GGML_METAL_INTERFACE_LINK_LIBRARIES
|
|
||||||
${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_VULKAN)
|
|
||||||
find_package(Vulkan REQUIRED)
|
|
||||||
list(APPEND GGML_VULKAN_INTERFACE_LINK_LIBRARIES Vulkan::Vulkan)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_HIP)
|
|
||||||
find_package(hip REQUIRED)
|
|
||||||
find_package(hipblas REQUIRED)
|
|
||||||
find_package(rocblas REQUIRED)
|
|
||||||
list(APPEND GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GGML_SYCL)
|
|
||||||
find_package(DNNL)
|
|
||||||
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
|
|
||||||
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES DNNL::dnnl)
|
|
||||||
endif()
|
|
||||||
if (WIN32)
|
|
||||||
find_package(IntelSYCL REQUIRED)
|
|
||||||
find_package(MKL REQUIRED)
|
|
||||||
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(_ggml_all_targets "")
|
set(_ggml_all_targets "")
|
||||||
foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS})
|
foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS})
|
||||||
string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}")
|
string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}")
|
||||||
@ -149,4 +185,6 @@ set_target_properties(ggml::all
|
|||||||
PROPERTIES
|
PROPERTIES
|
||||||
INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}")
|
INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}")
|
||||||
|
|
||||||
|
endif() # TARGET ggml::ggml
|
||||||
|
|
||||||
check_required_components(ggml)
|
check_required_components(ggml)
|
||||||
|
@ -70,10 +70,12 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|||||||
if (GGML_OPENMP)
|
if (GGML_OPENMP)
|
||||||
find_package(OpenMP)
|
find_package(OpenMP)
|
||||||
if (OpenMP_FOUND)
|
if (OpenMP_FOUND)
|
||||||
|
set(GGML_OPENMP_ENABLED "ON" CACHE INTERNAL "")
|
||||||
target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_OPENMP)
|
target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_OPENMP)
|
||||||
|
|
||||||
target_link_libraries(${GGML_CPU_NAME} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
|
target_link_libraries(${GGML_CPU_NAME} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
|
||||||
else()
|
else()
|
||||||
|
set(GGML_OPENMP_ENABLED "OFF" CACHE INTERNAL "")
|
||||||
message(WARNING "OpenMP not found")
|
message(WARNING "OpenMP not found")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
Reference in New Issue
Block a user