Didzis Gosko commited on
Commit
b0e83a9
·
unverified ·
1 Parent(s): d35f8ae

build : fix embedded Metal library generation (#2045)

Browse files
Files changed (2) hide show
  1. CMakeLists.txt +11 -2
  2. Makefile +5 -3
CMakeLists.txt CHANGED
@@ -174,19 +174,28 @@ if (APPLE)
174
  set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_EMBED_LIBRARY)
175
 
176
  set(METALLIB_SOURCE "${CMAKE_SOURCE_DIR}/ggml-metal.metal")
 
177
 
178
  file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
179
  set(EMBED_METALLIB_ASSEMBLY "${CMAKE_BINARY_DIR}/autogenerated/ggml-embed-metallib.s")
 
 
 
 
 
 
 
 
180
 
181
  add_custom_command(
182
  OUTPUT ${EMBED_METALLIB_ASSEMBLY}
183
  COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
184
  COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
185
  COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
186
- COMMAND echo ".incbin \\\"${METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
187
  COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
188
  COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
189
- DEPENDS ${METALLIB_SOURCE}
190
  COMMENT "Generate assembly for embedded Metal library"
191
  )
192
 
 
174
  set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_EMBED_LIBRARY)
175
 
176
  set(METALLIB_SOURCE "${CMAKE_SOURCE_DIR}/ggml-metal.metal")
177
+ set(COMMON_HEADER "${CMAKE_SOURCE_DIR}/ggml-common.h")
178
 
179
  file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
180
  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
+ )
189
 
190
  add_custom_command(
191
  OUTPUT ${EMBED_METALLIB_ASSEMBLY}
192
  COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
193
  COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
194
  COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
195
+ COMMAND echo ".incbin \\\"${EMBED_METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
196
  COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
197
  COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
198
+ DEPENDS ${EMBED_METALLIB_SOURCE}
199
  COMMENT "Generate assembly for embedded Metal library"
200
  )
201
 
Makefile CHANGED
@@ -408,17 +408,19 @@ WHISPER_OBJ += ggml-metal.o
408
  ifdef WHISPER_METAL_EMBED_LIBRARY
409
  CFLAGS += -DGGML_METAL_EMBED_LIBRARY
410
 
411
- ggml-metal-embed.o: ggml-metal.metal
412
  @echo "Embedding Metal library"
413
  $(eval TEMP_ASSEMBLY=$(shell mktemp))
 
 
414
  @echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
415
  @echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
416
  @echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
417
- @echo ".incbin \"$<\"" >> $(TEMP_ASSEMBLY)
418
  @echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
419
  @echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
420
  @$(AS) $(TEMP_ASSEMBLY) -o $@
421
- @rm -f ${TEMP_ASSEMBLY}
422
 
423
  WHISPER_OBJ += ggml-metal-embed.o
424
  endif
 
408
  ifdef WHISPER_METAL_EMBED_LIBRARY
409
  CFLAGS += -DGGML_METAL_EMBED_LIBRARY
410
 
411
+ ggml-metal-embed.o: ggml-metal.metal ggml-common.h
412
  @echo "Embedding Metal library"
413
  $(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)
416
  @echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
417
  @echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
418
  @echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
419
+ @echo ".incbin \"$(TEMP_METALLIB)\"" >> $(TEMP_ASSEMBLY)
420
  @echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
421
  @echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
422
  @$(AS) $(TEMP_ASSEMBLY) -o $@
423
+ @rm -f $(TEMP_ASSEMBLY) $(TEMP_METALLIB)
424
 
425
  WHISPER_OBJ += ggml-metal-embed.o
426
  endif