1
- INCLUDE_PATH := $(abspath ./)
2
- LIBRARY_PATH := $(abspath ./)
3
-
4
- AR? =ar
5
1
CMAKE_ARGS? =
6
2
BUILD_TYPE? =
7
3
NATIVE? =false
8
- CUDA_LIBPATH? =/usr/local/cuda/lib64/
9
- ONEAPI_VARS? =/opt/intel/oneapi/setvars.sh
10
- # keep standard at C11 and C++11
11
- CXXFLAGS = -I. -I$(INCLUDE_PATH ) /sources/stablediffusion-ggml.cpp/thirdparty -I$(INCLUDE_PATH ) /sources/stablediffusion-ggml.cpp/ggml/include -I$(INCLUDE_PATH ) /sources/stablediffusion-ggml.cpp -O3 -DNDEBUG -std=c++17 -fPIC
12
4
13
5
GOCMD? =go
14
- CGO_LDFLAGS? =
15
- # Avoid parent make file overwriting CGO_LDFLAGS which is needed for hipblas
16
- CGO_LDFLAGS_SYCL =
17
6
GO_TAGS? =
18
- LD_FLAGS? =
7
+ JOBS? = $( shell nproc --ignore=1)
19
8
20
9
# stablediffusion.cpp (ggml)
21
10
STABLEDIFFUSION_GGML_REPO? =https://github.com/leejet/stable-diffusion.cpp
22
11
STABLEDIFFUSION_GGML_VERSION? =5900ef6605c6fbf7934239f795c13c97bc993853
23
12
24
- # Disable Shared libs as we are linking on static gRPC and we can't mix shared and static
25
- CMAKE_ARGS+=-DBUILD_SHARED_LIBS =OFF -DGGML_MAX_NAME=128 -DSD_USE_SYSTEM_GGML=OFF
13
+ CMAKE_ARGS+=-DGGML_MAX_NAME =128
26
14
27
15
ifeq ($(NATIVE ) ,false)
28
16
CMAKE_ARGS+=-DGGML_NATIVE=OFF
31
19
# If build type is cublas, then we set -DGGML_CUDA=ON to CMAKE_ARGS automatically
32
20
ifeq ($(BUILD_TYPE ) ,cublas)
33
21
CMAKE_ARGS+=-DSD_CUDA=ON -DGGML_CUDA=ON
34
- CGO_LDFLAGS+=-lcublas -lcudart -L$(CUDA_LIBPATH) -L$(CUDA_LIBPATH)/stubs/ -lcuda
35
22
# If build type is openblas then we set -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS
36
23
# to CMAKE_ARGS automatically
37
24
else ifeq ($(BUILD_TYPE),openblas)
@@ -46,14 +33,12 @@ else ifeq ($(BUILD_TYPE),hipblas)
46
33
# But if it's OSX without metal, disable it here
47
34
else ifeq ($(BUILD_TYPE),vulkan)
48
35
CMAKE_ARGS+=-DSD_VULKAN=ON -DGGML_VULKAN=ON
49
- CGO_LDFLAGS+=-lvulkan
50
36
else ifeq ($(OS),Darwin)
51
37
ifneq ($(BUILD_TYPE),metal)
52
38
CMAKE_ARGS+=-DSD_METAL=OFF -DGGML_METAL=OFF
53
39
else
54
40
CMAKE_ARGS+=-DSD_METAL=ON -DGGML_METAL=ON
55
41
CMAKE_ARGS+=-DGGML_METAL_EMBED_LIBRARY=ON
56
- TARGET+=--target ggml-metal
57
42
endif
58
43
endif
59
44
@@ -63,91 +48,36 @@ ifeq ($(BUILD_TYPE),sycl_f16)
63
48
-DCMAKE_CXX_COMPILER=icpx \
64
49
-DSD_SYCL=ON \
65
50
-DGGML_SYCL_F16=ON
66
- export CC=icx
67
- export CXX=icpx
68
- CGO_LDFLAGS_SYCL += -fsycl -L${DNNLROOT}/lib -ldnnl ${MKLROOT}/lib/intel64/libmkl_sycl.a -fiopenmp -fopenmp-targets=spir64 -lOpenCL
69
- CGO_LDFLAGS_SYCL += $(shell pkg-config --libs mkl-static-lp64-gomp)
70
- CGO_CXXFLAGS += -fiopenmp -fopenmp-targets=spir64
71
- CGO_CXXFLAGS += $(shell pkg-config --cflags mkl-static-lp64-gomp )
72
51
endif
73
52
74
53
ifeq ($(BUILD_TYPE ) ,sycl_f32)
75
54
CMAKE_ARGS+=-DGGML_SYCL=ON \
76
55
-DCMAKE_C_COMPILER=icx \
77
56
-DCMAKE_CXX_COMPILER=icpx \
78
57
-DSD_SYCL=ON
79
- export CC=icx
80
- export CXX=icpx
81
- CGO_LDFLAGS_SYCL += -fsycl -L${DNNLROOT}/lib -ldnnl ${MKLROOT}/lib/intel64/libmkl_sycl.a -fiopenmp -fopenmp-targets=spir64 -lOpenCL
82
- CGO_LDFLAGS_SYCL += $(shell pkg-config --libs mkl-static-lp64-gomp)
83
- CGO_CXXFLAGS += -fiopenmp -fopenmp-targets=spir64
84
- CGO_CXXFLAGS += $(shell pkg-config --cflags mkl-static-lp64-gomp )
85
58
endif
86
59
87
- # warnings
88
- # CXXFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function
89
-
90
- # Find all .a archives in ARCHIVE_DIR
91
- # (ggml can have different backends cpu, cuda, etc., each backend generates a .a archive)
92
- GGML_ARCHIVE_DIR := build/ggml/src/
93
- ALL_ARCHIVES := $(shell find $(GGML_ARCHIVE_DIR ) -type f -name '* .a')
94
- ALL_OBJS := $(shell find $(GGML_ARCHIVE_DIR ) -type f -name '* .o')
95
-
96
- # Name of the single merged library
97
- COMBINED_LIB := libggmlall.a
98
-
99
- # Instead of using the archives generated by GGML, use the object files directly to avoid overwriting objects with the same base name
100
- $(COMBINED_LIB ) : $(ALL_ARCHIVES )
101
- @echo " Merging all .o into $( COMBINED_LIB) : $( ALL_OBJS) "
102
- rm -f $@
103
- ar -qc $@ $(ALL_OBJS )
104
- # Ensure we have a proper index
105
- ranlib $@
106
-
107
- build/libstable-diffusion.a :
108
- @echo " Building SD with $( BUILD_TYPE) build type and $( CMAKE_ARGS) "
109
- ifneq (,$(findstring sycl,$(BUILD_TYPE ) ) )
110
- +bash -c "source $(ONEAPI_VARS); \
111
- mkdir -p build && \
112
- cd build && \
113
- cmake $(CMAKE_ARGS) ../sources/stablediffusion-ggml.cpp && \
114
- cmake --build . --config Release"
115
- else
116
- mkdir -p build && \
117
- cd build && \
118
- cmake $(CMAKE_ARGS) ../sources/stablediffusion-ggml.cpp && \
119
- cmake --build . --config Release
120
- endif
121
- $(MAKE) $(COMBINED_LIB)
122
-
123
- gosd.o :
124
- ifneq (,$(findstring sycl,$(BUILD_TYPE ) ) )
125
- +bash -c "source $(ONEAPI_VARS); \
126
- $(CXX) $(CXXFLAGS) gosd.cpp -o gosd.o -c"
127
- else
128
- $(CXX) $(CXXFLAGS) gosd.cpp -o gosd.o -c
129
- endif
130
-
131
- # # stablediffusion (ggml)
132
60
sources/stablediffusion-ggml.cpp :
133
61
git clone --recursive $(STABLEDIFFUSION_GGML_REPO ) sources/stablediffusion-ggml.cpp && \
134
62
cd sources/stablediffusion-ggml.cpp && \
135
63
git checkout $(STABLEDIFFUSION_GGML_VERSION ) && \
136
64
git submodule update --init --recursive --depth 1 --single-branch
137
65
138
- libsd.a : sources/stablediffusion-ggml.cpp build/libstable-diffusion.a gosd.o
139
- cp $(INCLUDE_PATH ) /build/libstable-diffusion.a ./libsd.a
140
- $(AR ) rcs libsd.a gosd.o
66
+ libgosd.so : sources/stablediffusion-ggml.cpp CMakeLists.txt gosd.cpp gosd.h
67
+ mkdir -p build && \
68
+ cd build && \
69
+ cmake .. $(CMAKE_ARGS ) && \
70
+ cmake --build . --config Release -j$(JOBS ) && \
71
+ cd .. && \
72
+ mv build/libgosd.so ./
141
73
142
- stablediffusion-ggml : libsd.a
143
- CGO_LDFLAGS=" $( CGO_LDFLAGS) $( CGO_LDFLAGS_SYCL) " C_INCLUDE_PATH=" $( INCLUDE_PATH) " LIBRARY_PATH=" $( LIBRARY_PATH) " \
144
- CC=" $( CC) " CXX=" $( CXX) " CGO_CXXFLAGS=" $( CGO_CXXFLAGS) " \
145
- $(GOCMD ) build -ldflags " $( LD_FLAGS) " -tags " $( GO_TAGS) " -o stablediffusion-ggml ./
74
+ stablediffusion-ggml : main.go gosd.go libgosd.so
75
+ CGO_ENABLED=0 $(GOCMD ) build -tags " $( GO_TAGS) " -o stablediffusion-ggml ./
146
76
147
77
package :
148
78
bash package.sh
149
79
150
80
build : stablediffusion-ggml package
151
81
152
82
clean :
153
- rm -rf gosd .o libsd.a build $( COMBINED_LIB )
83
+ rm -rf libgosd .o build stablediffusion-ggml
0 commit comments