Skip to content

Commit 60f816a

Browse files
dg0ytggerganov
authored andcommitted
cmake : fix usage issues (ggml/1257)
* CMake config: Create target only once Fix error on repeated find_package(ggml). For simplicity, check only for the top-level ggml::ggml. * CMake config: Add CUDA link libs * CMake config: Add OpenCL link libs * CMake config: Use canonical find_dependency Use set and append to control link lib variables. Apply more $<LINK_ONLY...>. * CMake config: Wire OpenMP dependency
1 parent 5592f27 commit 60f816a

File tree

2 files changed

+87
-47
lines changed

2 files changed

+87
-47
lines changed

ggml/cmake/ggml-config.cmake.in

Lines changed: 85 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,130 @@
1-
2-
@GGML_VARIABLES_EXPANDED@
3-
41
@PACKAGE_INIT@
52

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@
314

5+
# Find all dependencies before creating any target.
6+
include(CMakeFindDependencyMacro)
7+
find_dependency(Threads)
328
if (NOT GGML_SHARED_LIB)
9+
set(GGML_CPU_INTERFACE_LINK_LIBRARIES "")
10+
set(GGML_CPU_INTERFACE_LINK_OPTIONS "")
11+
3312
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()
3518
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${ACCELERATE_FRAMEWORK})
3619
endif()
3720

38-
if (GGML_OPENMP)
39-
find_package(OpenMP REQUIRED)
21+
if (GGML_OPENMP_ENABLED)
22+
find_dependency(OpenMP)
4023
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
4124
endif()
4225

4326
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()
4532
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES memkind)
4633
endif()
4734

4835
if (GGML_BLAS)
49-
find_package(BLAS REQUIRED)
36+
find_dependency(BLAS)
5037
list(APPEND GGML_CPU_INTERFACE_LINK_LIBRARIES ${BLAS_LIBRARIES})
5138
list(APPEND GGML_CPU_INTERFACE_LINK_OPTIONS ${BLAS_LINKER_FLAGS})
5239
endif()
5340

5441
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()
5655
endif()
5756

5857
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()
6268

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>)
6572
endif()
6673

6774
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>)
7077
endif()
7178

7279
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)
7784
endif()
7885

7986
if (GGML_SYCL)
87+
set(GGML_SYCL_INTERFACE_LINK_LIBRARIES "")
8088
find_package(DNNL)
8189
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
8290
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES DNNL::dnnl)
8391
endif()
8492
if (WIN32)
85-
find_package(IntelSYCL REQUIRED)
86-
find_package(MKL REQUIRED)
93+
find_dependency(IntelSYCL)
94+
find_dependency(MKL)
8795
list(APPEND GGML_SYCL_INTERFACE_LINK_LIBRARIES IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
8896
endif()
8997
endif()
9098
endif()
9199

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+
106+
find_package(Threads REQUIRED)
107+
108+
find_library(GGML_LIBRARY ggml
109+
REQUIRED
110+
HINTS ${GGML_LIB_DIR}
111+
NO_CMAKE_FIND_ROOT_PATH)
112+
113+
add_library(ggml::ggml UNKNOWN IMPORTED)
114+
set_target_properties(ggml::ggml
115+
PROPERTIES
116+
IMPORTED_LOCATION "${GGML_LIBRARY}")
117+
118+
find_library(GGML_BASE_LIBRARY ggml-base
119+
REQUIRED
120+
HINTS ${GGML_LIB_DIR}
121+
NO_CMAKE_FIND_ROOT_PATH)
122+
123+
add_library(ggml::ggml-base UNKNOWN IMPORTED)
124+
set_target_properties(ggml::ggml-base
125+
PROPERTIES
126+
IMPORTED_LOCATION "${GGML_BASE_LIBRARY}")
127+
92128
set(_ggml_all_targets "")
93129
foreach(_ggml_backend ${GGML_AVAILABLE_BACKENDS})
94130
string(REPLACE "-" "_" _ggml_backend_pfx "${_ggml_backend}")
@@ -149,4 +185,6 @@ set_target_properties(ggml::all
149185
PROPERTIES
150186
INTERFACE_LINK_LIBRARIES "${_ggml_all_targets}")
151187

188+
endif() # TARGET ggml::ggml
189+
152190
check_required_components(ggml)

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,12 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
7070
if (GGML_OPENMP)
7171
find_package(OpenMP)
7272
if (OpenMP_FOUND)
73+
set(GGML_OPENMP_ENABLED "ON" CACHE INTERNAL "")
7374
target_compile_definitions(${GGML_CPU_NAME} PRIVATE GGML_USE_OPENMP)
7475

7576
target_link_libraries(${GGML_CPU_NAME} PRIVATE OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
7677
else()
78+
set(GGML_OPENMP_ENABLED "OFF" CACHE INTERNAL "")
7779
message(WARNING "OpenMP not found")
7880
endif()
7981
endif()

0 commit comments

Comments
 (0)