@@ -450,11 +450,11 @@ ifndef GGML_NO_ACCELERATE
450450 # Mac OS - include Accelerate framework.
451451 # `-framework Accelerate` works both with Apple Silicon and Mac Intel
452452 ifeq ($(UNAME_S),Darwin)
453- MK_CPPFLAGS += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS
453+ MK_CPPFLAGS += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS -DGGML_BLAS_USE_ACCELERATE
454454 MK_CPPFLAGS += -DACCELERATE_NEW_LAPACK
455455 MK_CPPFLAGS += -DACCELERATE_LAPACK_ILP64
456456 MK_LDFLAGS += -framework Accelerate
457- OBJ_GGML += ggml/src/ggml-blas.o
457+ OBJ_GGML += ggml/src/ggml-blas/ggml-blas .o
458458 endif
459459endif # GGML_NO_ACCELERATE
460460
@@ -468,25 +468,25 @@ ifdef GGML_OPENBLAS
468468 MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas)
469469 MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas)
470470 MK_LDFLAGS += $(shell pkg-config --libs openblas)
471- OBJ_GGML += ggml/src/ggml-blas.o
471+ OBJ_GGML += ggml/src/ggml-blas/ggml-blas .o
472472endif # GGML_OPENBLAS
473473
474474ifdef GGML_OPENBLAS64
475475 MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas64)
476476 MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas64)
477477 MK_LDFLAGS += $(shell pkg-config --libs openblas64)
478- OBJ_GGML += ggml/src/ggml-blas.o
478+ OBJ_GGML += ggml/src/ggml-blas/ggml-blas .o
479479endif # GGML_OPENBLAS64
480480
481481ifdef GGML_BLIS
482482 MK_CPPFLAGS += -DGGML_USE_BLAS -I/usr/local/include/blis -I/usr/include/blis
483483 MK_LDFLAGS += -lblis -L/usr/local/lib
484- OBJ_GGML += ggml/src/ggml-blas.o
484+ OBJ_GGML += ggml/src/ggml-blas/ggml-blas .o
485485endif # GGML_BLIS
486486
487487ifdef GGML_RPC
488488 MK_CPPFLAGS += -DGGML_USE_RPC
489- OBJ_GGML += ggml/src/ggml-rpc.o
489+ OBJ_GGML += ggml/src/ggml-rpc/ggml-rpc .o
490490endif # GGML_RPC
491491
492492OBJ_CUDA_TMPL = $(patsubst % .cu,% .o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-wmma* .cu) )
@@ -513,7 +513,7 @@ ifdef GGML_CUDA
513513 MK_LDFLAGS += -lcuda -lcublas -lculibos -lcudart -lcublasLt -lpthread -ldl -lrt -L$(CUDA_PATH)/lib64 -L/usr/lib64 -L$(CUDA_PATH)/targets/$(UNAME_M)-linux/lib -L$(CUDA_PATH)/lib64/stubs -L/usr/lib/wsl/lib
514514 MK_NVCCFLAGS += -use_fast_math
515515
516- OBJ_GGML += ggml/src/ggml-cuda.o
516+ OBJ_GGML += ggml/src/ggml-cuda/ggml-cuda .o
517517 OBJ_GGML += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu))
518518 OBJ_GGML += $(OBJ_CUDA_TMPL)
519519ifdef WHISPER_FATAL_WARNINGS
@@ -615,11 +615,11 @@ ggml/src/ggml-cuda/%.o: \
615615 ggml/src/ggml-cuda/common.cuh
616616 $(NVCC_COMPILE )
617617
618- ggml/src/ggml-cuda.o : \
619- ggml/src/ggml-cuda.cu \
618+ ggml/src/ggml-cuda/ggml-cuda.o : \
619+ ggml/src/ggml-cuda/ggml-cuda.cu \
620+ ggml/include/ggml-cuda.h \
620621 ggml/include/ggml.h \
621622 ggml/include/ggml-backend.h \
622- ggml/include/ggml-cuda.h \
623623 ggml/src/ggml-backend-impl.h \
624624 ggml/src/ggml-common.h \
625625 $(wildcard ggml/src/ggml-cuda/* .cuh)
@@ -742,7 +742,7 @@ endif # GGML_HIPBLAS
742742ifdef GGML_METAL
743743 MK_CPPFLAGS += -DGGML_USE_METAL
744744 MK_LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
745- OBJ_GGML += ggml/src/ggml-metal.o
745+ OBJ_GGML += ggml/src/ggml-metal/ggml-metal .o
746746ifdef GGML_METAL_NDEBUG
747747 MK_CPPFLAGS += -DGGML_METAL_NDEBUG
748748endif
@@ -753,42 +753,44 @@ ifdef GGML_METAL_EMBED_LIBRARY
753753endif
754754endif # GGML_METAL
755755
756- ifdef WHISPER_COREML
757- MK_CXXFLAGS += -DWHISPER_USE_COREML
758- LDFLAGS += -framework Foundation -framework CoreML
759-
760- ifdef WHISPER_COREML_ALLOW_FALLBACK
761- MK_CXXFLAGS += -DWHISPER_COREML_ALLOW_FALLBACK
762- endif
763- endif
764-
765- # ===
766-
767756ifdef GGML_METAL
768- ggml/src/ggml-metal.o : \
769- ggml/src/ggml-metal.m \
757+ ggml/src/ggml-metal/ggml-metal.o : \
758+ ggml/src/ggml-metal/ggml-metal.m \
759+ ggml/src/ggml-metal/ggml-metal-impl.h \
770760 ggml/include/ggml-metal.h \
771761 ggml/include/ggml.h
772762 $(CC ) $(CFLAGS ) -c $< -o $@
773763
774764ifdef GGML_METAL_EMBED_LIBRARY
775765ggml/src/ggml-metal-embed.o : \
776- ggml/src/ggml-metal.metal \
766+ ggml/src/ggml-metal/ggml-metal.metal \
767+ ggml/src/ggml-metal/ggml-metal-impl.h \
777768 ggml/src/ggml-common.h
778769 @echo " Embedding Metal library"
779- @sed -e ' /#include "ggml-common.h"/r ggml/src/ggml-common.h' -e ' /#include "ggml-common.h"/d' < ggml/src/ggml-metal.metal > ggml/src/ggml-metal-embed.metal
780- $(eval TEMP_ASSEMBLY=$(shell mktemp) )
781- @echo " .section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY )
782- @echo " .globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY )
783- @echo " _ggml_metallib_start:" >> $(TEMP_ASSEMBLY )
784- @echo " .incbin \" ggml/src/ggml-metal-embed.metal\" " >> $(TEMP_ASSEMBLY )
785- @echo " .globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY )
786- @echo " _ggml_metallib_end:" >> $(TEMP_ASSEMBLY )
787- @$(AS ) $(TEMP_ASSEMBLY ) -o $@
788- @rm -f ${TEMP_ASSEMBLY}
770+ @sed -e ' /__embed_ggml-common.h__/r ggml/src/ggml-common.h' -e ' /__embed_ggml-common.h__/d' < ggml/src/ggml-metal/ggml-metal.metal > ggml/src/ggml-metal/ggml-metal-embed.metal.tmp
771+ @sed -e ' /#include "ggml-metal-impl.h"/r ggml/src/ggml-metal/ggml-metal-impl.h' -e ' /#include "ggml-metal-impl.h"/d' < ggml/src/ggml-metal/ggml-metal-embed.metal.tmp > ggml/src/ggml-metal/ggml-metal-embed.metal
772+ $(eval TEMP_ASSEMBLY=$(shell mktemp -d) )
773+ @echo " .section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY ) /ggml-metal-embed.s
774+ @echo " .globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY ) /ggml-metal-embed.s
775+ @echo " _ggml_metallib_start:" >> $(TEMP_ASSEMBLY ) /ggml-metal-embed.s
776+ @echo " .incbin \" ggml/src/ggml-metal/ggml-metal-embed.metal\" " >> $(TEMP_ASSEMBLY ) /ggml-metal-embed.s
777+ @echo " .globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY ) /ggml-metal-embed.s
778+ @echo " _ggml_metallib_end:" >> $(TEMP_ASSEMBLY ) /ggml-metal-embed.s
779+ $(CC ) $(CFLAGS ) -c $(TEMP_ASSEMBLY ) /ggml-metal-embed.s -o $@
780+ @rm -f ${TEMP_ASSEMBLY} /ggml-metal-embed.s
781+ @rmdir ${TEMP_ASSEMBLY}
789782endif
790783endif # GGML_METAL
791784
785+ ifdef WHISPER_COREML
786+ MK_CXXFLAGS += -DWHISPER_USE_COREML
787+ LDFLAGS += -framework Foundation -framework CoreML
788+
789+ ifdef WHISPER_COREML_ALLOW_FALLBACK
790+ MK_CXXFLAGS += -DWHISPER_COREML_ALLOW_FALLBACK
791+ endif
792+ endif
793+
792794ifdef WHISPER_COREML
793795src/coreml/whisper-encoder.o : src/coreml/whisper-encoder.mm src/coreml/whisper-encoder.h
794796 $(CXX ) -O3 -I . -fobjc-arc -c src/coreml/whisper-encoder.mm -o src/coreml/whisper-encoder.o
@@ -801,11 +803,17 @@ endif
801803
802804OBJ_GGML += \
803805 ggml/src/ggml.o \
804- ggml/src/ggml-cpu .o \
806+ ggml/src/ggml-aarch64 .o \
805807 ggml/src/ggml-alloc.o \
806808 ggml/src/ggml-backend.o \
809+ ggml/src/ggml-backend-reg.o \
810+ ggml/src/ggml-opt.o \
807811 ggml/src/ggml-quants.o \
808- ggml/src/ggml-aarch64.o
812+ ggml/src/ggml-threading.o \
813+ ggml/src/ggml-cpu/ggml-cpu.o \
814+ ggml/src/ggml-cpu/ggml-cpu-cpp.o \
815+ ggml/src/ggml-cpu/ggml-cpu-aarch64.o \
816+ ggml/src/ggml-cpu/ggml-cpu-quants.o
809817
810818OBJ_WHISPER += \
811819 src/whisper.o
@@ -910,114 +918,64 @@ endif
910918# Build libraries
911919#
912920
913- # ggml
914-
915- ggml/src/ggml.o : \
916- ggml/src/ggml.c \
917- ggml/include/ggml.h
918- $(CC ) $(CFLAGS ) -c $< -o $@
919-
920- ggml/src/ggml-cpu.o : \
921- ggml/src/ggml-cpu.c \
922- ggml/include/ggml.h \
923- ggml/src/ggml-common.h
924- $(CC ) $(CFLAGS ) -c $< -o $@
925-
926- ggml/src/ggml-alloc.o : \
927- ggml/src/ggml-alloc.c \
928- ggml/include/ggml.h \
929- ggml/include/ggml-alloc.h
930- $(CC ) $(CFLAGS ) -c $< -o $@
931-
932- ggml/src/ggml-backend.o : \
933- ggml/src/ggml-backend.cpp \
934- ggml/include/ggml.h \
935- ggml/include/ggml-backend.h
936- $(CXX ) $(CXXFLAGS ) -c $< -o $@
937-
938- ggml/src/ggml-quants.o : \
939- ggml/src/ggml-quants.c \
940- ggml/include/ggml.h \
941- ggml/src/ggml-quants.h \
942- ggml/src/ggml-common.h
943- $(CC ) $(CFLAGS ) -c $< -o $@
944-
945- ggml/src/ggml-aarch64.o : \
946- ggml/src/ggml-aarch64.c \
947- ggml/include/ggml.h \
948- ggml/src/ggml-aarch64.h \
949- ggml/src/ggml-common.h
950- $(CC ) $(CFLAGS ) -c $< -o $@
921+ LIB_GGML = libggml.so
922+ LIB_GGML_S = libggml.a
951923
952- ggml/src/ggml-blas.o : \
953- ggml/src/ggml-blas.cpp \
954- ggml/include/ggml-blas.h
955- $(CXX ) $(CXXFLAGS ) -c $< -o $@
924+ LIB_LLAMA = libllama.so
925+ LIB_LLAMA_S = libllama.a
956926
957- ifdef GGML_LLAMAFILE
958- ggml/src/sgemm.o : \
959- ggml/src/sgemm.cpp \
960- ggml/src/sgemm.h \
961- ggml/include/ggml.h
962- $(CXX ) $(CXXFLAGS ) -c $< -o $@
963- endif # GGML_LLAMAFILE
927+ LIB_COMMON = libcommon.so
928+ LIB_COMMON_S = libcommon.a
964929
965- ifdef GGML_RPC
966- ggml/src/ggml-rpc.o : \
967- ggml/src/ggml-rpc.cpp \
968- ggml/include/ggml-rpc.h
969- $(CXX ) $(CXXFLAGS ) -c $< -o $@
970- endif # GGML_RPC
930+ LIB_COMMON_SDL = libcommon-sdl.so
931+ LIB_COMMON_SDL_S = libcommon-sdl.a
971932
972- $(LIB_GGML ) : \
973- $(OBJ_GGML )
974- $(CXX ) $(CXXFLAGS ) -shared -fPIC -o $@ $^ $(LDFLAGS )
933+ # Targets
934+ BUILD_TARGETS += $(LIB_GGML ) $(LIB_GGML_S ) $(LIB_LLAMA ) $(LIB_LLAMA_S ) $(LIB_COMMON ) $(LIB_COMMON_S )
975935
976- $(LIB_GGML_S ) : \
977- $(OBJ_GGML )
978- ar rcs $(LIB_GGML_S ) $^
936+ # Dependency files
937+ DEP_FILES = $(OBJ_GGML:.o=.d ) $(OBJ_LLAMA:.o=.d ) $(OBJ_COMMON:.o=.d )
979938
980- # whisper
939+ # Default target
940+ all : $(BUILD_TARGETS )
981941
982- src/whisper.o : \
983- src/whisper.cpp \
984- include/whisper.h \
942+ # Note: need this exception because `ggml-cpu.c` and `ggml-cpu.cpp` both produce the same obj/dep files
943+ # g++ -M -I ./ggml/include/ -I ./ggml/src ggml/src/ggml-cpu/ggml-cpu.cpp | grep ggml
944+ ggml/src/ggml-cpu/ggml-cpu-cpp.o : \
945+ ggml/src/ggml-cpu/ggml-cpu.cpp \
946+ ggml/include/ggml-backend.h \
985947 ggml/include/ggml.h \
986948 ggml/include/ggml-alloc.h \
987- ggml/include /ggml-backend.h \
988- ggml/include/ggml-cuda .h \
989- ggml/include /ggml-metal .h
990- $(CXX ) $(CXXFLAGS ) -c $< -o $@
949+ ggml/src /ggml-backend-impl .h \
950+ ggml/include/ggml-cpu .h \
951+ ggml/src /ggml-impl .h
952+ $(CXX ) $(CXXFLAGS ) -c $< -o $@
991953
992- $(LIB_WHISPER ) : \
993- $(OBJ_WHISPER ) \
994- $(LIB_GGML )
995- $(CXX ) $(CXXFLAGS ) -shared -fPIC -o $@ $^ $(LDFLAGS )
954+ # Rules for building object files
955+ ggml/% .o : ggml/% .c
956+ $(CC ) $(CFLAGS ) -MMD -c $< -o $@
996957
997- $(LIB_WHISPER_S ) : \
998- $(OBJ_WHISPER ) \
999- $(OBJ_GGML )
1000- ar rcs $(LIB_WHISPER_S ) $^
958+ ggml/% .o : ggml/% .cpp
959+ $(CXX ) $(CXXFLAGS ) -MMD -c $< -o $@
1001960
1002- # common
961+ src/% .o : src/% .cpp
962+ $(CXX ) $(CXXFLAGS ) -MMD -c $< -o $@
1003963
1004- examples/common.o : \
1005- examples/common.cpp \
1006- examples/common.h
1007- $(CXX ) $(CXXFLAGS ) -c $< -o $@
964+ examples/% .o : examples/% .cpp
965+ $(CXX ) $(CXXFLAGS ) -MMD -c $< -o $@
1008966
1009- examples/common-ggml.o : \
1010- examples/common-ggml.cpp \
1011- examples/common-ggml.h
1012- $(CXX ) $(CXXFLAGS ) -c $< -o $@
967+ # Rules for building libraries
968+ $(LIB_GGML ) : $(OBJ_GGML )
969+ $(CXX ) $(CXXFLAGS ) -shared -fPIC -o $@ $^ $(LDFLAGS )
970+
971+ $(LIB_GGML_S ) : $(OBJ_GGML )
972+ ar rcs $(LIB_GGML_S ) $^
1013973
1014- $(LIB_COMMON ) : \
1015- $(OBJ_COMMON )
974+ $(LIB_LLAMA ) : $(OBJ_LLAMA ) $(LIB_GGML )
1016975 $(CXX ) $(CXXFLAGS ) -shared -fPIC -o $@ $^ $(LDFLAGS )
1017976
1018- $(LIB_COMMON_S ) : \
1019- $(OBJ_COMMON )
1020- ar rcs $(LIB_COMMON_S ) $^
977+ $(LIB_LLAMA_S ) : $(OBJ_LLAMA )
978+ ar rcs $(LIB_LLAMA_S ) $^
1021979
1022980# common-sdl
1023981
@@ -1029,34 +987,21 @@ examples/common-sdl.o: \
1029987 examples/common-sdl.h
1030988 $(CXX ) $(CXXFLAGS ) $(CFLAGS_SDL ) -c $< -o $@
1031989
1032- $(LIB_COMMON_SDL ) : \
1033- $(OBJ_SDL )
1034- $(CXX ) $(CXXFLAGS ) -shared -fPIC -o $@ $^ $(LDFLAGS ) $(LDFLAGS_SDL )
990+ $(LIB_COMMON ) : $(OBJ_COMMON ) $(LIB_LLAMA ) $(LIB_GGML )
991+ $(CXX ) $(CXXFLAGS ) -shared -fPIC -o $@ $^ $(LDFLAGS )
992+
993+ $(LIB_COMMON_S ) : $(OBJ_COMMON )
994+ ar rcs $(LIB_COMMON_S ) $^
1035995
1036- $(LIB_COMMON_SDL_S ) : \
1037- $(OBJ_SDL )
1038- ar rcs $(LIB_COMMON_SDL_S ) $^
996+ # Include dependency files
997+ -include $(DEP_FILES )
1039998
999+ # Clean rule
10401000clean :
1041- rm -vrf * .dot $(BUILD_TARGETS ) $(TEST_TARGETS )
1042- rm -rvf src/* .o
1043- rm -rvf src/coreml/* .o
1044- rm -rvf tests/* .o
1045- rm -rvf examples/* .o
1046- rm -rvf * .a
1047- rm -rvf * .dll
1048- rm -rvf * .so
1049- rm -rvf * .dot
1050- rm -rvf ggml/* .a
1051- rm -rvf ggml/* .dll
1052- rm -rvf ggml/* .so
1053- rm -vrf ggml/src/* .o
1054- rm -vrf ggml/src/ggml-metal-embed.metal
1055- rm -vrf ggml/src/ggml-cuda/* .o
1056- rm -vrf ggml/src/ggml-cuda/template-instances/* .o
1057- rm -rvf $(BUILD_TARGETS )
1058- rm -rvf $(TEST_TARGETS )
1059- find examples -type f -name " *.o" -delete
1001+ rm -vrf $(BUILD_TARGETS ) $(TEST_TARGETS )
1002+ rm -rvf * .a * .dll * .so * .dot
1003+ find ggml src tests examples -type f -name " *.o" -delete
1004+ find ggml src tests examples -type f -name " *.d" -delete
10601005
10611006#
10621007# Examples
0 commit comments