cmake : respect GGML_LIB_INSTALL_DIR and LLAMA_LIB_INSTALL_DIR

This commit addresses an issue where the CMake options
`GGML_LIB_INSTALL_DIR` and `LLAMA_LIB_INSTALL_DIR` currently only affect
the generated cmake config files and not the actual installation of the
libraries.

The motivation for this change is that if these options are set, a
project that uses cmake find_package to find ggml will fail to configure:
```console
$ cmake -S . -B build
CMake Error at /work/ai/llama.cpp/install/lib/cmake/ggml/ggml-config.cmake:11 (message):
  File or directory /work/ai/llama.cpp/install/llama.cpp
  referenced by variable GGML_LIB_DIR does not exist !
Call Stack (most recent call first):
  /work/ai/llama.cpp/install/lib/cmake/ggml/ggml-config.cmake:259 (set_and_check)
  CMakeLists.txt:7 (find_package)
```

Resolves: https://github.com/ggml-org/llama.cpp/issues/19748
This commit is contained in:
Daniel Bevenius 2026-02-20 08:53:19 +01:00
parent 77d6ae4ac8
commit 515bd7c9a5
No known key found for this signature in database
3 changed files with 13 additions and 7 deletions

View File

@ -246,7 +246,9 @@ set_target_properties(llama
PROPERTIES
PUBLIC_HEADER "${LLAMA_PUBLIC_HEADERS}")
install(TARGETS llama LIBRARY PUBLIC_HEADER)
install(TARGETS llama
LIBRARY DESTINATION ${LLAMA_LIB_INSTALL_DIR}
PUBLIC_HEADER DESTINATION ${LLAMA_INCLUDE_INSTALL_DIR})
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/llama-config.cmake.in

View File

@ -309,6 +309,10 @@ endif ()
include(CMakePackageConfigHelpers)
set(GGML_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files")
set(GGML_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files")
set(GGML_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files")
# all public headers
set(GGML_PUBLIC_HEADERS
include/ggml.h
@ -333,8 +337,10 @@ set_target_properties(ggml PROPERTIES PUBLIC_HEADER "${GGML_PUBLIC_HEADERS}")
#if (GGML_METAL)
# set_target_properties(ggml PROPERTIES RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/src/ggml-metal.metal")
#endif()
install(TARGETS ggml LIBRARY PUBLIC_HEADER)
install(TARGETS ggml-base LIBRARY)
install(TARGETS ggml
LIBRARY DESTINATION ${GGML_LIB_INSTALL_DIR}
PUBLIC_HEADER DESTINATION ${GGML_INCLUDE_INSTALL_DIR})
install(TARGETS ggml-base LIBRARY DESTINATION ${GGML_LIB_INSTALL_DIR})
if (GGML_STANDALONE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ggml.pc.in
@ -378,9 +384,6 @@ set(GGML_VARIABLES_EXPANDED ${variable_set_statements})
# Create the CMake package and set install location.
set(GGML_INSTALL_VERSION ${GGML_VERSION})
set(GGML_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files")
set(GGML_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files")
set(GGML_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files")
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/ggml-config.cmake.in

View File

@ -112,7 +112,8 @@ if(NOT TARGET ggml::ggml)
add_library(ggml::ggml UNKNOWN IMPORTED)
set_target_properties(ggml::ggml
PROPERTIES
IMPORTED_LOCATION "${GGML_LIBRARY}")
IMPORTED_LOCATION "${GGML_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${GGML_INCLUDE_DIR}")
find_library(GGML_BASE_LIBRARY ggml-base
REQUIRED