mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00: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:
		| @@ -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_NDEBUG                    "llama: disable Metal debugging"                   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_MPI                             "llama: use MPI"                                   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 | ||||
|     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) | ||||
|         # custom command to do the following: | ||||
|         #   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 | ||||
| 	MK_CPPFLAGS += -DGGML_METAL_NDEBUG | ||||
| endif | ||||
| ifdef LLAMA_METAL_EMBED_LIBRARY | ||||
| 	MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY | ||||
| 	OBJS        += ggml-metal-embed.o | ||||
| endif | ||||
| endif # LLAMA_METAL | ||||
|  | ||||
| ifdef LLAMA_METAL | ||||
| ggml-metal.o: ggml-metal.m ggml-metal.h | ||||
| 	$(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 | ||||
|  | ||||
| ifdef LLAMA_MPI | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Haoxiang Fei
					Haoxiang Fei