@@ -64,14 +64,15 @@ if (NOT MSVC)
6464endif ()
6565
6666# 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 )
6969set (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 )
7576
7677option (LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE} )
7778option (LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE} )
@@ -184,7 +185,7 @@ if (LLAMA_CUBLAS)
184185
185186 enable_language (CUDA)
186187
187- set (GGML_CUDA_SOURCES ggml-cuda.cu ggml-cuda.h)
188+ set (GGML_SOURCES_CUDA ggml-cuda.cu ggml-cuda.h)
188189
189190 add_compile_definitions (GGML_USE_CUBLAS)
190191 add_compile_definitions (GGML_CUDA_DMMV_X=${LLAMA_CUDA_DMMV_X} )
@@ -201,12 +202,37 @@ if (LLAMA_CUBLAS)
201202 endif ()
202203endif ()
203204
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+
204230if (LLAMA_CLBLAST)
205231 find_package (CLBlast)
206232 if (CLBlast_FOUND)
207233 message (STATUS "CLBlast found" )
208234
209- set (GGML_OPENCL_SOURCES ggml-opencl.cpp ggml-opencl.h)
235+ set (GGML_SOURCES_OPENCL ggml-opencl.cpp ggml-opencl.h)
210236
211237 add_compile_definitions (GGML_USE_CLBLAST)
212238
@@ -402,8 +428,12 @@ endif()
402428add_library (ggml OBJECT
403429 ggml.c
404430 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+ )
407437
408438target_include_directories (ggml PUBLIC .)
409439target_compile_features (ggml PUBLIC c_std_11) # don't bump
@@ -416,21 +446,25 @@ endif()
416446add_library (llama
417447 llama.cpp
418448 llama.h
419- llama-util.h)
449+ llama-util.h
450+ )
420451
421452target_include_directories (llama PUBLIC .)
422453target_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+ )
424458
425459if (BUILD_SHARED_LIBS )
426460 set_target_properties (llama PROPERTIES POSITION_INDEPENDENT_CODE ON )
427461 target_compile_definitions (llama PRIVATE LLAMA_SHARED LLAMA_BUILD)
428462endif ()
429463
430- if (GGML_CUDA_SOURCES )
464+ if (GGML_SOURCES_CUDA )
431465 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" )
434468 set_property (TARGET llama PROPERTY CUDA_ARCHITECTURES OFF )
435469endif ()
436470
0 commit comments