From f0a4425d5694cfc4fbbb9811cd499b82b6633db8 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sat, 11 Jan 2025 23:35:46 +0100 Subject: [PATCH] combine libraries Signed-off-by: Ettore Di Giacinto --- .../go/image/stablediffusion-ggml/Makefile | 25 ++++++++++++++++++- backend/go/image/stablediffusion-ggml/gosd.go | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/backend/go/image/stablediffusion-ggml/Makefile b/backend/go/image/stablediffusion-ggml/Makefile index d009fe01..7c6d9a17 100644 --- a/backend/go/image/stablediffusion-ggml/Makefile +++ b/backend/go/image/stablediffusion-ggml/Makefile @@ -46,11 +46,34 @@ endif # warnings CXXFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function +# Find all .a archives in ARCHIVE_DIR +# (ggml can have different backends cpu, cuda, etc., each backend generates a .a archive) +GGML_ARCHIVE_DIR := build/ggml/src/ +ALL_ARCHIVES := $(shell find $(GGML_ARCHIVE_DIR) -type f -name '*.a') + +# Name of the single merged library +COMBINED_LIB := libggmlall.a + +# Rule to merge all the .a files into one +$(COMBINED_LIB): $(ALL_ARCHIVES) + @echo "Merging all .a into $(COMBINED_LIB)" + rm -f $@ + mkdir -p merge-tmp + for a in $(ALL_ARCHIVES); do \ + ( cd merge-tmp && ar x ../$$a ); \ + done + ( cd merge-tmp && ar rcs ../$@ *.o ) + # Ensure we have a proper index + ranlib $@ + # Clean up + rm -rf merge-tmp + build/libstable-diffusion.a: mkdir -p build && \ cd build && \ cmake $(CMAKE_ARGS) ../../../../../sources/stablediffusion-ggml.cpp && \ cmake --build . --config Release + $(MAKE) $(COMBINED_LIB) gosd.o: $(CXX) $(CXXFLAGS) gosd.cpp -o gosd.o -c @@ -60,4 +83,4 @@ libsd.a: gosd.o $(AR) rcs libsd.a gosd.o clean: - rm -f gosd.o libsd.a build \ No newline at end of file + rm -rf gosd.o libsd.a build $(COMBINED_LIB) \ No newline at end of file diff --git a/backend/go/image/stablediffusion-ggml/gosd.go b/backend/go/image/stablediffusion-ggml/gosd.go index 29d0033d..8c3bdb90 100644 --- a/backend/go/image/stablediffusion-ggml/gosd.go +++ b/backend/go/image/stablediffusion-ggml/gosd.go @@ -1,7 +1,7 @@ package main // #cgo CXXFLAGS: -I${SRCDIR}/../../../../sources/stablediffusion-ggml.cpp/thirdparty -I${SRCDIR}/../../../../sources/stablediffusion-ggml.cpp -I${SRCDIR}/../../../../sources/stablediffusion-ggml.cpp/ggml/include -// #cgo LDFLAGS: -L${SRCDIR}/ -L${SRCDIR}/../../../../sources/stablediffusion-ggml.cpp/build/ggml/src/ggml-cpu -L${SRCDIR}/../../../../sources/stablediffusion-ggml.cpp/build/ggml/src -lsd -lstdc++ -lm -lggml -lggml-base -lggml-cpu -lgomp +// #cgo LDFLAGS: -L${SRCDIR}/ -lsd -lstdc++ -lm -lggmlall -lgomp // #include // #include import "C"