mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2024-12-25 22:08:46 +01:00
metal : add build system support for embedded metal library (#5604)
* add build support for embedded metal library * Update Makefile --------- Co-authored-by: Haoxiang Fei <feihaoxiang@idea.edu.cn> Co-authored-by: Georgi Gerganov <ggerganov@gmail.com>
This commit is contained in:
parent
c0a8c6db37
commit
8dbbd75754
@ -110,6 +110,7 @@ option(LLAMA_VULKAN_RUN_TESTS "llama: run Vulkan tests"
|
|||||||
option(LLAMA_METAL "llama: use Metal" ${LLAMA_METAL_DEFAULT})
|
option(LLAMA_METAL "llama: use Metal" ${LLAMA_METAL_DEFAULT})
|
||||||
option(LLAMA_METAL_NDEBUG "llama: disable Metal debugging" OFF)
|
option(LLAMA_METAL_NDEBUG "llama: disable Metal debugging" OFF)
|
||||||
option(LLAMA_METAL_SHADER_DEBUG "llama: compile Metal with -fno-fast-math" OFF)
|
option(LLAMA_METAL_SHADER_DEBUG "llama: compile Metal with -fno-fast-math" OFF)
|
||||||
|
option(LLAMA_METAL_EMBED_LIBRARY "llama: embed Metal library" OFF)
|
||||||
option(LLAMA_KOMPUTE "llama: use Kompute" OFF)
|
option(LLAMA_KOMPUTE "llama: use Kompute" OFF)
|
||||||
option(LLAMA_MPI "llama: use MPI" OFF)
|
option(LLAMA_MPI "llama: use MPI" OFF)
|
||||||
option(LLAMA_QKK_64 "llama: use super-block size of 64 for k-quants" OFF)
|
option(LLAMA_QKK_64 "llama: use super-block size of 64 for k-quants" OFF)
|
||||||
@ -201,6 +202,29 @@ if (LLAMA_METAL)
|
|||||||
# copy ggml-metal.metal to bin directory
|
# copy ggml-metal.metal to bin directory
|
||||||
configure_file(ggml-metal.metal ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.metal COPYONLY)
|
configure_file(ggml-metal.metal ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.metal COPYONLY)
|
||||||
|
|
||||||
|
if (LLAMA_METAL_EMBED_LIBRARY)
|
||||||
|
enable_language(ASM)
|
||||||
|
add_compile_definitions(GGML_METAL_EMBED_LIBRARY)
|
||||||
|
|
||||||
|
set(METALLIB_SOURCE "${CMAKE_SOURCE_DIR}/ggml-metal.metal")
|
||||||
|
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
|
||||||
|
set(EMBED_METALLIB_ASSEMBLY "${CMAKE_BINARY_DIR}/autogenerated/ggml-embed-metallib.s")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
COMMAND echo ".incbin \\\"${METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
|
DEPENDS ${METALLIB_SOURCE}
|
||||||
|
COMMENT "Generate assembly for embedded Metal library"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(GGML_SOURCES_METAL ${GGML_SOURCES_METAL} ${EMBED_METALLIB_ASSEMBLY})
|
||||||
|
endif()
|
||||||
|
|
||||||
if (LLAMA_METAL_SHADER_DEBUG)
|
if (LLAMA_METAL_SHADER_DEBUG)
|
||||||
# custom command to do the following:
|
# custom command to do the following:
|
||||||
# xcrun -sdk macosx metal -fno-fast-math -c ggml-metal.metal -o ggml-metal.air
|
# xcrun -sdk macosx metal -fno-fast-math -c ggml-metal.metal -o ggml-metal.air
|
||||||
|
18
Makefile
18
Makefile
@ -533,11 +533,29 @@ ifdef LLAMA_METAL
|
|||||||
ifdef LLAMA_METAL_NDEBUG
|
ifdef LLAMA_METAL_NDEBUG
|
||||||
MK_CPPFLAGS += -DGGML_METAL_NDEBUG
|
MK_CPPFLAGS += -DGGML_METAL_NDEBUG
|
||||||
endif
|
endif
|
||||||
|
ifdef LLAMA_METAL_EMBED_LIBRARY
|
||||||
|
MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY
|
||||||
|
OBJS += ggml-metal-embed.o
|
||||||
|
endif
|
||||||
endif # LLAMA_METAL
|
endif # LLAMA_METAL
|
||||||
|
|
||||||
ifdef LLAMA_METAL
|
ifdef LLAMA_METAL
|
||||||
ggml-metal.o: ggml-metal.m ggml-metal.h
|
ggml-metal.o: ggml-metal.m ggml-metal.h
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
ifdef LLAMA_METAL_EMBED_LIBRARY
|
||||||
|
ggml-metal-embed.o: ggml-metal.metal
|
||||||
|
@echo "Embedding Metal library"
|
||||||
|
$(eval TEMP_ASSEMBLY=$(shell mktemp))
|
||||||
|
@echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
|
||||||
|
@echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
|
||||||
|
@echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
|
||||||
|
@echo ".incbin \"$<\"" >> $(TEMP_ASSEMBLY)
|
||||||
|
@echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
|
||||||
|
@echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
|
||||||
|
@$(AS) $(TEMP_ASSEMBLY) -o $@
|
||||||
|
@rm -f ${TEMP_ASSEMBLY}
|
||||||
|
endif
|
||||||
endif # LLAMA_METAL
|
endif # LLAMA_METAL
|
||||||
|
|
||||||
ifdef LLAMA_MPI
|
ifdef LLAMA_MPI
|
||||||
|
Loading…
Reference in New Issue
Block a user