Skip to content

Commit 08d3eef

Browse files
authored
build : fix embedded Metal library generation (ggml-org#2045)
1 parent 1b5439a commit 08d3eef

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

CMakeLists.txt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,19 +174,28 @@ if (APPLE)
174174
set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_EMBED_LIBRARY)
175175

176176
set(METALLIB_SOURCE "${CMAKE_SOURCE_DIR}/ggml-metal.metal")
177+
set(COMMON_HEADER "${CMAKE_SOURCE_DIR}/ggml-common.h")
177178

178179
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
179180
set(EMBED_METALLIB_ASSEMBLY "${CMAKE_BINARY_DIR}/autogenerated/ggml-embed-metallib.s")
181+
set(EMBED_METALLIB_SOURCE "${CMAKE_BINARY_DIR}/autogenerated/ggml-metal-combined.metal")
182+
183+
add_custom_command(
184+
OUTPUT ${EMBED_METALLIB_SOURCE}
185+
COMMAND sed -e "/^#include \\\"ggml-common.h\\\"/r ${COMMON_HEADER}" -e "/^#include \\\"ggml-common.h\\\"/d" ${METALLIB_SOURCE} > ${EMBED_METALLIB_SOURCE}
186+
DEPENDS ${METALLIB_SOURCE} ${COMMON_HEADER}
187+
COMMENT "Generating combined Metal library for embedding"
188+
)
180189

181190
add_custom_command(
182191
OUTPUT ${EMBED_METALLIB_ASSEMBLY}
183192
COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
184193
COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
185194
COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
186-
COMMAND echo ".incbin \\\"${METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
195+
COMMAND echo ".incbin \\\"${EMBED_METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
187196
COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
188197
COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
189-
DEPENDS ${METALLIB_SOURCE}
198+
DEPENDS ${EMBED_METALLIB_SOURCE}
190199
COMMENT "Generate assembly for embedded Metal library"
191200
)
192201

Makefile

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -408,17 +408,19 @@ WHISPER_OBJ += ggml-metal.o
408408
ifdef WHISPER_METAL_EMBED_LIBRARY
409409
CFLAGS += -DGGML_METAL_EMBED_LIBRARY
410410

411-
ggml-metal-embed.o: ggml-metal.metal
411+
ggml-metal-embed.o: ggml-metal.metal ggml-common.h
412412
@echo "Embedding Metal library"
413413
$(eval TEMP_ASSEMBLY=$(shell mktemp))
414+
$(eval TEMP_METALLIB=$(shell mktemp))
415+
@sed "/^#include \"ggml-common.h\"/{r ggml-common.h"$$'\n'"d;}" ggml-metal.metal > $(TEMP_METALLIB)
414416
@echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
415417
@echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
416418
@echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
417-
@echo ".incbin \"$<\"" >> $(TEMP_ASSEMBLY)
419+
@echo ".incbin \"$(TEMP_METALLIB)\"" >> $(TEMP_ASSEMBLY)
418420
@echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
419421
@echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
420422
@$(AS) $(TEMP_ASSEMBLY) -o $@
421-
@rm -f ${TEMP_ASSEMBLY}
423+
@rm -f $(TEMP_ASSEMBLY) $(TEMP_METALLIB)
422424

423425
WHISPER_OBJ += ggml-metal-embed.o
424426
endif

0 commit comments

Comments
 (0)