option(GGML_OPENBLAS "ggml: use OpenBLAS" OFF)
option(GGML_CLBLAST "ggml: use clBLAST" OFF)
option(GGML_CUBLAS "ggml: use cuBLAS" OFF)
+option(GGML_METAL "ggml: use Metal" OFF)
# sanitizers
endif()
endif()
+if (GGML_METAL)
+ find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
+ find_library(METAL_FRAMEWORK Metal REQUIRED)
+ find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
+ find_library(METALPERFORMANCE_FRAMEWORK MetalPerformanceShaders REQUIRED)
+
+ set(GGML_METAL_SOURCES ggml-metal.m ggml-metal.h)
+
+ add_compile_definitions(GGML_USE_METAL)
+ add_compile_definitions(GGML_METAL_NDEBUG)
+
+ # get full path to the file
+ #add_compile_definitions(GGML_METAL_DIR_KERNELS="${CMAKE_CURRENT_SOURCE_DIR}/")
+
+ # copy ggml-metal.metal to bin directory
+ configure_file(ggml-metal.metal ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.metal COPYONLY)
+
+ set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS}
+ ${FOUNDATION_LIBRARY}
+ ${METAL_FRAMEWORK}
+ ${METALKIT_FRAMEWORK}
+ ${METALPERFORMANCE_FRAMEWORK}
+ )
+endif()
if (GGML_PERF)
set(GGML_EXTRA_FLAGS ${GGML_EXTRA_FLAGS} -DGGML_PERF)
ggml.c
../include/ggml/ggml.h
${GGML_CUDA_SOURCES}
- ${GGML_OPENCL_SOURCES})
+ ${GGML_OPENCL_SOURCES}
+ ${GGML_METAL_SOURCES}
+ )
target_include_directories(${TARGET} PUBLIC
.