Spaces:
Sleeping
Sleeping
Didzis Gosko
commited on
build : fix embedded Metal library generation (#2045)
Browse files- CMakeLists.txt +11 -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 \\\"${
|
| 187 |
COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
|
| 188 |
COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
|
| 189 |
-
DEPENDS ${
|
| 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 \"
|
| 418 |
@echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
|
| 419 |
@echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
|
| 420 |
@$(AS) $(TEMP_ASSEMBLY) -o $@
|
| 421 |
-
@rm -f $
|
| 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
|