mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2024-12-18 20:27:53 +00:00
build : fix embedded Metal library generation (#2045)
This commit is contained in:
parent
1b5439a6c2
commit
08d3eef97d
@ -174,19 +174,28 @@ if (APPLE)
|
|||||||
set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_EMBED_LIBRARY)
|
set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_EMBED_LIBRARY)
|
||||||
|
|
||||||
set(METALLIB_SOURCE "${CMAKE_SOURCE_DIR}/ggml-metal.metal")
|
set(METALLIB_SOURCE "${CMAKE_SOURCE_DIR}/ggml-metal.metal")
|
||||||
|
set(COMMON_HEADER "${CMAKE_SOURCE_DIR}/ggml-common.h")
|
||||||
|
|
||||||
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
|
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
|
||||||
set(EMBED_METALLIB_ASSEMBLY "${CMAKE_BINARY_DIR}/autogenerated/ggml-embed-metallib.s")
|
set(EMBED_METALLIB_ASSEMBLY "${CMAKE_BINARY_DIR}/autogenerated/ggml-embed-metallib.s")
|
||||||
|
set(EMBED_METALLIB_SOURCE "${CMAKE_BINARY_DIR}/autogenerated/ggml-metal-combined.metal")
|
||||||
|
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${EMBED_METALLIB_SOURCE}
|
||||||
|
COMMAND sed -e "/^#include \\\"ggml-common.h\\\"/r ${COMMON_HEADER}" -e "/^#include \\\"ggml-common.h\\\"/d" ${METALLIB_SOURCE} > ${EMBED_METALLIB_SOURCE}
|
||||||
|
DEPENDS ${METALLIB_SOURCE} ${COMMON_HEADER}
|
||||||
|
COMMENT "Generating combined Metal library for embedding"
|
||||||
|
)
|
||||||
|
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${EMBED_METALLIB_ASSEMBLY}
|
OUTPUT ${EMBED_METALLIB_ASSEMBLY}
|
||||||
COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
|
COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
|
||||||
COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
|
COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
|
COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
COMMAND echo ".incbin \\\"${METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
|
COMMAND echo ".incbin \\\"${EMBED_METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
|
COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
|
COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
|
||||||
DEPENDS ${METALLIB_SOURCE}
|
DEPENDS ${EMBED_METALLIB_SOURCE}
|
||||||
COMMENT "Generate assembly for embedded Metal library"
|
COMMENT "Generate assembly for embedded Metal library"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
8
Makefile
8
Makefile
@ -408,17 +408,19 @@ WHISPER_OBJ += ggml-metal.o
|
|||||||
ifdef WHISPER_METAL_EMBED_LIBRARY
|
ifdef WHISPER_METAL_EMBED_LIBRARY
|
||||||
CFLAGS += -DGGML_METAL_EMBED_LIBRARY
|
CFLAGS += -DGGML_METAL_EMBED_LIBRARY
|
||||||
|
|
||||||
ggml-metal-embed.o: ggml-metal.metal
|
ggml-metal-embed.o: ggml-metal.metal ggml-common.h
|
||||||
@echo "Embedding Metal library"
|
@echo "Embedding Metal library"
|
||||||
$(eval TEMP_ASSEMBLY=$(shell mktemp))
|
$(eval TEMP_ASSEMBLY=$(shell mktemp))
|
||||||
|
$(eval TEMP_METALLIB=$(shell mktemp))
|
||||||
|
@sed "/^#include \"ggml-common.h\"/{r ggml-common.h"$$'\n'"d;}" ggml-metal.metal > $(TEMP_METALLIB)
|
||||||
@echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
|
@echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
|
||||||
@echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
|
@echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
|
||||||
@echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
|
@echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
|
||||||
@echo ".incbin \"$<\"" >> $(TEMP_ASSEMBLY)
|
@echo ".incbin \"$(TEMP_METALLIB)\"" >> $(TEMP_ASSEMBLY)
|
||||||
@echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
|
@echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
|
||||||
@echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
|
@echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
|
||||||
@$(AS) $(TEMP_ASSEMBLY) -o $@
|
@$(AS) $(TEMP_ASSEMBLY) -o $@
|
||||||
@rm -f ${TEMP_ASSEMBLY}
|
@rm -f $(TEMP_ASSEMBLY) $(TEMP_METALLIB)
|
||||||
|
|
||||||
WHISPER_OBJ += ggml-metal-embed.o
|
WHISPER_OBJ += ggml-metal-embed.o
|
||||||
endif
|
endif
|
||||||
|
Loading…
Reference in New Issue
Block a user