|
1 | | - |
2 | | -@GGML_VARIABLES_EXPANDED@ |
3 | | - |
4 | 1 | @PACKAGE_INIT@ |
5 | 2 |
|
6 | | -set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@") |
7 | | -set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@") |
8 | | -#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@") |
9 | | - |
10 | | -find_package(Threads REQUIRED) |
11 | | - |
12 | | -find_library(GGML_LIBRARY ggml |
13 | | - REQUIRED |
14 | | - HINTS ${GGML_LIB_DIR} |
15 | | - NO_CMAKE_FIND_ROOT_PATH) |
16 | | - |
17 | | -add_library(ggml::ggml UNKNOWN IMPORTED) |
18 | | -set_target_properties(ggml::ggml |
19 | | - PROPERTIES |
20 | | - IMPORTED_LOCATION "${GGML_LIBRARY}") |
21 | | - |
22 | | -find_library(GGML_BASE_LIBRARY ggml-base |
23 | | - REQUIRED |
24 | | - HINTS ${GGML_LIB_DIR} |
25 | | - NO_CMAKE_FIND_ROOT_PATH) |
26 | | - |
27 | | -add_library(ggml::ggml-base UNKNOWN IMPORTED) |
28 | | -set_target_properties(ggml::ggml-base |
29 | | - PROPERTIES |
30 | | - IMPORTED_LOCATION "${GGML_BASE_LIBRARY}") |
| 3 | +@GGML_VARIABLES_EXPANDED@ |
31 | 4 |
|
| 5 | +# Find all dependencies before creating any target. |
| 6 | +include(CMakeFindDependencyMacro) |
| 7 | +find_dependency(Threads) |
32 | 8 | if (NOT GGML_SHARED_LIB) |
| 9 | + set(GGML_CPU_INTERFACE_LINK_LIBRARIES "") |
| 10 | + set(GGML_CPU_INTERFACE_LINK_OPTIONS "") |
| 11 | + |
33 | 12 | if (APPLE AND GGML_ACCELERATE) |
34 | | - find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED) |
| 13 | + find_library(ACCELERATE_FRAMEWORK Accelerate) |
| 14 | + if(NOT ACCELERATE_FRAMEWORK) |
| 15 | + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0) |
| 16 | + return() |
| 17 | + endif() |
35 | 18 | list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${ACCELERATE_FRAMEWORK}) |
36 | 19 | endif() |
37 | 20 |
|
38 | | - if (GGML_OPENMP) |
39 | | - find_package(OpenMP REQUIRED) |
| 21 | + if (GGML_OPENMP_ENABLED) |
| 22 | + find_dependency(OpenMP) |
40 | 23 | list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES OpenMP::OpenMP_C OpenMP::OpenMP_CXX) |
41 | 24 | endif() |
42 | 25 |
|
43 | 26 | if (GGML_CPU_HBM) |
44 | | - find_library(memkind memkind REQUIRED) |
| 27 | + find_library(memkind memkind) |
| 28 | + if(NOT memkind) |
| 29 | + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0) |
| 30 | + return() |
| 31 | + endif() |
45 | 32 | list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES memkind) |
46 | 33 | endif() |
47 | 34 |
|
48 | 35 | if (GGML_BLAS) |
49 | | - find_package(BLAS REQUIRED) |
50 | | - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) |
51 | | - list(APPEND GGML_CPU_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS}) |
| 36 | + find_dependency(BLAS) |
| 37 | + list(APPEND GGML_BLAS_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES}) |
| 38 | + list(APPEND GGML_BLAS_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS}) |
52 | 39 | endif() |
53 | 40 |
|
54 | 41 | if (GGML_CUDA) |
55 | | - find_package(CUDAToolkit REQUIRED) |
| 42 | + set(GGML_CUDA_INTERFACE_LINK_LIBRARIES "") |
| 43 | + find_dependency(CUDAToolkit) |
| 44 | + if (GGML_STATIC) |
| 45 | + list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cudart_static>) |
| 46 | + if (WIN32) |
| 47 | + list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cublas> $<LINK_ONLY:CUDA::cublasLt>) |
| 48 | + else() |
| 49 | + list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cublas_static> $<LINK_ONLY:CUDA::cublasLt_static>) |
| 50 | + endif() |
| 51 | + endif() |
| 52 | + if (NOT GGML_CUDA_NO_VMM) |
| 53 | + list(APPEND GGML_CUDA_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:CUDA::cuda_driver>) |
| 54 | + endif() |
56 | 55 | endif() |
57 | 56 |
|
58 | 57 | if (GGML_METAL) |
59 | | - find_library(FOUNDATION_LIBRARY Foundation REQUIRED) |
60 | | - find_library(METAL_FRAMEWORK Metal REQUIRED) |
61 | | - find_library(METALKIT_FRAMEWORK MetalKit REQUIRED) |
| 58 | + find_library(FOUNDATION_LIBRARY Foundation) |
| 59 | + find_library(METAL_FRAMEWORK Metal) |
| 60 | + find_library(METALKIT_FRAMEWORK MetalKit) |
| 61 | + if(NOT FOUNDATION_LIBRARY OR NOT METAL_FRAMEWORK OR NOT METALKIT_FRAMEWORK) |
| 62 | + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND 0) |
| 63 | + return() |
| 64 | + endif() |
| 65 | + set(GGML_METAL_INTERFACE_LINK_LIBRARIES |
| 66 | + ${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK}) |
| 67 | + endif() |
62 | 68 |
|
63 | | - list(APPEND GGML_METAL_INTERFACE_LINK_LIBRARIES |
64 | | - ${FOUNDATION_LIBRARY} ${METAL_FRAMEWORK} ${METALKIT_FRAMEWORK}) |
| 69 | + if (GGML_OPENCL) |
| 70 | + find_dependency(OpenCL) |
| 71 | + set(GGML_OPENCL_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:OpenCL::OpenCL>) |
65 | 72 | endif() |
66 | 73 |
|
67 | 74 | if (GGML_VULKAN) |
68 | | - find_package(Vulkan REQUIRED) |
69 | | - list(APPEND GGML_VULKAN_INTERFACE_LINK_LIBRARIES Vulkan::Vulkan) |
| 75 | + find_dependency(Vulkan) |
| 76 | + set(GGML_VULKAN_INTERFACE_LINK_LIBRARIES $<LINK_ONLY:Vulkan::Vulkan>) |
70 | 77 | endif() |
71 | 78 |
|
72 | 79 | if (GGML_HIP) |
73 | | - find_package(hip REQUIRED) |
74 | | - find_package(hipblas REQUIRED) |
75 | | - find_package(rocblas REQUIRED) |
76 | | - list(APPEND GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas) |
| 80 | + find_dependency(hip) |
| 81 | + find_dependency(hipblas) |
| 82 | + find_dependency(rocblas) |
| 83 | + set(GGML_HIP_INTERFACE_LINK_LIBRARIES hip::host roc::rocblas roc::hipblas) |
77 | 84 | endif() |
78 | 85 |
|
79 | 86 | if (GGML_SYCL) |
| 87 | + set(GGML_SYCL_INTERFACE_LINK_LIBRARIES "") |
80 | 88 | find_package(DNNL) |
81 | 89 | if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL") |
82 | 90 | list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES DNNL::dnnl) |
83 | 91 | endif() |
84 | 92 | if (WIN32) |
85 | | - find_package(IntelSYCL REQUIRED) |
86 | | - find_package(MKL REQUIRED) |
| 93 | + find_dependency(IntelSYCL) |
| 94 | + find_dependency(MKL) |
87 | 95 | list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL) |
88 | 96 | endif() |
89 | 97 | endif() |
90 | 98 | endif() |
91 | 99 |
|
92 | | -set(_ggml_all_targets "") |
93 | | -foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS}) |
94 | | - string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}") |
95 | | - string(TOUPPER "${_ggml_backend_pfx}" _ggml_backend_pfx) |
| 100 | +set_and_check(GGML_INCLUDE_DIR "@PACKAGE_GGML_INCLUDE_INSTALL_DIR@") |
| 101 | +set_and_check(GGML_LIB_DIR "@PACKAGE_GGML_LIB_INSTALL_DIR@") |
| 102 | +#set_and_check(GGML_BIN_DIR "@PACKAGE_GGML_BIN_INSTALL_DIR@") |
| 103 | + |
| 104 | +if(NOT TARGET ggml::ggml) |
| 105 | + find_package(Threads REQUIRED) |
96 | 106 |
|
97 | | - find_library(${_ggml_backend_pfx}_LIBRARY ${_ggml_backend} |
| 107 | + find_library(GGML_LIBRARY ggml |
98 | 108 | REQUIRED |
99 | | - HINTS ${GGML_LIB_DIR} |
| 109 | + HINTS ${GGML_LIB_DIR} ${GGML_BACKEND_DIR} |
100 | 110 | NO_CMAKE_FIND_ROOT_PATH) |
101 | 111 |
|
102 | | - message(STATUS "Found ${${_ggml_backend_pfx}_LIBRARY}") |
| 112 | + add_library(ggml::ggml UNKNOWN IMPORTED) |
| 113 | + set_target_properties(ggml::ggml |
| 114 | + PROPERTIES |
| 115 | + IMPORTED_LOCATION "${GGML_LIBRARY}") |
103 | 116 |
|
104 | | - add_library(ggml::${_ggml_backend} UNKNOWN IMPORTED) |
105 | | - set_target_properties(ggml::${_ggml_backend} |
| 117 | + find_library(GGML_BASE_LIBRARY ggml-base |
| 118 | + REQUIRED |
| 119 | + HINTS ${GGML_LIB_DIR} |
| 120 | + NO_CMAKE_FIND_ROOT_PATH) |
| 121 | + |
| 122 | + add_library(ggml::ggml-base UNKNOWN IMPORTED) |
| 123 | + set_target_properties(ggml::ggml-base |
106 | 124 | PROPERTIES |
107 | | - INTERFACE_INCLUDE_DIRECTORIES "${GGML_INCLUDE_DIR}" |
108 | | - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" |
109 | | - IMPORTED_LOCATION "${${_ggml_backend_pfx}_LIBRARY}" |
110 | | - INTERFACE_COMPILE_FEATURES c_std_90 |
111 | | - POSITION_INDEPENDENT_CODE ON) |
112 | | - |
113 | | - string(REGEX MATCH "^ggml-cpu" is_cpu_variant "${_ggml_backend}") |
114 | | - if(is_cpu_variant) |
115 | | - list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES "ggml::ggml-base") |
116 | | - set_target_properties(ggml::${_ggml_backend} |
117 | | - PROPERTIES |
118 | | - INTERFACE_LINK_LIBRARIES "${GGML_CPU_INTERFACE_LINK_LIBRARIES}") |
| 125 | + IMPORTED_LOCATION "${GGML_BASE_LIBRARY}") |
119 | 126 |
|
120 | | - if(GGML_CPU_INTERFACE_LINK_OPTIONS) |
121 | | - set_target_properties(ggml::${_ggml_backend} |
122 | | - PROPERTIES |
123 | | - INTERFACE_LINK_OPTIONS "${GGML_CPU_INTERFACE_LINK_OPTIONS}") |
124 | | - endif() |
| 127 | + set(_ggml_all_targets "") |
| 128 | + foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS}) |
| 129 | + string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}") |
| 130 | + string(TOUPPER "${_ggml_backend_pfx}" _ggml_backend_pfx) |
125 | 131 |
|
126 | | - else() |
127 | | - list(APPEND ${_ggml_backend_pfx}_INTERFACE_LINK_LIBRARIES "ggml::ggml-base") |
| 132 | + find_library(${_ggml_backend_pfx}_LIBRARY ${_ggml_backend} |
| 133 | + REQUIRED |
| 134 | + HINTS ${GGML_LIB_DIR} |
| 135 | + NO_CMAKE_FIND_ROOT_PATH) |
| 136 | + |
| 137 | + message(STATUS "Found ${${_ggml_backend_pfx}_LIBRARY}") |
| 138 | + |
| 139 | + add_library(ggml::${_ggml_backend} UNKNOWN IMPORTED) |
128 | 140 | set_target_properties(ggml::${_ggml_backend} |
129 | 141 | PROPERTIES |
130 | | - INTERFACE_LINK_LIBRARIES "${${_ggml_backend_pfx}_INTERFACE_LINK_LIBRARIES}") |
| 142 | + INTERFACE_INCLUDE_DIRECTORIES "${GGML_INCLUDE_DIR}" |
| 143 | + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" |
| 144 | + IMPORTED_LOCATION "${${_ggml_backend_pfx}_LIBRARY}" |
| 145 | + INTERFACE_COMPILE_FEATURES c_std_90 |
| 146 | + POSITION_INDEPENDENT_CODE ON) |
| 147 | + |
| 148 | + string(REGEX MATCH "^ggml-cpu" is_cpu_variant "${_ggml_backend}") |
| 149 | + if(is_cpu_variant) |
| 150 | + list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES "ggml::ggml-base") |
| 151 | + set_target_properties(ggml::${_ggml_backend} |
| 152 | + PROPERTIES |
| 153 | + INTERFACE_LINK_LIBRARIES "${GGML_CPU_INTERFACE_LINK_LIBRARIES}") |
| 154 | + |
| 155 | + if(GGML_CPU_INTERFACE_LINK_OPTIONS) |
| 156 | + set_target_properties(ggml::${_ggml_backend} |
| 157 | + PROPERTIES |
| 158 | + INTERFACE_LINK_OPTIONS "${GGML_CPU_INTERFACE_LINK_OPTIONS}") |
| 159 | + endif() |
131 | 160 |
|
132 | | - if(${_ggml_backend_pfx}_INTERFACE_LINK_OPTIONS) |
| 161 | + else() |
| 162 | + list(APPEND ${_ggml_backend_pfx}_INTERFACE_LINK_LIBRARIES "ggml::ggml-base") |
133 | 163 | set_target_properties(ggml::${_ggml_backend} |
134 | 164 | PROPERTIES |
135 | | - INTERFACE_LINK_OPTIONS "${${_ggml_backend_pfx}_INTERFACE_LINK_OPTIONS}") |
| 165 | + INTERFACE_LINK_LIBRARIES "${${_ggml_backend_pfx}_INTERFACE_LINK_LIBRARIES}") |
| 166 | + |
| 167 | + if(${_ggml_backend_pfx}_INTERFACE_LINK_OPTIONS) |
| 168 | + set_target_properties(ggml::${_ggml_backend} |
| 169 | + PROPERTIES |
| 170 | + INTERFACE_LINK_OPTIONS "${${_ggml_backend_pfx}_INTERFACE_LINK_OPTIONS}") |
| 171 | + endif() |
136 | 172 | endif() |
137 | | - endif() |
138 | 173 |
|
139 | | - list(APPEND _ggml_all_targets ggml::${_ggml_backend}) |
140 | | -endforeach() |
| 174 | + list(APPEND _ggml_all_targets ggml::${_ggml_backend}) |
| 175 | + endforeach() |
141 | 176 |
|
142 | | -list(APPEND GGML_INTERFACE_LINK_LIBRARIES ggml::ggml-base "${_ggml_all_targets}") |
143 | | -set_target_properties(ggml::ggml |
144 | | - PROPERTIES |
145 | | - INTERFACE_LINK_LIBRARIES "${GGML_INTERFACE_LINK_LIBRARIES}") |
| 177 | + list(APPEND GGML_INTERFACE_LINK_LIBRARIES ggml::ggml-base "${_ggml_all_targets}") |
| 178 | + set_target_properties(ggml::ggml |
| 179 | + PROPERTIES |
| 180 | + INTERFACE_LINK_LIBRARIES "${GGML_INTERFACE_LINK_LIBRARIES}") |
146 | 181 |
|
147 | | -add_library(ggml::all INTERFACE IMPORTED) |
148 | | -set_target_properties(ggml::all |
149 | | - PROPERTIES |
150 | | - INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}") |
| 182 | + add_library(ggml::all INTERFACE IMPORTED) |
| 183 | + set_target_properties(ggml::all |
| 184 | + PROPERTIES |
| 185 | + INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}") |
| 186 | + |
| 187 | +endif() |
151 | 188 |
|
152 | 189 | check_required_components(ggml) |
0 commit comments