diff --git a/CMakeLists.txt b/CMakeLists.txt index c79ccd09e097c..f4188d17f8cbb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -213,7 +213,7 @@ endif() include(GNUInstallDirs) include(CMakePackageConfigHelpers) -set(LLAMA_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files") +set(LLAMA_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/llama CACHE PATH "Location of header files") set(LLAMA_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Location of library files") set(LLAMA_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of binary files") @@ -225,15 +225,46 @@ set_target_properties(llama PROPERTIES PUBLIC_HEADER "${LLAMA_PUBLIC_HEADERS}") -install(TARGETS llama LIBRARY PUBLIC_HEADER) +install( + TARGETS llama + EXPORT llama-targets + PUBLIC_HEADER + DESTINATION ${LLAMA_INCLUDE_INSTALL_DIR}) + +if (LLAMA_BUILD_COMMON) + + install( + TARGETS common build_info + EXPORT llama-targets + PUBLIC_HEADER + DESTINATION ${LLAMA_INCLUDE_INSTALL_DIR}/common) + +endif() + +if (LLAMA_BUILD_TOOLS) + + install( + TARGETS mtmd + EXPORT llama-targets + PUBLIC_HEADER + DESTINATION ${LLAMA_INCLUDE_INSTALL_DIR}/mtmd) + +endif() + +install( + EXPORT llama-targets + FILE llama-targets.cmake + NAMESPACE llama:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/llama) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/llama-config.cmake + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/llama) configure_package_config_file( - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/llama-config.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/llama-config.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/llama - PATH_VARS LLAMA_INCLUDE_INSTALL_DIR - LLAMA_LIB_INSTALL_DIR - LLAMA_BIN_INSTALL_DIR ) + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/llama-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/llama-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/llama) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/llama-version.cmake @@ -242,7 +273,7 @@ write_basic_package_version_file( install(FILES ${CMAKE_CURRENT_BINARY_DIR}/llama-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/llama-version.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/llama) + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/llama) install( FILES convert_hf_to_gguf.py diff --git a/cmake/llama-config.cmake.in b/cmake/llama-config.cmake.in index 90cbec5b6f133..5a1d6a8a33b80 100644 --- a/cmake/llama-config.cmake.in +++ b/cmake/llama-config.cmake.in @@ -5,26 +5,9 @@ set(LLAMA_SHARED_LIB @BUILD_SHARED_LIBS@) @PACKAGE_INIT@ -set_and_check(LLAMA_INCLUDE_DIR "@PACKAGE_LLAMA_INCLUDE_INSTALL_DIR@") -set_and_check(LLAMA_LIB_DIR "@PACKAGE_LLAMA_LIB_INSTALL_DIR@") -set_and_check(LLAMA_BIN_DIR "@PACKAGE_LLAMA_BIN_INSTALL_DIR@") +include(CMakeFindDependencyMacro) +find_dependency(ggml CONFIG REQUIRED) -find_package(ggml REQUIRED HINTS ${LLAMA_LIB_DIR}/cmake) +include("${CMAKE_CURRENT_LIST_DIR}/llama-targets.cmake") -find_library(llama_LIBRARY llama - REQUIRED - HINTS ${LLAMA_LIB_DIR} - NO_CMAKE_FIND_ROOT_PATH -) - -add_library(llama UNKNOWN IMPORTED) -set_target_properties(llama - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${LLAMA_INCLUDE_DIR}" - INTERFACE_LINK_LIBRARIES "ggml::ggml;ggml::ggml-base;" - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${llama_LIBRARY}" - INTERFACE_COMPILE_FEATURES c_std_90 - POSITION_INDEPENDENT_CODE ON) - -check_required_components(Llama) +check_required_components(llama) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 0ae4d698f080c..122eaf01e69b3 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -44,34 +44,43 @@ endif() set(TARGET common) +set(${TARGET}_HEADERS + arg.h + base64.hpp + chat-parser.h + chat.h + common.h + console.h + json-partial.h + json-schema-to-grammar.h + log.h + ngram-cache.h + regex-partial.h + sampling.h + speculative.h +) + +list(TRANSFORM ${TARGET}_HEADERS PREPEND ${CMAKE_SOURCE_DIR}/common/) + add_library(${TARGET} STATIC arg.cpp - arg.h - base64.hpp chat-parser.cpp - chat-parser.h chat.cpp - chat.h common.cpp - common.h console.cpp - console.h json-partial.cpp - json-partial.h json-schema-to-grammar.cpp llguidance.cpp log.cpp - log.h ngram-cache.cpp - ngram-cache.h regex-partial.cpp - regex-partial.h sampling.cpp - sampling.h speculative.cpp - speculative.h + ${${TARGET}_HEADERS} ) +set_target_properties(${TARGET} PROPERTIES PUBLIC_HEADER "${${TARGET}_HEADERS}") + if (BUILD_SHARED_LIBS) set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -133,7 +142,12 @@ if (LLAMA_LLGUIDANCE) set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} llguidance ${LLGUIDANCE_PLATFORM_LIBS}) endif () -target_include_directories(${TARGET} PUBLIC . ../vendor) +target_include_directories( + ${TARGET} + PUBLIC + $${CMAKE_SOURCE_DIR}/vendor> + $) + target_compile_features (${TARGET} PUBLIC cxx_std_17) target_link_libraries (${TARGET} PRIVATE ${LLAMA_COMMON_EXTRA_LIBS} PUBLIC llama Threads::Threads) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index de6d789c98a03..ecae63184feaa 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -279,8 +279,15 @@ 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 ggml-base + EXPORT ggml-targets) + +install( + EXPORT ggml-targets + FILE ggml-targets.cmake + NAMESPACE ggml:: + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ggml) if (GGML_STANDALONE) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ggml.pc.in @@ -351,7 +358,7 @@ set(GGML_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Location of configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ggml-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/ggml-config.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ggml + INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ggml PATH_VARS GGML_INCLUDE_INSTALL_DIR GGML_LIB_INSTALL_DIR GGML_BIN_INSTALL_DIR) @@ -370,8 +377,7 @@ message(STATUS "ggml commit: ${GGML_BUILD_COMMIT}") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/ggml-version.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ggml) - + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/ggml) if (MSVC) set(MSVC_WARNING_FLAGS /wd4005 # Macro redefinition diff --git a/ggml/cmake/ggml-config.cmake.in b/ggml/cmake/ggml-config.cmake.in index 8c2dc31c6da5b..4e1c7d831ea89 100644 --- a/ggml/cmake/ggml-config.cmake.in +++ b/ggml/cmake/ggml-config.cmake.in @@ -87,6 +87,13 @@ if (NOT GGML_SHARED_LIB) list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL) endif() endif() + + if (GGML_OPENCL) + find_package(PkgConfig REQUIRED) + pkg_check_modules(OpenCL REQUIRED IMPORTED_TARGET OpenCL) + list(APPEND GGML_OPENCL_INTERFACE_LINK_LIBRARIES PkgConfig::OpenCL) + endif() + endif() set(_ggml_all_targets "") diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 0425fd60a9412..3be41f576039a 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -231,7 +231,7 @@ function(ggml_add_backend_library backend) else() add_library(${backend} ${ARGN}) target_link_libraries(ggml PUBLIC ${backend}) - install(TARGETS ${backend} LIBRARY) + install(TARGETS ${backend} EXPORT ggml-targets) endif() target_link_libraries(${backend} PRIVATE ggml-base) diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index b97e7bf995504..519c93c9cc8b3 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -3,6 +3,10 @@ cmake_policy(SET CMP0114 NEW) find_package(Vulkan COMPONENTS glslc REQUIRED) +# Add options to disable cooperative matrix support +option(GGML_VULKAN_DISABLE_COOPMAT "Disable VK_KHR_cooperative_matrix support" OFF) +option(GGML_VULKAN_DISABLE_COOPMAT2 "Disable VK_NV_cooperative_matrix2 support" OFF) + function(detect_host_compiler) if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") find_program(HOST_C_COMPILER NAMES cl gcc clang NO_CMAKE_FIND_ROOT_PATH) @@ -52,17 +56,25 @@ if (Vulkan_FOUND) set(VULKAN_SHADER_GEN_CMAKE_ARGS "") # Test all shader extensions - test_shader_extension_support( - "GL_KHR_cooperative_matrix" - "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp" - "GGML_VULKAN_COOPMAT_GLSLC_SUPPORT" - ) + if (NOT GGML_VULKAN_DISABLE_COOPMAT) + test_shader_extension_support( + "GL_KHR_cooperative_matrix" + "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp" + "GGML_VULKAN_COOPMAT_GLSLC_SUPPORT" + ) + else() + message(STATUS "VK_KHR_cooperative_matrix support disabled by GGML_VULKAN_DISABLE_COOPMAT") + endif() - test_shader_extension_support( - "GL_NV_cooperative_matrix2" - "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp" - "GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT" - ) + if (NOT GGML_VULKAN_DISABLE_COOPMAT2) + test_shader_extension_support( + "GL_NV_cooperative_matrix2" + "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp" + "GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT" + ) + else() + message(STATUS "VK_NV_cooperative_matrix2 support disabled by GGML_VULKAN_DISABLE_COOPMAT2") + endif() test_shader_extension_support( "GL_EXT_integer_dot_product" @@ -78,6 +90,7 @@ if (Vulkan_FOUND) target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan) target_include_directories(ggml-vulkan PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + target_include_directories(ggml-vulkan PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/vulkan_cpp_wrapper/include") # Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build # Posssibly relevant: https://stackoverflow.com/questions/74748276/visual-studio-no-displays-the-correct-length-of-stdvector diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8f9cd652447ab..2b8b882e44bea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,7 +7,6 @@ llama_add_compile_flags() # llama add_library(llama - ../include/llama.h llama.cpp llama-adapter.cpp llama-arch.cpp @@ -34,11 +33,15 @@ add_library(llama llama-vocab.cpp unicode-data.cpp unicode.cpp - unicode.h ) target_include_directories(llama PRIVATE .) -target_include_directories(llama PUBLIC ../include) +target_include_directories( + llama + PUBLIC + $ + $) + target_compile_features (llama PRIVATE cxx_std_17) # don't bump target_link_libraries(llama PUBLIC ggml) diff --git a/tools/mtmd/CMakeLists.txt b/tools/mtmd/CMakeLists.txt index 4baa15b9609fc..4e87d3130735e 100644 --- a/tools/mtmd/CMakeLists.txt +++ b/tools/mtmd/CMakeLists.txt @@ -15,7 +15,12 @@ add_library(mtmd target_link_libraries (mtmd PUBLIC ggml llama) target_link_libraries (mtmd PRIVATE Threads::Threads) -target_include_directories(mtmd PUBLIC .) +target_include_directories( + mtmd + PUBLIC + $ + $ +) target_include_directories(mtmd PRIVATE ../..) target_include_directories(mtmd PRIVATE ../../vendor) target_compile_features (mtmd PRIVATE cxx_std_17) @@ -35,8 +40,6 @@ set_target_properties(mtmd PROPERTIES PUBLIC_HEADER "${MTMD_PUBLIC_HEADERS}") -install(TARGETS mtmd LIBRARY PUBLIC_HEADER) - if (NOT MSVC) # for stb_image.h and miniaudio.h target_compile_options(mtmd PRIVATE -Wno-cast-qual)