@@ -267,3 +267,74 @@ if (GGML_STANDALONE)
267267 install (FILES ${CMAKE_CURRENT_BINARY_DIR} /ggml.pc
268268 DESTINATION share/pkgconfig)
269269endif ()
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)
0 commit comments