mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2025-08-14 20:29:41 -04:00
cmake: Add GGML_BACKEND_DIR option (#15074)
* cmake: Add GGML_BACKEND_DIR option This can be used by distributions to specify where to look for backends when ggml is built with GGML_BACKEND_DL=ON. * Fix phrasing
This commit is contained in:
committed by
GitHub
parent
e5bebe5251
commit
41613437ff
@@ -39,8 +39,9 @@ if (WIN32)
|
|||||||
set(CMAKE_SHARED_MODULE_PREFIX "")
|
set(CMAKE_SHARED_MODULE_PREFIX "")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(BUILD_SHARED_LIBS "ggml: build shared libraries" ${BUILD_SHARED_LIBS_DEFAULT})
|
option(BUILD_SHARED_LIBS "ggml: build shared libraries" ${BUILD_SHARED_LIBS_DEFAULT})
|
||||||
option(GGML_BACKEND_DL "ggml: build backends as dynamic libraries (requires BUILD_SHARED_LIBS)" OFF)
|
option(GGML_BACKEND_DL "ggml: build backends as dynamic libraries (requires BUILD_SHARED_LIBS)" OFF)
|
||||||
|
set(GGML_BACKEND_DIR "" CACHE PATH "ggml: directory to load dynamic backends from (requires GGML_BACKEND_DL")
|
||||||
|
|
||||||
#
|
#
|
||||||
# option list
|
# option list
|
||||||
|
@@ -106,7 +106,7 @@ if(NOT TARGET ggml::ggml)
|
|||||||
|
|
||||||
find_library(GGML_LIBRARY ggml
|
find_library(GGML_LIBRARY ggml
|
||||||
REQUIRED
|
REQUIRED
|
||||||
HINTS ${GGML_LIB_DIR}
|
HINTS ${GGML_LIB_DIR} ${GGML_BACKEND_DIR}
|
||||||
NO_CMAKE_FIND_ROOT_PATH)
|
NO_CMAKE_FIND_ROOT_PATH)
|
||||||
|
|
||||||
add_library(ggml::ggml UNKNOWN IMPORTED)
|
add_library(ggml::ggml UNKNOWN IMPORTED)
|
||||||
|
@@ -214,6 +214,13 @@ add_library(ggml
|
|||||||
ggml-backend-reg.cpp)
|
ggml-backend-reg.cpp)
|
||||||
add_library(ggml::ggml ALIAS ggml)
|
add_library(ggml::ggml ALIAS ggml)
|
||||||
|
|
||||||
|
if (GGML_BACKEND_DIR)
|
||||||
|
if (NOT GGML_BACKEND_DL)
|
||||||
|
message(FATAL_ERROR "GGML_BACKEND_DIR requires GGML_BACKEND_DL")
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(ggml PUBLIC GGML_BACKEND_DIR="${GGML_BACKEND_DIR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
target_link_libraries(ggml PUBLIC ggml-base)
|
target_link_libraries(ggml PUBLIC ggml-base)
|
||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||||
@@ -227,7 +234,11 @@ function(ggml_add_backend_library backend)
|
|||||||
set_target_properties(${backend} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
set_target_properties(${backend} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
||||||
target_compile_definitions(${backend} PRIVATE GGML_BACKEND_DL)
|
target_compile_definitions(${backend} PRIVATE GGML_BACKEND_DL)
|
||||||
add_dependencies(ggml ${backend})
|
add_dependencies(ggml ${backend})
|
||||||
install(TARGETS ${backend} LIBRARY DESTINATION ${CMAKE_INSTALL_BINDIR})
|
if (GGML_BACKEND_DIR)
|
||||||
|
install(TARGETS ${backend} LIBRARY DESTINATION ${GGML_BACKEND_DIR})
|
||||||
|
else()
|
||||||
|
install(TARGETS ${backend} LIBRARY DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
endif()
|
||||||
else()
|
else()
|
||||||
add_library(${backend} ${ARGN})
|
add_library(${backend} ${ARGN})
|
||||||
target_link_libraries(ggml PUBLIC ${backend})
|
target_link_libraries(ggml PUBLIC ${backend})
|
||||||
|
@@ -498,6 +498,9 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent,
|
|||||||
|
|
||||||
std::vector<fs::path> search_paths;
|
std::vector<fs::path> search_paths;
|
||||||
if (user_search_path == nullptr) {
|
if (user_search_path == nullptr) {
|
||||||
|
#ifdef GGML_BACKEND_DIR
|
||||||
|
search_paths.push_back(fs::u8path(GGML_BACKEND_DIR));
|
||||||
|
#endif
|
||||||
// default search paths: executable directory, current directory
|
// default search paths: executable directory, current directory
|
||||||
search_paths.push_back(get_executable_path());
|
search_paths.push_back(get_executable_path());
|
||||||
search_paths.push_back(fs::current_path());
|
search_paths.push_back(fs::current_path());
|
||||||
|
Reference in New Issue
Block a user