Skip to content

Commit 40b0070

Browse files
committed
make : update to new ggml structure
1 parent a348c8e commit 40b0070

File tree

2 files changed

+102
-153
lines changed

2 files changed

+102
-153
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
*.o
22
*.a
3+
*.d
34
.cache/
45
.coreml/
56
.test/
@@ -19,6 +20,9 @@ build-*/
1920
.swiftpm
2021
*.metallib
2122

23+
ggml-metal-embed.metal
24+
ggml-metal-embed.metal.tmp
25+
2226
/main
2327
/stream
2428
/command

Makefile

Lines changed: 98 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -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
459459
endif # 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
472472
endif # GGML_OPENBLAS
473473

474474
ifdef 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
479479
endif # GGML_OPENBLAS64
480480

481481
ifdef 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
485485
endif # GGML_BLIS
486486

487487
ifdef 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
490490
endif # GGML_RPC
491491

492492
OBJ_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)
519519
ifdef 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
742742
ifdef 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
746746
ifdef GGML_METAL_NDEBUG
747747
MK_CPPFLAGS += -DGGML_METAL_NDEBUG
748748
endif
@@ -753,42 +753,44 @@ ifdef GGML_METAL_EMBED_LIBRARY
753753
endif
754754
endif # 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-
767756
ifdef 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

774764
ifdef GGML_METAL_EMBED_LIBRARY
775765
ggml/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}
789782
endif
790783
endif # 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+
792794
ifdef WHISPER_COREML
793795
src/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

802804
OBJ_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

810818
OBJ_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
10401000
clean:
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

Comments
 (0)