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? =
19
7
20
8
# stablediffusion.cpp (ggml)
21
9
STABLEDIFFUSION_GGML_REPO? =https://github.com/leejet/stable-diffusion.cpp
22
10
STABLEDIFFUSION_GGML_VERSION? =5900ef6605c6fbf7934239f795c13c97bc993853
23
11
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
12
+ CMAKE_ARGS+=-DGGML_MAX_NAME =128
26
13
27
14
ifeq ($(NATIVE ) ,false)
28
15
CMAKE_ARGS+=-DGGML_NATIVE=OFF
31
18
# If build type is cublas, then we set -DGGML_CUDA=ON to CMAKE_ARGS automatically
32
19
ifeq ($(BUILD_TYPE ) ,cublas)
33
20
CMAKE_ARGS+=-DSD_CUDA=ON -DGGML_CUDA=ON
34
- CGO_LDFLAGS+=-lcublas -lcudart -L$(CUDA_LIBPATH) -L$(CUDA_LIBPATH)/stubs/ -lcuda
35
21
# If build type is openblas then we set -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS
36
22
# to CMAKE_ARGS automatically
37
23
else ifeq ($(BUILD_TYPE),openblas)
@@ -46,14 +32,12 @@ else ifeq ($(BUILD_TYPE),hipblas)
46
32
# But if it's OSX without metal, disable it here
47
33
else ifeq ($(BUILD_TYPE),vulkan)
48
34
CMAKE_ARGS+=-DSD_VULKAN=ON -DGGML_VULKAN=ON
49
- CGO_LDFLAGS+=-lvulkan
50
35
else ifeq ($(OS),Darwin)
51
36
ifneq ($(BUILD_TYPE),metal)
52
37
CMAKE_ARGS+=-DSD_METAL=OFF -DGGML_METAL=OFF
53
38
else
54
39
CMAKE_ARGS+=-DSD_METAL=ON -DGGML_METAL=ON
55
40
CMAKE_ARGS+=-DGGML_METAL_EMBED_LIBRARY=ON
56
- TARGET+=--target ggml-metal
57
41
endif
58
42
endif
59
43
@@ -63,91 +47,36 @@ ifeq ($(BUILD_TYPE),sycl_f16)
63
47
-DCMAKE_CXX_COMPILER=icpx \
64
48
-DSD_SYCL=ON \
65
49
-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
50
endif
73
51
74
52
ifeq ($(BUILD_TYPE ) ,sycl_f32)
75
53
CMAKE_ARGS+=-DGGML_SYCL=ON \
76
54
-DCMAKE_C_COMPILER=icx \
77
55
-DCMAKE_CXX_COMPILER=icpx \
78
56
-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
57
endif
86
58
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
59
sources/stablediffusion-ggml.cpp :
133
60
git clone --recursive $(STABLEDIFFUSION_GGML_REPO ) sources/stablediffusion-ggml.cpp && \
134
61
cd sources/stablediffusion-ggml.cpp && \
135
62
git checkout $(STABLEDIFFUSION_GGML_VERSION ) && \
136
63
git submodule update --init --recursive --depth 1 --single-branch
137
64
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
65
+ libgosd.so : sources/stablediffusion-ggml.cpp CMakeLists.txt gosd.cpp gosd.h
66
+ mkdir -p build && \
67
+ cd build && \
68
+ cmake .. $(CMAKE_ARGS ) && \
69
+ cmake --build . --config Release -j$(JOBS ) && \
70
+ cd .. && \
71
+ mv build/libgosd.so ./
141
72
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 ./
73
+ stablediffusion-ggml : main.go gosd.go libgosd.so
74
+ CGO_ENABLED=0 $(GOCMD ) build -tags " $( GO_TAGS) " -o stablediffusion-ggml ./
146
75
147
76
package :
148
77
bash package.sh
149
78
150
79
build : stablediffusion-ggml package
151
80
152
81
clean :
153
- rm -rf gosd .o libsd.a build $( COMBINED_LIB )
82
+ rm -rf libgosd .o build stablediffusion-ggml
0 commit comments