@@ -64,14 +64,15 @@ if (NOT MSVC)
64
64
endif ()
65
65
66
66
# 3rd party libs
67
- option (LLAMA_ACCELERATE "llama: enable Accelerate framework" ON )
68
- option (LLAMA_BLAS "llama: use BLAS" OFF )
67
+ option (LLAMA_ACCELERATE "llama: enable Accelerate framework" ON )
68
+ option (LLAMA_BLAS "llama: use BLAS" OFF )
69
69
set (LLAMA_BLAS_VENDOR "Generic" CACHE STRING "llama: BLAS library vendor" )
70
- option (LLAMA_CUBLAS "llama: use cuBLAS" OFF )
71
- set (LLAMA_CUDA_DMMV_X "32" CACHE STRING "llama: x stride for dmmv CUDA kernels" )
72
- set (LLAMA_CUDA_DMMV_Y "1" CACHE STRING "llama: y block size for dmmv CUDA kernels" )
73
- option (LLAMA_CLBLAST "llama: use CLBlast" OFF )
74
- option (LLAMA_HIPBLAS "llama: use hipBLAS" OFF )
70
+ option (LLAMA_CUBLAS "llama: use cuBLAS" OFF )
71
+ set (LLAMA_CUDA_DMMV_X "32" CACHE STRING "llama: x stride for dmmv CUDA kernels" )
72
+ set (LLAMA_CUDA_DMMV_Y "1" CACHE STRING "llama: y block size for dmmv CUDA kernels" )
73
+ option (LLAMA_HIPBLAS "llama: use hipBLAS" OFF )
74
+ option (LLAMA_CLBLAST "llama: use CLBlast" OFF )
75
+ option (LLAMA_METAL "llama: use Metal" OFF )
75
76
76
77
option (LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE} )
77
78
option (LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE} )
@@ -184,7 +185,7 @@ if (LLAMA_CUBLAS)
184
185
185
186
enable_language (CUDA)
186
187
187
- set (GGML_CUDA_SOURCES ggml-cuda.cu ggml-cuda.h)
188
+ set (GGML_SOURCES_CUDA ggml-cuda.cu ggml-cuda.h)
188
189
189
190
add_compile_definitions (GGML_USE_CUBLAS)
190
191
add_compile_definitions (GGML_CUDA_DMMV_X=${LLAMA_CUDA_DMMV_X} )
@@ -201,12 +202,37 @@ if (LLAMA_CUBLAS)
201
202
endif ()
202
203
endif ()
203
204
205
+ if (LLAMA_METAL)
206
+ find_library (FOUNDATION_LIBRARY Foundation REQUIRED)
207
+ find_library (METAL_FRAMEWORK Metal REQUIRED)
208
+ find_library (METALKIT_FRAMEWORK MetalKit REQUIRED)
209
+ find_library (METALPERFORMANCE_FRAMEWORK MetalPerformanceShaders REQUIRED)
210
+
211
+ set (GGML_SOURCES_METAL ggml-metal.m ggml-metal.h)
212
+
213
+ add_compile_definitions (GGML_USE_METAL)
214
+ add_compile_definitions (GGML_METAL_NDEBUG)
215
+
216
+ # get full path to the file
217
+ #add_compile_definitions(GGML_METAL_DIR_KERNELS="${CMAKE_CURRENT_SOURCE_DIR}/")
218
+
219
+ # copy ggml-metal.metal to bin directory
220
+ configure_file (ggml-metal.metal bin/ggml-metal.metal COPYONLY )
221
+
222
+ set (LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS}
223
+ ${FOUNDATION_LIBRARY}
224
+ ${METAL_FRAMEWORK}
225
+ ${METALKIT_FRAMEWORK}
226
+ ${METALPERFORMANCE_FRAMEWORK}
227
+ )
228
+ endif ()
229
+
204
230
if (LLAMA_CLBLAST)
205
231
find_package (CLBlast)
206
232
if (CLBlast_FOUND)
207
233
message (STATUS "CLBlast found" )
208
234
209
- set (GGML_OPENCL_SOURCES ggml-opencl.cpp ggml-opencl.h)
235
+ set (GGML_SOURCES_OPENCL ggml-opencl.cpp ggml-opencl.h)
210
236
211
237
add_compile_definitions (GGML_USE_CLBLAST)
212
238
@@ -402,8 +428,12 @@ endif()
402
428
add_library (ggml OBJECT
403
429
ggml.c
404
430
ggml.h
405
- ${GGML_CUDA_SOURCES}
406
- ${GGML_OPENCL_SOURCES} )
431
+ ggml-quants-k.h
432
+ ggml-quants-k.c
433
+ ${GGML_SOURCES_CUDA}
434
+ ${GGML_SOURCES_OPENCL}
435
+ ${GGML_SOURCES_METAL}
436
+ )
407
437
408
438
target_include_directories (ggml PUBLIC .)
409
439
target_compile_features (ggml PUBLIC c_std_11) # don't bump
@@ -416,21 +446,25 @@ endif()
416
446
add_library (llama
417
447
llama.cpp
418
448
llama.h
419
- llama-util.h)
449
+ llama-util.h
450
+ )
420
451
421
452
target_include_directories (llama PUBLIC .)
422
453
target_compile_features (llama PUBLIC cxx_std_11) # don't bump
423
- target_link_libraries (llama PRIVATE ggml ${LLAMA_EXTRA_LIBS} )
454
+ target_link_libraries (llama PRIVATE
455
+ ggml
456
+ ${LLAMA_EXTRA_LIBS}
457
+ )
424
458
425
459
if (BUILD_SHARED_LIBS )
426
460
set_target_properties (llama PROPERTIES POSITION_INDEPENDENT_CODE ON )
427
461
target_compile_definitions (llama PRIVATE LLAMA_SHARED LLAMA_BUILD)
428
462
endif ()
429
463
430
- if (GGML_CUDA_SOURCES )
464
+ if (GGML_SOURCES_CUDA )
431
465
message (STATUS "GGML CUDA sources found, configuring CUDA architecture" )
432
- set_property (TARGET ggml PROPERTY CUDA_ARCHITECTURES OFF )
433
- set_property (TARGET ggml PROPERTY CUDA_SELECT_NVCC_ARCH_FLAGS "Auto" )
466
+ set_property (TARGET ggml PROPERTY CUDA_ARCHITECTURES OFF )
467
+ set_property (TARGET ggml PROPERTY CUDA_SELECT_NVCC_ARCH_FLAGS "Auto" )
434
468
set_property (TARGET llama PROPERTY CUDA_ARCHITECTURES OFF )
435
469
endif ()
436
470
0 commit comments