bandoti ggerganov commited on
Commit
ca6577f
·
1 Parent(s): 5c008f7

cmake: add ggml find package (llama/11369)

Browse files

* Add initial ggml cmake package

* Add build numbers to ggml find-package

* Expand variables with GGML_ prefix

* Guard against adding to cache variable twice

* Add git to msys2 workflow

* Handle ggml-cpu-* variants

* Link ggml/ggml-base libraries to their targets

* Replace main-cmake-pkg with simple-cmake-pkg

* Interface features require c_std_90

* Fix typo

* Removed unnecessary bracket from status message

* Update examples/simple-cmake-pkg/README.md

Co-authored-by: Georgi Gerganov <[email protected]>

* Update examples/simple-cmake-pkg/README.md

Co-authored-by: Georgi Gerganov <[email protected]>

---------

Co-authored-by: Georgi Gerganov <[email protected]>

Files changed (2) hide show
  1. ggml/CMakeLists.txt +71 -0
  2. ggml/src/CMakeLists.txt +11 -0
ggml/CMakeLists.txt CHANGED
@@ -267,3 +267,74 @@ if (GGML_STANDALONE)
267
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc
268
  DESTINATION share/pkgconfig)
269
  endif()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc
268
  DESTINATION share/pkgconfig)
269
  endif()
270
+
271
+ #
272
+ # Create CMake package
273
+ #
274
+
275
+ # Generate version info based on git commit.
276
+
277
+ find_program(GIT_EXE NAMES git git.exe REQUIRED NO_CMAKE_FIND_ROOT_PATH)
278
+ execute_process(COMMAND ${GIT_EXE} rev-list --count HEAD
279
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
280
+ OUTPUT_VARIABLE GGML_BUILD_NUMBER
281
+ OUTPUT_STRIP_TRAILING_WHITESPACE
282
+ )
283
+
284
+ if(GGML_BUILD_NUMBER EQUAL 1)
285
+ message(WARNING "GGML build version fixed at 1 likely due to a shallow clone.")
286
+ endif()
287
+
288
+ execute_process(COMMAND ${GIT_EXE} rev-parse --short HEAD
289
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
290
+ OUTPUT_VARIABLE GGML_BUILD_COMMIT
291
+ OUTPUT_STRIP_TRAILING_WHITESPACE
292
+ )
293
+
294
+ # Capture variables prefixed with GGML_.
295
+
296
+ set(variable_set_statements
297
+ "
298
+ ####### Expanded from @GGML_VARIABLES_EXPANED@ by configure_package_config_file() #######
299
+ ####### Any changes to this file will be overwritten by the next CMake run #######
300
+
301
+ ")
302
+
303
+ set(GGML_SHARED_LIB ${BUILD_SHARED_LIBS})
304
+
305
+ get_cmake_property(all_variables VARIABLES)
306
+ foreach(variable_name IN LISTS all_variables)
307
+ if(variable_name MATCHES "^GGML_")
308
+ string(REPLACE ";" "\\;"
309
+ variable_value "${${variable_name}}")
310
+
311
+ set(variable_set_statements
312
+ "${variable_set_statements}set(${variable_name} \"${variable_value}\")\n")
313
+ endif()
314
+ endforeach()
315
+
316
+ set(GGML_VARIABLES_EXPANDED ${variable_set_statements})
317
+
318
+ # Create the CMake package and set install location.
319
+
320
+ set(GGML_INSTALL_VERSION 0.0.${GGML_BUILD_NUMBER})
321
+ set(GGML_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files")
322
+ set(GGML_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files")
323
+ set(GGML_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files")
324
+
325
+ configure_package_config_file(
326
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ggml-config.cmake.in
327
+ ${CMAKE_CURRENT_BINARY_DIR}/ggml-config.cmake
328
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ggml
329
+ PATH_VARS GGML_INCLUDE_INSTALL_DIR
330
+ GGML_LIB_INSTALL_DIR
331
+ GGML_BIN_INSTALL_DIR)
332
+
333
+ write_basic_package_version_file(
334
+ ${CMAKE_CURRENT_BINARY_DIR}/ggml-version.cmake
335
+ VERSION ${GGML_INSTALL_VERSION}
336
+ COMPATIBILITY SameMajorVersion)
337
+
338
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml-config.cmake
339
+ ${CMAKE_CURRENT_BINARY_DIR}/ggml-version.cmake
340
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ggml)
ggml/src/CMakeLists.txt CHANGED
@@ -250,6 +250,17 @@ function(ggml_add_backend_library backend)
250
  target_compile_definitions(${backend} PRIVATE GGML_BACKEND_BUILD)
251
  target_compile_definitions(${backend} PUBLIC GGML_BACKEND_SHARED)
252
  endif()
 
 
 
 
 
 
 
 
 
 
 
253
  endfunction()
254
 
255
  function(ggml_add_backend backend)
 
250
  target_compile_definitions(${backend} PRIVATE GGML_BACKEND_BUILD)
251
  target_compile_definitions(${backend} PUBLIC GGML_BACKEND_SHARED)
252
  endif()
253
+
254
+ if(NOT GGML_AVAILABLE_BACKENDS)
255
+ set(GGML_AVAILABLE_BACKENDS "${backend}"
256
+ CACHE INTERNAL "List of backends for cmake package")
257
+ else()
258
+ list(FIND GGML_AVAILABLE_BACKENDS "${backend}" has_backend)
259
+ if(has_backend EQUAL -1)
260
+ set(GGML_AVAILABLE_BACKENDS "${GGML_AVAILABLE_BACKENDS};${backend}"
261
+ CACHE INTERNAL "List of backends for cmake package")
262
+ endif()
263
+ endif()
264
  endfunction()
265
 
266
  function(ggml_add_backend backend)