|
| 1 | +diff --git a/CMakeLists.txt b/CMakeLists.txt |
| 2 | +index 90e274cc..b20534f9 100644 |
| 3 | +--- a/CMakeLists.txt |
| 4 | ++++ b/CMakeLists.txt |
| 5 | +@@ -294,7 +294,7 @@ if (GGML_STANDALONE) |
| 6 | + @ONLY) |
| 7 | + |
| 8 | + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc |
| 9 | +- DESTINATION share/pkgconfig) |
| 10 | ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) |
| 11 | + endif() |
| 12 | + |
| 13 | + # |
| 14 | +@@ -335,6 +335,7 @@ set(variable_set_statements |
| 15 | + set(GGML_SHARED_LIB ${BUILD_SHARED_LIBS}) |
| 16 | + |
| 17 | + get_cmake_property(all_variables VARIABLES) |
| 18 | ++list(FILTER all_variables EXCLUDE REGEX "^GGML_PKGCONFIG") |
| 19 | + foreach(variable_name IN LISTS all_variables) |
| 20 | + if(variable_name MATCHES "^GGML_") |
| 21 | + string(REPLACE ";" "\\;" |
| 22 | +diff --git a/ggml.pc.in b/ggml.pc.in |
| 23 | +index 9be62dc3..a37b0478 100644 |
| 24 | +--- a/ggml.pc.in |
| 25 | ++++ b/ggml.pc.in |
| 26 | +@@ -6,5 +6,7 @@ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ |
| 27 | + Name: ggml |
| 28 | + Description: The GGML Tensor Library for Machine Learning |
| 29 | + Version: 0.0.0 |
| 30 | +-Cflags: -I${includedir} |
| 31 | +-Libs: -L${libdir} -lggml |
| 32 | ++Cflags: -I${includedir} @GGML_PKGCONFIG_CFLAGS@ |
| 33 | ++Libs: -L${libdir} -lggml @GGML_PKGCONFIG_LIBS_BACKEND@ -lggml-base |
| 34 | ++Libs.private: @GGML_PKGCONFIG_LIBS_PRIVATE@ |
| 35 | ++Requires.private: @GGML_PKGCONFIG_REQUIRES_PRIVATE@ |
| 36 | +\ No newline at end of file |
| 37 | +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt |
| 38 | +index 2b5b8169..1a4475b5 100644 |
| 39 | +--- a/src/CMakeLists.txt |
| 40 | ++++ b/src/CMakeLists.txt |
| 41 | +@@ -183,6 +183,10 @@ endif() |
| 42 | + |
| 43 | + # ggml |
| 44 | + |
| 45 | ++set(GGML_PKGCONFIG_CFLAGS "") |
| 46 | ++set(GGML_PKGCONFIG_LIBS_BACKEND "") |
| 47 | ++set(GGML_PKGCONFIG_LIBS_PRIVATE "") |
| 48 | ++ |
| 49 | + if (GGML_BACKEND_DL AND NOT BUILD_SHARED_LIBS) |
| 50 | + message(FATAL_ERROR "GGML_BACKEND_DL requires BUILD_SHARED_LIBS") |
| 51 | + endif() |
| 52 | +@@ -225,6 +229,7 @@ target_link_libraries(ggml PUBLIC ggml-base) |
| 53 | + |
| 54 | + if (CMAKE_SYSTEM_NAME MATCHES "Linux") |
| 55 | + target_link_libraries(ggml PRIVATE dl) |
| 56 | ++ string(APPEND GGML_PKGCONFIG_LIBS_PRIVATE " -ldl") |
| 57 | + endif() |
| 58 | + |
| 59 | + function(ggml_add_backend_library backend) |
| 60 | +@@ -269,12 +274,20 @@ function(ggml_add_backend backend) |
| 61 | + string(TOUPPER "GGML_${backend}" backend_id) |
| 62 | + if (${backend_id}) |
| 63 | + string(TOLOWER "ggml-${backend}" backend_target) |
| 64 | ++ if (NOT GGML_BACKEND_DL) |
| 65 | ++ # Mirrors ggml_add_backend_library but avoids cmake scoping |
| 66 | ++ set(GGML_PKGCONFIG_LIBS_BACKEND "${GGML_PKGCONFIG_LIBS_BACKEND} -l${backend_target}") |
| 67 | ++ endif() |
| 68 | + add_subdirectory(${backend_target}) |
| 69 | + message(STATUS "Including ${backend} backend") |
| 70 | + if (NOT GGML_BACKEND_DL) |
| 71 | + string(TOUPPER "GGML_USE_${backend}" backend_use) |
| 72 | + target_compile_definitions(ggml PUBLIC ${backend_use}) |
| 73 | ++ set(GGML_PKGCONFIG_CFLAGS "${GGML_PKGCONFIG_CFLAGS} -D${backend_use}" PARENT_SCOPE) |
| 74 | + endif() |
| 75 | ++ set(GGML_PKGCONFIG_LIBS_BACKEND "${GGML_PKGCONFIG_LIBS_BACKEND}" PARENT_SCOPE) |
| 76 | ++ set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE}" PARENT_SCOPE) |
| 77 | ++ set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE}" PARENT_SCOPE) |
| 78 | + endif() |
| 79 | + endfunction() |
| 80 | + |
| 81 | +@@ -396,11 +409,15 @@ find_library(MATH_LIBRARY m) |
| 82 | + if (MATH_LIBRARY) |
| 83 | + if (NOT WIN32 OR NOT DEFINED ENV{ONEAPI_ROOT}) |
| 84 | + target_link_libraries(ggml-base PRIVATE m) |
| 85 | ++ string(APPEND GGML_PKGCONFIG_LIBS_PRIVATE " -lm") |
| 86 | + endif() |
| 87 | + endif() |
| 88 | + |
| 89 | + if (CMAKE_SYSTEM_NAME MATCHES "Android") |
| 90 | + target_link_libraries(ggml-base PRIVATE dl) |
| 91 | ++ if(NOT GGML_PKGCONFIG_LIBS_PRIVATE MATCHES " -ldl") |
| 92 | ++ string(APPEND GGML_PKGCONFIG_LIBS_PRIVATE " -ldl") |
| 93 | ++ endif() |
| 94 | + endif() |
| 95 | + |
| 96 | + if(CMAKE_SYSTEM_NAME MATCHES "visionOS") |
| 97 | +@@ -413,4 +430,10 @@ if (BUILD_SHARED_LIBS) |
| 98 | + target_compile_definitions(${target} PRIVATE GGML_BUILD) |
| 99 | + target_compile_definitions(${target} PUBLIC GGML_SHARED) |
| 100 | + endforeach() |
| 101 | ++ string(APPEND GGML_PKGCONFIG_CFLAGS " -DGGML_SHARED -DGGML_BACKEND_SHARED") |
| 102 | + endif() |
| 103 | ++ |
| 104 | ++set(GGML_PKGCONFIG_CFLAGS "${GGML_PKGCONFIG_CFLAGS}" PARENT_SCOPE) |
| 105 | ++set(GGML_PKGCONFIG_LIBS_BACKEND "${GGML_PKGCONFIG_LIBS_BACKEND}" PARENT_SCOPE) |
| 106 | ++set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE}" PARENT_SCOPE) |
| 107 | ++set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE}" PARENT_SCOPE) |
| 108 | +diff --git a/src/ggml-blas/CMakeLists.txt b/src/ggml-blas/CMakeLists.txt |
| 109 | +index 76064c3f..69415049 100644 |
| 110 | +--- a/src/ggml-blas/CMakeLists.txt |
| 111 | ++++ b/src/ggml-blas/CMakeLists.txt |
| 112 | +@@ -79,6 +79,7 @@ if (BLAS_FOUND) |
| 113 | + endif() |
| 114 | + |
| 115 | + target_link_libraries (ggml-blas PRIVATE ${BLAS_LIBRARIES}) |
| 116 | ++ set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE} cblas" PARENT_SCOPE) |
| 117 | + target_include_directories(ggml-blas PRIVATE ${BLAS_INCLUDE_DIRS}) |
| 118 | + else() |
| 119 | + message(FATAL_ERROR "BLAS not found, please refer to " |
| 120 | +diff --git a/src/ggml-cpu/CMakeLists.txt b/src/ggml-cpu/CMakeLists.txt |
| 121 | +index ce0a3e12..0eea5432 100644 |
| 122 | +--- a/src/ggml-cpu/CMakeLists.txt |
| 123 | ++++ b/src/ggml-cpu/CMakeLists.txt |
| 124 | +@@ -52,6 +52,9 @@ function(ggml_add_cpu_backend_variant_impl tag_name) |
| 125 | + target_compile_features(${GGML_CPU_NAME} PRIVATE c_std_11 cxx_std_17) |
| 126 | + target_include_directories(${GGML_CPU_NAME} PRIVATE . ggml-cpu) |
| 127 | + |
| 128 | ++ set(libs_private "") |
| 129 | ++ set(pkgconfig_cflags "") |
| 130 | ++ |
| 131 | + if (APPLE AND GGML_ACCELERATE) |
| 132 | + find_library(ACCELERATE_FRAMEWORK Accelerate) |
| 133 | + if (ACCELERATE_FRAMEWORK) |
| 134 | +@@ -62,6 +65,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) |
| 135 | + target_compile_definitions(${GGML_CPU_NAME} PRIVATE ACCELERATE_LAPACK_ILP64) |
| 136 | + |
| 137 | + target_link_libraries(${GGML_CPU_NAME} PRIVATE ${ACCELERATE_FRAMEWORK}) |
| 138 | ++ string(APPEND libs_private " -framework Accelerate") |
| 139 | + else() |
| 140 | + message(WARNING "Accelerate framework not found") |
| 141 | + endif() |
| 142 | +@@ -74,6 +78,18 @@ function(ggml_add_cpu_backend_variant_impl tag_name) |
| 143 | + target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_OPENMP) |
| 144 | + |
| 145 | + target_link_libraries(${GGML_CPU_NAME} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_CXX) |
| 146 | ++ set(items "") |
| 147 | ++ foreach(lib IN LISTS OpenMP_CXX_LIB_NAMES OpenMP_C_LIB_NAMES) |
| 148 | ++ list(REMOVE_ITEM items " -l${lib}") |
| 149 | ++ list(APPEND items " -l${lib}") |
| 150 | ++ endforeach() |
| 151 | ++ string(APPEND libs_private ${items}) |
| 152 | ++ set(items "") |
| 153 | ++ foreach(flag IN LISTS OpenMP_CXX_FLAGS OpenMP_C_FLAGS) |
| 154 | ++ list(REMOVE_ITEM items " ${flag}") |
| 155 | ++ list(APPEND items " ${flag}") |
| 156 | ++ endforeach() |
| 157 | ++ string(APPEND pkgconfig_cflags ${items}) |
| 158 | + else() |
| 159 | + set(GGML_OPENMP_ENABLED "OFF" CACHE INTERNAL "") |
| 160 | + message(WARNING "OpenMP not found") |
| 161 | +@@ -96,8 +112,12 @@ function(ggml_add_cpu_backend_variant_impl tag_name) |
| 162 | + target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_CPU_HBM) |
| 163 | + |
| 164 | + target_link_libraries(${GGML_CPU_NAME} PUBLIC memkind) |
| 165 | ++ string(APPEND libs_private " -lmemkind") |
| 166 | + endif() |
| 167 | + |
| 168 | ++ set(GGML_PKGCONFIG_CFLAGS "${GGML_PKGCONFIG_CFLAGS}${pkgconfig_cflags}" PARENT_SCOPE) |
| 169 | ++ set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE}${libs_private}" PARENT_SCOPE) |
| 170 | ++ |
| 171 | + if (GGML_SYSTEM_ARCH STREQUAL "ARM") |
| 172 | + message(STATUS "ARM detected") |
| 173 | + list(APPEND GGML_CPU_SOURCES |
| 174 | +diff --git a/src/ggml-metal/CMakeLists.txt b/src/ggml-metal/CMakeLists.txt |
| 175 | +index 0ca8a3c5..9606a9ed 100644 |
| 176 | +--- a/src/ggml-metal/CMakeLists.txt |
| 177 | ++++ b/src/ggml-metal/CMakeLists.txt |
| 178 | +@@ -14,6 +14,11 @@ target_link_libraries(ggml-metal PRIVATE |
| 179 | + ${METALKIT_FRAMEWORK} |
| 180 | + ) |
| 181 | + |
| 182 | ++set(GGML_PKGCONFIG_LIBS_PRIVATE |
| 183 | ++ "${GGML_PKGCONFIG_LIBS_PRIVATE} -framework Foundation -framework Metal -framework MetalKit" |
| 184 | ++ PARENT_SCOPE |
| 185 | ++) |
| 186 | ++ |
| 187 | + if (GGML_METAL_NDEBUG) |
| 188 | + add_compile_definitions(GGML_METAL_NDEBUG) |
| 189 | + endif() |
| 190 | +diff --git a/src/ggml-opencl/CMakeLists.txt b/src/ggml-opencl/CMakeLists.txt |
| 191 | +index 9a7ccbcf..e4c110e6 100644 |
| 192 | +--- a/src/ggml-opencl/CMakeLists.txt |
| 193 | ++++ b/src/ggml-opencl/CMakeLists.txt |
| 194 | +@@ -7,6 +7,7 @@ ggml_add_backend_library(${TARGET_NAME} |
| 195 | + ggml-opencl.cpp |
| 196 | + ../../include/ggml-opencl.h) |
| 197 | + target_link_libraries(${TARGET_NAME} PRIVATE ${OpenCL_LIBRARIES}) |
| 198 | ++set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE} OpenCL" PARENT_SCOPE) |
| 199 | + target_include_directories(${TARGET_NAME} PRIVATE ${OpenCL_INCLUDE_DIRS}) |
| 200 | + |
| 201 | + if (GGML_OPENCL_PROFILING) |
| 202 | +diff --git a/src/ggml-vulkan/CMakeLists.txt b/src/ggml-vulkan/CMakeLists.txt |
| 203 | +index b97e7bf9..ec194126 100644 |
| 204 | +--- a/src/ggml-vulkan/CMakeLists.txt |
| 205 | ++++ b/src/ggml-vulkan/CMakeLists.txt |
| 206 | +@@ -77,6 +77,11 @@ if (Vulkan_FOUND) |
| 207 | + ) |
| 208 | + |
| 209 | + target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan) |
| 210 | ++ if(ANDROID) |
| 211 | ++ set(GGML_PKGCONFIG_LIBS_PRIVATE "${GGML_PKGCONFIG_LIBS_PRIVATE} -lvulkan" PARENT_SCOPE) |
| 212 | ++ else() |
| 213 | ++ set(GGML_PKGCONFIG_REQUIRES_PRIVATE "${GGML_PKGCONFIG_REQUIRES_PRIVATE} vulkan" PARENT_SCOPE) |
| 214 | ++ endif() |
| 215 | + target_include_directories(ggml-vulkan PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) |
| 216 | + |
| 217 | + # Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build |
0 commit comments