From dc264be6ffa39cc2cb02565fd8674a894b066936 Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Wed, 16 Apr 2025 21:56:29 -0400 Subject: [PATCH] ml: add missing cmake property and remove additional CMakeLists.txt (#10310) --- CMakeLists.txt | 3 +- .../0021-remove-ggml-git-build-info.patch | 45 --- ml/backend/ggml/ggml/.rsync-filter | 4 - ml/backend/ggml/ggml/CMakeLists.txt | 337 ------------------ .../ggml/ggml/cmake/ggml-config.cmake.in | 152 -------- 5 files changed, 2 insertions(+), 539 deletions(-) delete mode 100644 llama/patches/0021-remove-ggml-git-build-info.patch delete mode 100644 ml/backend/ggml/ggml/CMakeLists.txt delete mode 100644 ml/backend/ggml/ggml/cmake/ggml-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 4990bc6f1..b38426996 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ set(GGML_LLAMAFILE ON) set(GGML_CUDA_PEER_MAX_BATCH_SIZE 128) set(GGML_CUDA_GRAPHS ON) set(GGML_CUDA_FA ON) +set(GGML_CUDA_COMPRESSION_MODE none) if((CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_OSX_ARCHITECTURES MATCHES "arm64") OR (NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64|ARM64|ARMv[0-9]+")) @@ -51,7 +52,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/ggml-cp include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/ggml-cpu/amx) set(GGML_CPU ON) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src) set_property(TARGET ggml PROPERTY EXCLUDE_FROM_ALL TRUE) get_target_property(CPU_VARIANTS ggml-cpu MANUALLY_ADDED_DEPENDENCIES) diff --git a/llama/patches/0021-remove-ggml-git-build-info.patch b/llama/patches/0021-remove-ggml-git-build-info.patch deleted file mode 100644 index 04b7d65f2..000000000 --- a/llama/patches/0021-remove-ggml-git-build-info.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: jmorganca -Date: Sat, 12 Apr 2025 21:13:44 -0400 -Subject: [PATCH] remove ggml git build info - ---- - ggml/CMakeLists.txt | 25 ------------------------- - 1 file changed, 25 deletions(-) - -diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt -index d33f843b..a6c59f22 100644 ---- a/ggml/CMakeLists.txt -+++ b/ggml/CMakeLists.txt -@@ -287,31 +287,6 @@ if (GGML_STANDALONE) - DESTINATION share/pkgconfig) - endif() - --# --# Create CMake package --# -- --# Generate version info based on git commit. -- --if(NOT DEFINED GGML_BUILD_NUMBER) -- find_program(GIT_EXE NAMES git git.exe REQUIRED NO_CMAKE_FIND_ROOT_PATH) -- execute_process(COMMAND ${GIT_EXE} rev-list --count HEAD -- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -- OUTPUT_VARIABLE GGML_BUILD_NUMBER -- OUTPUT_STRIP_TRAILING_WHITESPACE -- ) -- -- if(GGML_BUILD_NUMBER EQUAL 1) -- message(WARNING "GGML build version fixed at 1 likely due to a shallow clone.") -- endif() -- -- execute_process(COMMAND ${GIT_EXE} rev-parse --short HEAD -- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -- OUTPUT_VARIABLE GGML_BUILD_COMMIT -- OUTPUT_STRIP_TRAILING_WHITESPACE -- ) --endif() -- - - # Capture variables prefixed with GGML_. - diff --git a/ml/backend/ggml/ggml/.rsync-filter b/ml/backend/ggml/ggml/.rsync-filter index 0a9d77afc..ddad16e21 100644 --- a/ml/backend/ggml/ggml/.rsync-filter +++ b/ml/backend/ggml/ggml/.rsync-filter @@ -1,6 +1,5 @@ protect *.go protect *-embed.* -include cmake/ include include/ include src/ include src/CMakeLists.txt @@ -14,7 +13,6 @@ include src/ggml-cuda/vendors/ include src/ggml-cuda/template-instances/ include src/ggml-hip/ include src/ggml-metal/ -include CMakeLists.txt include *.c include *.h include *.cpp @@ -22,6 +20,4 @@ include *.cu include *.cuh include *.m include *.metal -include common.cmake -include ggml-config.cmake.in exclude * diff --git a/ml/backend/ggml/ggml/CMakeLists.txt b/ml/backend/ggml/ggml/CMakeLists.txt deleted file mode 100644 index a6c59f229..000000000 --- a/ml/backend/ggml/ggml/CMakeLists.txt +++ /dev/null @@ -1,337 +0,0 @@ -cmake_minimum_required(VERSION 3.14) # for add_link_options and implicit target directories. -project("ggml" C CXX) -include(CheckIncludeFileCXX) - -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") -endif() - -if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(GGML_STANDALONE ON) - - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - - # configure project version - # TODO -else() - set(GGML_STANDALONE OFF) -endif() - -if (EMSCRIPTEN) - set(BUILD_SHARED_LIBS_DEFAULT OFF) - - option(GGML_WASM_SINGLE_FILE "ggml: embed WASM inside the generated ggml.js" ON) -else() - if (MINGW) - set(BUILD_SHARED_LIBS_DEFAULT OFF) - else() - set(BUILD_SHARED_LIBS_DEFAULT ON) - endif() -endif() - -# remove the lib prefix on win32 mingw -if (WIN32) - set(CMAKE_STATIC_LIBRARY_PREFIX "") - set(CMAKE_SHARED_LIBRARY_PREFIX "") - set(CMAKE_SHARED_MODULE_PREFIX "") -endif() - -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 list -# - -# TODO: mark all options as advanced when not GGML_STANDALONE - -if (APPLE) - set(GGML_METAL_DEFAULT ON) - set(GGML_BLAS_DEFAULT ON) - set(GGML_BLAS_VENDOR_DEFAULT "Apple") -else() - set(GGML_METAL_DEFAULT OFF) - set(GGML_BLAS_DEFAULT OFF) - set(GGML_BLAS_VENDOR_DEFAULT "Generic") -endif() - -if (CMAKE_CROSSCOMPILING OR DEFINED ENV{SOURCE_DATE_EPOCH}) - message(STATUS "Setting GGML_NATIVE_DEFAULT to OFF") - set(GGML_NATIVE_DEFAULT OFF) -else() - set(GGML_NATIVE_DEFAULT ON) -endif() - -# defaults -if (NOT GGML_LLAMAFILE_DEFAULT) - set(GGML_LLAMAFILE_DEFAULT OFF) -endif() - -if (NOT GGML_CUDA_GRAPHS_DEFAULT) - set(GGML_CUDA_GRAPHS_DEFAULT OFF) -endif() - -# general -option(GGML_STATIC "ggml: static link libraries" OFF) -option(GGML_NATIVE "ggml: optimize the build for the current system" ${GGML_NATIVE_DEFAULT}) -option(GGML_LTO "ggml: enable link time optimization" OFF) -option(GGML_CCACHE "ggml: use ccache if available" ON) - -# debug -option(GGML_ALL_WARNINGS "ggml: enable all compiler warnings" ON) -option(GGML_ALL_WARNINGS_3RD_PARTY "ggml: enable all compiler warnings in 3rd party libs" OFF) -option(GGML_GPROF "ggml: enable gprof" OFF) - -# build -option(GGML_FATAL_WARNINGS "ggml: enable -Werror flag" OFF) - -# sanitizers -option(GGML_SANITIZE_THREAD "ggml: enable thread sanitizer" OFF) -option(GGML_SANITIZE_ADDRESS "ggml: enable address sanitizer" OFF) -option(GGML_SANITIZE_UNDEFINED "ggml: enable undefined sanitizer" OFF) - -# instruction set specific -if (GGML_NATIVE OR NOT GGML_NATIVE_DEFAULT) - set(INS_ENB OFF) -else() - set(INS_ENB ON) -endif() - -message(DEBUG "GGML_NATIVE : ${GGML_NATIVE}") -message(DEBUG "GGML_NATIVE_DEFAULT : ${GGML_NATIVE_DEFAULT}") -message(DEBUG "INS_ENB : ${INS_ENB}") - -option(GGML_CPU_HBM "ggml: use memkind for CPU HBM" OFF) -option(GGML_CPU_AARCH64 "ggml: use runtime weight conversion of Q4_0 to Q4_X_X" ON) -option(GGML_CPU_KLEIDIAI "ggml: use KleidiAI optimized kernels if applicable" OFF) -option(GGML_AVX "ggml: enable AVX" ${INS_ENB}) -option(GGML_AVX_VNNI "ggml: enable AVX-VNNI" OFF) -option(GGML_AVX2 "ggml: enable AVX2" ${INS_ENB}) -option(GGML_BMI2 "ggml: enable BMI2" ${INS_ENB}) -option(GGML_AVX512 "ggml: enable AVX512F" OFF) -option(GGML_AVX512_VBMI "ggml: enable AVX512-VBMI" OFF) -option(GGML_AVX512_VNNI "ggml: enable AVX512-VNNI" OFF) -option(GGML_AVX512_BF16 "ggml: enable AVX512-BF16" OFF) -if (NOT MSVC) - # in MSVC F16C and FMA is implied with AVX2/AVX512 - option(GGML_FMA "ggml: enable FMA" ${INS_ENB}) - option(GGML_F16C "ggml: enable F16C" ${INS_ENB}) - # MSVC does not seem to support AMX - option(GGML_AMX_TILE "ggml: enable AMX-TILE" OFF) - option(GGML_AMX_INT8 "ggml: enable AMX-INT8" OFF) - option(GGML_AMX_BF16 "ggml: enable AMX-BF16" OFF) -endif() -option(GGML_LASX "ggml: enable lasx" ON) -option(GGML_LSX "ggml: enable lsx" ON) -option(GGML_RVV "ggml: enable rvv" ON) -option(GGML_RV_ZFH "ggml: enable riscv zfh" OFF) -option(GGML_VXE "ggml: enable vxe" ON) - -option(GGML_CPU_ALL_VARIANTS "ggml: build all variants of the CPU backend (requires GGML_BACKEND_DL)" OFF) -set(GGML_CPU_ARM_ARCH "" CACHE STRING "ggml: CPU architecture for ARM") -set(GGML_CPU_POWERPC_CPUTYPE "" CACHE STRING "ggml: CPU type for PowerPC") - - -if (WIN32) - set(GGML_WIN_VER "0x602" CACHE STRING "ggml: Windows version") -endif() - -# ggml core -set(GGML_SCHED_MAX_COPIES "4" CACHE STRING "ggml: max input copies for pipeline parallelism") -option(GGML_CPU "ggml: enable CPU backend" ON) - -# 3rd party libs / backends -option(GGML_ACCELERATE "ggml: enable Accelerate framework" ON) -option(GGML_BLAS "ggml: use BLAS" ${GGML_BLAS_DEFAULT}) -set(GGML_BLAS_VENDOR ${GGML_BLAS_VENDOR_DEFAULT} CACHE STRING - "ggml: BLAS library vendor") -option(GGML_LLAMAFILE "ggml: use LLAMAFILE" ${GGML_LLAMAFILE_DEFAULT}) - -option(GGML_CUDA "ggml: use CUDA" OFF) -option(GGML_MUSA "ggml: use MUSA" OFF) -option(GGML_CUDA_FORCE_MMQ "ggml: use mmq kernels instead of cuBLAS" OFF) -option(GGML_CUDA_FORCE_CUBLAS "ggml: always use cuBLAS instead of mmq kernels" OFF) -option(GGML_CUDA_F16 "ggml: use 16 bit floats for some calculations" OFF) -set (GGML_CUDA_PEER_MAX_BATCH_SIZE "128" CACHE STRING - "ggml: max. batch size for using peer access") -option(GGML_CUDA_NO_PEER_COPY "ggml: do not use peer to peer copies" OFF) -option(GGML_CUDA_NO_VMM "ggml: do not try to use CUDA VMM" OFF) -option(GGML_CUDA_FA "ggml: compile ggml FlashAttention CUDA kernels" ON) -option(GGML_CUDA_FA_ALL_QUANTS "ggml: compile all quants for FlashAttention" OFF) -option(GGML_CUDA_GRAPHS "ggml: use CUDA graphs (llama.cpp only)" ${GGML_CUDA_GRAPHS_DEFAULT}) -set (GGML_CUDA_COMPRESSION_MODE "size" CACHE STRING - "ggml: cuda link binary compression mode; requires cuda 12.8+") -set_property(CACHE GGML_CUDA_COMPRESSION_MODE PROPERTY STRINGS "none;speed;balance;size") - -option(GGML_HIP "ggml: use HIP" OFF) -option(GGML_HIP_GRAPHS "ggml: use HIP graph, experimental, slow" OFF) -option(GGML_HIP_NO_VMM "ggml: do not try to use HIP VMM" ON) -option(GGML_HIP_ROCWMMA_FATTN "ggml: enable rocWMMA for FlashAttention" OFF) -option(GGML_HIP_UMA "ggml: use HIP unified memory architecture" OFF) -option(GGML_VULKAN "ggml: use Vulkan" OFF) -option(GGML_VULKAN_CHECK_RESULTS "ggml: run Vulkan op checks" OFF) -option(GGML_VULKAN_DEBUG "ggml: enable Vulkan debug output" OFF) -option(GGML_VULKAN_MEMORY_DEBUG "ggml: enable Vulkan memory debug output" OFF) -option(GGML_VULKAN_SHADER_DEBUG_INFO "ggml: enable Vulkan shader debug info" OFF) -option(GGML_VULKAN_PERF "ggml: enable Vulkan perf output" OFF) -option(GGML_VULKAN_VALIDATE "ggml: enable Vulkan validation" OFF) -option(GGML_VULKAN_RUN_TESTS "ggml: run Vulkan tests" OFF) -option(GGML_KOMPUTE "ggml: use Kompute" OFF) -option(GGML_METAL "ggml: use Metal" ${GGML_METAL_DEFAULT}) -option(GGML_METAL_USE_BF16 "ggml: use bfloat if available" OFF) -option(GGML_METAL_NDEBUG "ggml: disable Metal debugging" OFF) -option(GGML_METAL_SHADER_DEBUG "ggml: compile Metal with -fno-fast-math" OFF) -option(GGML_METAL_EMBED_LIBRARY "ggml: embed Metal library" ${GGML_METAL}) -set (GGML_METAL_MACOSX_VERSION_MIN "" CACHE STRING - "ggml: metal minimum macOS version") -set (GGML_METAL_STD "" CACHE STRING "ggml: metal standard version (-std flag)") -option(GGML_OPENMP "ggml: use OpenMP" ON) -option(GGML_RPC "ggml: use RPC" OFF) -option(GGML_SYCL "ggml: use SYCL" OFF) -option(GGML_SYCL_F16 "ggml: use 16 bit floats for sycl calculations" OFF) -option(GGML_SYCL_GRAPH "ggml: enable graphs in the SYCL backend" ON) -set (GGML_SYCL_TARGET "INTEL" CACHE STRING - "ggml: sycl target device") -set (GGML_SYCL_DEVICE_ARCH "" CACHE STRING - "ggml: sycl device architecture") - -option(GGML_OPENCL "ggml: use OpenCL" OFF) -option(GGML_OPENCL_PROFILING "ggml: use OpenCL profiling (increases overhead)" OFF) -option(GGML_OPENCL_EMBED_KERNELS "ggml: embed kernels" ON) -option(GGML_OPENCL_USE_ADRENO_KERNELS "ggml: use optimized kernels for Adreno" ON) -set (GGML_OPENCL_TARGET_VERSION "300" CACHE STRING - "gmml: OpenCL API version to target") - -# toolchain for vulkan-shaders-gen -set (GGML_VULKAN_SHADERS_GEN_TOOLCHAIN "" CACHE FILEPATH "ggml: toolchain file for vulkan-shaders-gen") - -# extra artifacts -option(GGML_BUILD_TESTS "ggml: build tests" ${GGML_STANDALONE}) -option(GGML_BUILD_EXAMPLES "ggml: build examples" ${GGML_STANDALONE}) - -# -# dependencies -# - -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED true) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED true) - -set(THREADS_PREFER_PTHREAD_FLAG ON) - -find_package(Threads REQUIRED) - -include(GNUInstallDirs) - -# -# build the library -# - -add_subdirectory(src) - -# -# tests and examples -# - -if (GGML_BUILD_TESTS) - enable_testing() - add_subdirectory(tests) -endif () - -if (GGML_BUILD_EXAMPLES) - add_subdirectory(examples) -endif () - -# -# install -# - -include(CMakePackageConfigHelpers) - -# all public headers -set(GGML_PUBLIC_HEADERS - include/ggml.h - include/ggml-cpu.h - include/ggml-alloc.h - include/ggml-backend.h - include/ggml-blas.h - include/ggml-cann.h - include/ggml-cpp.h - include/ggml-cuda.h - include/ggml-kompute.h - include/ggml-opt.h - include/ggml-metal.h - include/ggml-rpc.h - include/ggml-sycl.h - include/ggml-vulkan.h - include/gguf.h) - -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) - -if (GGML_STANDALONE) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ggml.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc - @ONLY) - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc - DESTINATION share/pkgconfig) -endif() - - -# Capture variables prefixed with GGML_. - -set(variable_set_statements -" -####### Expanded from @GGML_VARIABLES_EXPANED@ by configure_package_config_file() ####### -####### Any changes to this file will be overwritten by the next CMake run ####### - -") - -set(GGML_SHARED_LIB ${BUILD_SHARED_LIBS}) - -get_cmake_property(all_variables VARIABLES) -foreach(variable_name IN LISTS all_variables) - if(variable_name MATCHES "^GGML_") - string(REPLACE ";" "\\;" - variable_value "${${variable_name}}") - - set(variable_set_statements - "${variable_set_statements}set(${variable_name} \"${variable_value}\")\n") - endif() -endforeach() - -set(GGML_VARIABLES_EXPANDED ${variable_set_statements}) - -# Create the CMake package and set install location. - -set(GGML_INSTALL_VERSION 0.0.${GGML_BUILD_NUMBER}) -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 - ${CMAKE_CURRENT_BINARY_DIR}/ggml-config.cmake - INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ggml - PATH_VARS GGML_INCLUDE_INSTALL_DIR - GGML_LIB_INSTALL_DIR - GGML_BIN_INSTALL_DIR) - -write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/ggml-version.cmake - VERSION ${GGML_INSTALL_VERSION} - COMPATIBILITY SameMajorVersion) - -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml-config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/ggml-version.cmake - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ggml) diff --git a/ml/backend/ggml/ggml/cmake/ggml-config.cmake.in b/ml/backend/ggml/ggml/cmake/ggml-config.cmake.in deleted file mode 100644 index 8c2dc31c6..000000000 --- a/ml/backend/ggml/ggml/cmake/ggml-config.cmake.in +++ /dev/null @@ -1,152 +0,0 @@ - -@GGML_VARIABLES_EXPANDED@ - -@PACKAGE_INIT@ - -set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@") -set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@") -#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@") - -find_package(Threads REQUIRED) - -find_library(GGML_LIBRARY ggml - REQUIRED - HINTS ${GGML_LIB_DIR} - NO_CMAKE_FIND_ROOT_PATH) - -add_library(ggml::ggml UNKNOWN IMPORTED) -set_target_properties(ggml::ggml - PROPERTIES - IMPORTED_LOCATION "${GGML_LIBRARY}") - -find_library(GGML_BASE_LIBRARY ggml-base - REQUIRED - HINTS ${GGML_LIB_DIR} - NO_CMAKE_FIND_ROOT_PATH) - -add_library(ggml::ggml-base UNKNOWN IMPORTED) -set_target_properties(ggml::ggml-base - PROPERTIES - IMPORTED_LOCATION "${GGML_BASE_LIBRARY}") - -if (NOT GGML_SHARED_LIB) - if (APPLE AND GGML_ACCELERATE) - find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED) - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${ACCELERATE_FRAMEWORK}) - endif() - - if (GGML_OPENMP) - find_package(OpenMP REQUIRED) - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES OpenMP::OpenMP_C OpenMP::OpenMP_CXX) - endif() - - if (GGML_CPU_HBM) - find_library(memkind memkind REQUIRED) - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES memkind) - endif() - - if (GGML_BLAS) - find_package(BLAS REQUIRED) - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) - list(APPEND GGML_CPU_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS}) - endif() - - if (GGML_CUDA) - find_package(CUDAToolkit REQUIRED) - endif() - - if (GGML_METAL) - find_library(FOUNDATION_LIBRARY Foundation REQUIRED) - find_library(METAL_FRAMEWORK Metal REQUIRED) - find_library(METALKIT_FRAMEWORK MetalKit REQUIRED) - - list(APPEND GGML_METAL_INTERFACE_LINK_LIBRARIES - ${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK}) - endif() - - if (GGML_VULKAN) - find_package(Vulkan REQUIRED) - list(APPEND GGML_VULKAN_INTERFACE_LINK_LIBRARIES Vulkan::Vulkan) - endif() - - if (GGML_HIP) - find_package(hip REQUIRED) - find_package(hipblas REQUIRED) - find_package(rocblas REQUIRED) - list(APPEND GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas) - endif() - - if (GGML_SYCL) - find_package(DNNL) - if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL") - list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES DNNL::dnnl) - endif() - if (WIN32) - find_package(IntelSYCL REQUIRED) - find_package(MKL REQUIRED) - list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL) - endif() - endif() -endif() - -set(_ggml_all_targets "") -foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS}) - string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}") - string(TOUPPER "${_ggml_backend_pfx}" _ggml_backend_pfx) - - find_library(${_ggml_backend_pfx}_LIBRARY ${_ggml_backend} - REQUIRED - HINTS ${GGML_LIB_DIR} - NO_CMAKE_FIND_ROOT_PATH) - - message(STATUS "Found ${${_ggml_backend_pfx}_LIBRARY}") - - add_library(ggml::${_ggml_backend} UNKNOWN IMPORTED) - set_target_properties(ggml::${_ggml_backend} - PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${GGML_INCLUDE_DIR}" - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${${_ggml_backend_pfx}_LIBRARY}" - INTERFACE_COMPILE_FEATURES c_std_90 - POSITION_INDEPENDENT_CODE ON) - - string(REGEX MATCH "^ggml-cpu" is_cpu_variant "${_ggml_backend}") - if(is_cpu_variant) - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES "ggml::ggml-base") - set_target_properties(ggml::${_ggml_backend} - PROPERTIES - INTERFACE_LINK_LIBRARIES "${GGML_CPU_INTERFACE_LINK_LIBRARIES}") - - if(GGML_CPU_INTERFACE_LINK_OPTIONS) - set_target_properties(ggml::${_ggml_backend} - PROPERTIES - INTERFACE_LINK_OPTIONS "${GGML_CPU_INTERFACE_LINK_OPTIONS}") - endif() - - else() - list(APPEND ${_ggml_backend_pfx}_INTERFACE_LINK_LIBRARIES "ggml::ggml-base") - set_target_properties(ggml::${_ggml_backend} - PROPERTIES - INTERFACE_LINK_LIBRARIES "${${_ggml_backend_pfx}_INTERFACE_LINK_LIBRARIES}") - - if(${_ggml_backend_pfx}_INTERFACE_LINK_OPTIONS) - set_target_properties(ggml::${_ggml_backend} - PROPERTIES - INTERFACE_LINK_OPTIONS "${${_ggml_backend_pfx}_INTERFACE_LINK_OPTIONS}") - endif() - endif() - - list(APPEND _ggml_all_targets ggml::${_ggml_backend}) -endforeach() - -list(APPEND GGML_INTERFACE_LINK_LIBRARIES ggml::ggml-base "${_ggml_all_targets}") -set_target_properties(ggml::ggml - PROPERTIES - INTERFACE_LINK_LIBRARIES "${GGML_INTERFACE_LINK_LIBRARIES}") - -add_library(ggml::all INTERFACE IMPORTED) -set_target_properties(ggml::all - PROPERTIES - INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}") - -check_required_components(ggml)