mirror of https://github.com/microsoft/vcpkg.git
217 lines
8.9 KiB
Diff
217 lines
8.9 KiB
Diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index 672b37df..c6f16c7c 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -352,7 +352,7 @@ if (GGML_STANDALONE)
|
|
@ONLY)
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc
|
|
- DESTINATION share/pkgconfig)
|
|
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
endif()
|
|
|
|
#
|
|
@@ -373,6 +373,7 @@ set(variable_set_statements
|
|
set(GGML_SHARED_LIB ${BUILD_SHARED_LIBS})
|
|
|
|
get_cmake_property(all_variables VARIABLES)
|
|
+list(FILTER all_variables EXCLUDE REGEX "^GGML_PKGCONFIG")
|
|
foreach(variable_name IN LISTS all_variables)
|
|
if(variable_name MATCHES "^GGML_")
|
|
string(REPLACE ";" "\\;"
|
|
diff --git a/ggml.pc.in b/ggml.pc.in
|
|
index 3e0291e0..a7627339 100644
|
|
--- a/ggml.pc.in
|
|
+++ b/ggml.pc.in
|
|
@@ -6,5 +6,7 @@ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
Name: ggml
|
|
Description: The GGML Tensor Library for Machine Learning
|
|
Version: @GGML_VERSION@
|
|
-Cflags: -I${includedir}
|
|
-Libs: -L${libdir} -lggml
|
|
+Cflags: -I${includedir} @GGML_PKGCONFIG_CFLAGS@
|
|
+Libs: -L${libdir} -lggml @GGML_PKGCONFIG_LIBS_BACKEND@ -lggml-base
|
|
+Libs.private: @GGML_PKGCONFIG_LIBS_PRIVATE@
|
|
+Requires.private: @GGML_PKGCONFIG_REQUIRES_PRIVATE@
|
|
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
index 3e48860b..1ec27e83 100644
|
|
--- a/src/CMakeLists.txt
|
|
+++ b/src/CMakeLists.txt
|
|
@@ -185,6 +185,10 @@ endif()
|
|
|
|
# ggml
|
|
|
|
+set(GGML_PKGCONFIG_CFLAGS "")
|
|
+set(GGML_PKGCONFIG_LIBS_BACKEND "")
|
|
+set(GGML_PKGCONFIG_LIBS_PRIVATE "")
|
|
+
|
|
if (GGML_BACKEND_DL AND NOT BUILD_SHARED_LIBS)
|
|
message(FATAL_ERROR "GGML_BACKEND_DL requires BUILD_SHARED_LIBS")
|
|
endif()
|
|
@@ -243,6 +247,7 @@ target_link_libraries(ggml PUBLIC ggml-base)
|
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
target_link_libraries(ggml PRIVATE dl)
|
|
+ string(APPEND GGML_PKGCONFIG_LIBS_PRIVATE " -ldl")
|
|
endif()
|
|
|
|
function(ggml_add_backend_library backend)
|
|
@@ -296,12 +301,20 @@ function(ggml_add_backend backend)
|
|
string(TOUPPER "GGML_${backend}" backend_id)
|
|
if (${backend_id})
|
|
string(TOLOWER "ggml-${backend}" backend_target)
|
|
+ if (NOT GGML_BACKEND_DL)
|
|
+ # Mirrors ggml_add_backend_library but avoids cmake scoping
|
|
+ set(GGML_PKGCONFIG_LIBS_BACKEND "${GGML_PKGCONFIG_LIBS_BACKEND} -l${backend_target}")
|
|
+ endif()
|
|
add_subdirectory(${backend_target})
|
|
message(STATUS "Including ${backend} backend")
|
|
if (NOT GGML_BACKEND_DL)
|
|
string(TOUPPER "GGML_USE_${backend}" backend_use)
|
|
target_compile_definitions(ggml PUBLIC ${backend_use})
|
|
+ set(GGML_PKGCONFIG_CFLAGS "${GGML_PKGCONFIG_CFLAGS} -D${backend_use}" PARENT_SCOPE)
|
|
endif()
|
|
+ set(GGML_PKGCONFIG_LIBS_BACKEND "${GGML_PKGCONFIG_LIBS_BACKEND}" PARENT_SCOPE)
|
|
+ set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE}" PARENT_SCOPE)
|
|
+ set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
@@ -474,10 +487,14 @@ if (DEFINED MATH_LIBRARY)
|
|
target_link_libraries(ggml-base PRIVATE ${MATH_LIBRARY})
|
|
elseif (NOT WIN32 AND NOT DEFINED ENV{ONEAPI_ROOT})
|
|
target_link_libraries(ggml-base PRIVATE m)
|
|
+ string(APPEND GGML_PKGCONFIG_LIBS_PRIVATE " -lm")
|
|
endif()
|
|
|
|
if (CMAKE_SYSTEM_NAME MATCHES "Android")
|
|
target_link_libraries(ggml-base PRIVATE dl)
|
|
+ if(NOT GGML_PKGCONFIG_LIBS_PRIVATE MATCHES " -ldl")
|
|
+ string(APPEND GGML_PKGCONFIG_LIBS_PRIVATE " -ldl")
|
|
+ endif()
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "visionOS")
|
|
@@ -489,5 +506,11 @@ if (BUILD_SHARED_LIBS)
|
|
set_target_properties(${target} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
target_compile_definitions(${target} PRIVATE GGML_BUILD)
|
|
target_compile_definitions(${target} PUBLIC GGML_SHARED)
|
|
+ string(APPEND GGML_PKGCONFIG_CFLAGS " -DGGML_SHARED -DGGML_BACKEND_SHARED")
|
|
endforeach()
|
|
endif()
|
|
+
|
|
+set(GGML_PKGCONFIG_CFLAGS "${GGML_PKGCONFIG_CFLAGS}" PARENT_SCOPE)
|
|
+set(GGML_PKGCONFIG_LIBS_BACKEND "${GGML_PKGCONFIG_LIBS_BACKEND}" PARENT_SCOPE)
|
|
+set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE}" PARENT_SCOPE)
|
|
+set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE}" PARENT_SCOPE)
|
|
diff --git a/src/ggml-blas/CMakeLists.txt b/src/ggml-blas/CMakeLists.txt
|
|
index c27dc174..ce1ab21d 100644
|
|
--- a/src/ggml-blas/CMakeLists.txt
|
|
+++ b/src/ggml-blas/CMakeLists.txt
|
|
@@ -93,6 +93,7 @@ if (BLAS_FOUND)
|
|
endif()
|
|
|
|
target_link_libraries (ggml-blas PRIVATE ${BLAS_LIBRARIES})
|
|
+ set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE} cblas" PARENT_SCOPE)
|
|
target_include_directories(ggml-blas SYSTEM PRIVATE ${BLAS_INCLUDE_DIRS})
|
|
else()
|
|
message(FATAL_ERROR "BLAS not found, please refer to "
|
|
diff --git a/src/ggml-cpu/CMakeLists.txt b/src/ggml-cpu/CMakeLists.txt
|
|
index 869c7b23..53a90f73 100644
|
|
--- a/src/ggml-cpu/CMakeLists.txt
|
|
+++ b/src/ggml-cpu/CMakeLists.txt
|
|
@@ -57,6 +57,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
target_compile_features(${GGML_CPU_NAME} PRIVATE c_std_11 cxx_std_17)
|
|
target_include_directories(${GGML_CPU_NAME} PRIVATE . ggml-cpu)
|
|
|
|
+ set(libs_private "")
|
|
+ set(pkgconfig_cflags "")
|
|
+
|
|
if (APPLE AND GGML_ACCELERATE)
|
|
find_library(ACCELERATE_FRAMEWORK Accelerate)
|
|
if (ACCELERATE_FRAMEWORK)
|
|
@@ -67,6 +70,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
target_compile_definitions(${GGML_CPU_NAME} PRIVATE ACCELERATE_LAPACK_ILP64)
|
|
|
|
target_link_libraries(${GGML_CPU_NAME} PRIVATE ${ACCELERATE_FRAMEWORK})
|
|
+ string(APPEND libs_private " -framework Accelerate")
|
|
else()
|
|
message(WARNING "Accelerate framework not found")
|
|
endif()
|
|
@@ -79,6 +83,18 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_OPENMP)
|
|
|
|
target_link_libraries(${GGML_CPU_NAME} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
|
|
+ set(items "")
|
|
+ foreach(lib IN LISTS OpenMP_CXX_LIB_NAMES OpenMP_C_LIB_NAMES)
|
|
+ list(REMOVE_ITEM items " -l${lib}")
|
|
+ list(APPEND items " -l${lib}")
|
|
+ endforeach()
|
|
+ string(APPEND libs_private ${items})
|
|
+ set(items "")
|
|
+ foreach(flag IN LISTS OpenMP_CXX_FLAGS OpenMP_C_FLAGS)
|
|
+ list(REMOVE_ITEM items " ${flag}")
|
|
+ list(APPEND items " ${flag}")
|
|
+ endforeach()
|
|
+ string(APPEND pkgconfig_cflags ${items})
|
|
else()
|
|
set(GGML_OPENMP_ENABLED "OFF" CACHE INTERNAL "")
|
|
message(WARNING "OpenMP not found")
|
|
@@ -101,8 +117,12 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
|
|
target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_CPU_HBM)
|
|
|
|
target_link_libraries(${GGML_CPU_NAME} PUBLIC memkind)
|
|
+ string(APPEND libs_private " -lmemkind")
|
|
endif()
|
|
|
|
+ set(GGML_PKGCONFIG_CFLAGS "${GGML_PKGCONFIG_CFLAGS}${pkgconfig_cflags}" PARENT_SCOPE)
|
|
+ set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE}${libs_private}" PARENT_SCOPE)
|
|
+
|
|
if (GGML_SYSTEM_ARCH STREQUAL "ARM")
|
|
message(STATUS "ARM detected")
|
|
list(APPEND GGML_CPU_SOURCES
|
|
diff --git a/src/ggml-metal/CMakeLists.txt b/src/ggml-metal/CMakeLists.txt
|
|
index 42054d84..d780361e 100644
|
|
--- a/src/ggml-metal/CMakeLists.txt
|
|
+++ b/src/ggml-metal/CMakeLists.txt
|
|
@@ -19,6 +19,11 @@ target_link_libraries(ggml-metal PRIVATE
|
|
${METALKIT_FRAMEWORK}
|
|
)
|
|
|
|
+set(GGML_PKGCONFIG_LIBS_PRIVATE
|
|
+ "${GGML_PKGCONFIG_LIBS_PRIVATE} -framework Foundation -framework Metal -framework MetalKit"
|
|
+ PARENT_SCOPE
|
|
+)
|
|
+
|
|
if (GGML_METAL_NDEBUG)
|
|
add_compile_definitions(GGML_METAL_NDEBUG)
|
|
endif()
|
|
diff --git a/src/ggml-opencl/CMakeLists.txt b/src/ggml-opencl/CMakeLists.txt
|
|
index ffde6a4f..9a7f9526 100644
|
|
--- a/src/ggml-opencl/CMakeLists.txt
|
|
+++ b/src/ggml-opencl/CMakeLists.txt
|
|
@@ -7,6 +7,7 @@ ggml_add_backend_library(${TARGET_NAME}
|
|
ggml-opencl.cpp
|
|
../../include/ggml-opencl.h)
|
|
target_link_libraries(${TARGET_NAME} PRIVATE ${OpenCL_LIBRARIES})
|
|
+set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE} OpenCL" PARENT_SCOPE)
|
|
target_include_directories(${TARGET_NAME} PRIVATE ${OpenCL_INCLUDE_DIRS})
|
|
|
|
if (GGML_OPENCL_PROFILING)
|
|
diff --git a/src/ggml-vulkan/CMakeLists.txt b/src/ggml-vulkan/CMakeLists.txt
|
|
index 715a263a..04c142c2 100644
|
|
--- a/src/ggml-vulkan/CMakeLists.txt
|
|
+++ b/src/ggml-vulkan/CMakeLists.txt
|
|
@@ -87,6 +87,11 @@ if (Vulkan_FOUND)
|
|
)
|
|
|
|
target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan)
|
|
+ if(ANDROID)
|
|
+ set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE} -lvulkan" PARENT_SCOPE)
|
|
+ else()
|
|
+ set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE} vulkan" PARENT_SCOPE)
|
|
+ endif()
|
|
target_include_directories(ggml-vulkan PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
# Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build
|