@@ -71,21 +71,21 @@ OPT = -Ofast
71
71
else
72
72
OPT = -O3
73
73
endif
74
- CFLAGS = -I. $(OPT ) -std=c11 -fPIC
75
- CXXFLAGS = -I. -I./common $(OPT ) -std=c++11 -fPIC
76
- LDFLAGS =
74
+ MK_CPPFLAGS = -I. -Icommon
75
+ MK_CFLAGS = $(CPPFLAGS ) $(OPT ) -std=c11 -fPIC
76
+ MK_CXXFLAGS = $(CPPFLAGS ) $(OPT ) -std=c++11 -fPIC
77
+ MK_LDFLAGS =
77
78
78
79
ifdef LLAMA_DEBUG
79
- CFLAGS += -O0 -g
80
- CXXFLAGS += -O0 -g
81
- LDFLAGS += -g
80
+ MK_CFLAGS += -O0 -g
81
+ MK_CXXFLAGS += -O0 -g
82
+ MK_LDFLAGS += -g
82
83
else
83
- CFLAGS += -DNDEBUG
84
- CXXFLAGS += -DNDEBUG
84
+ MK_CPPFLAGS += -DNDEBUG
85
85
endif
86
86
87
87
ifdef LLAMA_SERVER_VERBOSE
88
- CXXFLAGS += -DSERVER_VERBOSE=$(LLAMA_SERVER_VERBOSE)
88
+ MK_CPPFLAGS += -DSERVER_VERBOSE=$(LLAMA_SERVER_VERBOSE)
89
89
endif
90
90
91
91
ifdef LLAMA_DISABLE_LOGS
@@ -94,9 +94,9 @@ ifdef LLAMA_DISABLE_LOGS
94
94
endif # LLAMA_DISABLE_LOGS
95
95
96
96
# warnings
97
- CFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wdouble-promotion -Wshadow -Wstrict-prototypes -Wpointer-arith \
98
- -Wmissing-prototypes -Werror=implicit-int -Wno-unused-function
99
- CXXFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wno-multichar
97
+ MK_CFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wdouble-promotion -Wshadow -Wstrict-prototypes -Wpointer-arith \
98
+ -Wmissing-prototypes -Werror=implicit-int -Wno-unused-function
99
+ MK_CXXFLAGS += -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wno-multichar
100
100
101
101
ifeq '' '$(findstring clang++,$(CXX ) ) '
102
102
# g++ only
@@ -105,29 +105,9 @@ endif
105
105
106
106
# OS specific
107
107
# TODO: support Windows
108
- ifeq ($(UNAME_S ) ,Linux)
109
- CFLAGS += -pthread
110
- CXXFLAGS += -pthread
111
- endif
112
- ifeq ($(UNAME_S ) ,Darwin)
113
- CFLAGS += -pthread
114
- CXXFLAGS += -pthread
115
- endif
116
- ifeq ($(UNAME_S ) ,FreeBSD)
117
- CFLAGS += -pthread
118
- CXXFLAGS += -pthread
119
- endif
120
- ifeq ($(UNAME_S ) ,NetBSD)
121
- CFLAGS += -pthread
122
- CXXFLAGS += -pthread
123
- endif
124
- ifeq ($(UNAME_S ) ,OpenBSD)
125
- CFLAGS += -pthread
126
- CXXFLAGS += -pthread
127
- endif
128
- ifeq ($(UNAME_S ) ,Haiku)
129
- CFLAGS += -pthread
130
- CXXFLAGS += -pthread
108
+ ifneq '' '$(filter $(UNAME_S ) ,Linux Darwin FreeBSD NetBSD OpenBSD Haiku) '
109
+ MK_CFLAGS += -pthread
110
+ MK_CXXFLAGS += -pthread
131
111
endif
132
112
133
113
# detect Windows
@@ -153,12 +133,11 @@ ifeq ($(_WIN32),1)
153
133
endif
154
134
155
135
ifdef LLAMA_GPROF
156
- CFLAGS += -pg
157
- CXXFLAGS += -pg
136
+ MK_CFLAGS += -pg
137
+ MK_CXXFLAGS += -pg
158
138
endif
159
139
ifdef LLAMA_PERF
160
- CFLAGS += -DGGML_PERF
161
- CXXFLAGS += -DGGML_PERF
140
+ MK_CPPFLAGS += -DGGML_PERF
162
141
endif
163
142
164
143
# Architecture specific
@@ -169,16 +148,16 @@ ifndef RISCV
169
148
170
149
ifeq ($(UNAME_M ) ,$(filter $(UNAME_M ) ,x86_64 i686 amd64) )
171
150
# Use all CPU extensions that are available:
172
- CFLAGS += -march=native -mtune=native
173
- CXXFLAGS += -march=native -mtune=native
151
+ MK_CFLAGS += -march=native -mtune=native
152
+ MK_CXXFLAGS += -march=native -mtune=native
174
153
175
154
# Usage AVX-only
176
- # CFLAGS += -mfma -mf16c -mavx
177
- # CXXFLAGS += -mfma -mf16c -mavx
155
+ # MK_CFLAGS += -mfma -mf16c -mavx
156
+ # MK_CXXFLAGS += -mfma -mf16c -mavx
178
157
179
158
# Usage SSSE3-only (Not is SSE3!)
180
- # CFLAGS += -mssse3
181
- # CXXFLAGS += -mssse3
159
+ # MK_CFLAGS += -mssse3
160
+ # MK_CXXFLAGS += -mssse3
182
161
endif
183
162
184
163
# The stack is only 16-byte aligned on Windows, so don't let gcc emit aligned moves.
@@ -192,34 +171,33 @@ endif
192
171
ifneq ($(filter aarch64% ,$(UNAME_M ) ) ,)
193
172
# Apple M1, M2, etc.
194
173
# Raspberry Pi 3, 4, Zero 2 (64-bit)
195
- CFLAGS += -mcpu=native
196
- CXXFLAGS += -mcpu=native
174
+ MK_CFLAGS += -mcpu=native
175
+ MK_CXXFLAGS += -mcpu=native
197
176
endif
198
177
199
178
ifneq ($(filter armv6% ,$(UNAME_M ) ) ,)
200
179
# Raspberry Pi 1, Zero
201
- CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
180
+ MK_CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
181
+ MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
202
182
endif
203
183
204
184
ifneq ($(filter armv7% ,$(UNAME_M ) ) ,)
205
185
# Raspberry Pi 2
206
- CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
186
+ MK_CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
187
+ MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
207
188
endif
208
189
209
190
ifneq ($(filter armv8% ,$(UNAME_M ) ) ,)
210
191
# Raspberry Pi 3, 4, Zero 2 (32-bit)
211
- CFLAGS += -mfp16-format=ieee -mno-unaligned-access
192
+ MK_CFLAGS += -mfp16-format=ieee -mno-unaligned-access
193
+ MK_CXXFLAGS += -mfp16-format=ieee -mno-unaligned-access
212
194
endif
213
195
214
196
ifneq ($(filter ppc64% ,$(UNAME_M ) ) ,)
215
197
POWER9_M := $(shell grep "POWER9" /proc/cpuinfo)
216
198
ifneq (,$(findstring POWER9,$(POWER9_M)))
217
- CFLAGS += -mcpu=power9
218
- CXXFLAGS += -mcpu=power9
219
- endif
220
- # Require c++23's std::byteswap for big-endian support.
221
- ifeq ($(UNAME_M),ppc64)
222
- CXXFLAGS += -std=c++23 -DGGML_BIG_ENDIAN
199
+ MK_CFLAGS += -mcpu=power9
200
+ MK_CXXFLAGS += -mcpu=power9
223
201
endif
224
202
endif
225
203
@@ -229,21 +207,19 @@ else
229
207
endif
230
208
231
209
ifndef LLAMA_NO_K_QUANTS
232
- CFLAGS += -DGGML_USE_K_QUANTS
233
- CXXFLAGS += -DGGML_USE_K_QUANTS
210
+ MK_CPPFLAGS += -DGGML_USE_K_QUANTS
234
211
OBJS += k_quants.o
235
212
ifdef LLAMA_QKK_64
236
- CFLAGS += -DGGML_QKK_64
237
- CXXFLAGS += -DGGML_QKK_64
213
+ MK_CPPFLAGS += -DGGML_QKK_64
238
214
endif
239
215
endif
240
216
241
217
ifndef LLAMA_NO_ACCELERATE
242
218
# Mac OS - include Accelerate framework.
243
219
# `-framework Accelerate` works both with Apple Silicon and Mac Intel
244
220
ifeq ($(UNAME_S),Darwin)
245
- CFLAGS += -DGGML_USE_ACCELERATE
246
- LDFLAGS += -framework Accelerate
221
+ MK_CPPFLAGS += -DGGML_USE_ACCELERATE
222
+ MK_LDFLAGS += -framework Accelerate
247
223
endif
248
224
endif # LLAMA_NO_ACCELERATE
249
225
@@ -258,25 +234,26 @@ ifndef LLAMA_NO_METAL
258
234
endif # LLAMA_NO_METAL
259
235
260
236
ifdef LLAMA_MPI
261
- CFLAGS += -DGGML_USE_MPI -Wno-cast-qual
262
- CXXFLAGS += -DGGML_USE_MPI -Wno-cast-qual
237
+ MK_CPPFLAGS += -DGGML_USE_MPI
238
+ MK_CFLAGS += -Wno-cast-qual
239
+ MK_CXXFLAGS += -Wno-cast-qual
263
240
OBJS += ggml-mpi.o
264
241
endif # LLAMA_MPI
265
242
266
243
ifdef LLAMA_OPENBLAS
267
- CFLAGS += -DGGML_USE_OPENBLAS $(shell pkg-config --cflags openblas)
268
- LDFLAGS += $(shell pkg-config --libs openblas)
244
+ MK_CPPFLAGS += -DGGML_USE_OPENBLAS $(shell pkg-config --cflags-only-I openblas)
245
+ MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas)
246
+ MK_LDFLAGS += $(shell pkg-config --libs openblas)
269
247
endif # LLAMA_OPENBLAS
270
248
271
249
ifdef LLAMA_BLIS
272
- CFLAGS += -DGGML_USE_OPENBLAS -I/usr/local/include/blis -I/usr/include/blis
273
- LDFLAGS += -lblis -L/usr/local/lib
250
+ MK_CPPFLAGS += -DGGML_USE_OPENBLAS -I/usr/local/include/blis -I/usr/include/blis
251
+ MK_LDFLAGS += -lblis -L/usr/local/lib
274
252
endif # LLAMA_BLIS
275
253
276
254
ifdef LLAMA_CUBLAS
277
- CFLAGS += -DGGML_USE_CUBLAS -I/usr/local/cuda/include -I/opt/cuda/include -I$(CUDA_PATH)/targets/x86_64-linux/include
278
- CXXFLAGS += -DGGML_USE_CUBLAS -I/usr/local/cuda/include -I/opt/cuda/include -I$(CUDA_PATH)/targets/x86_64-linux/include
279
- LDFLAGS += -lcublas -lculibos -lcudart -lcublasLt -lpthread -ldl -lrt -L/usr/local/cuda/lib64 -L/opt/cuda/lib64 -L$(CUDA_PATH)/targets/x86_64-linux/lib
255
+ MK_CPPFLAGS += -DGGML_USE_CUBLAS -I/usr/local/cuda/include -I/opt/cuda/include -I$(CUDA_PATH)/targets/x86_64-linux/include
256
+ MK_LDFLAGS += -lcublas -lculibos -lcudart -lcublasLt -lpthread -ldl -lrt -L/usr/local/cuda/lib64 -L/opt/cuda/lib64 -L$(CUDA_PATH)/targets/x86_64-linux/lib
280
257
OBJS += ggml-cuda.o
281
258
NVCCFLAGS = --forward-unknown-to-host-compiler -use_fast_math
282
259
ifdef LLAMA_CUDA_NVCC
@@ -327,14 +304,15 @@ endif # LLAMA_CUBLAS
327
304
328
305
ifdef LLAMA_CLBLAST
329
306
330
- CFLAGS += -DGGML_USE_CLBLAST $(shell pkg-config --cflags clblast OpenCL)
331
- CXXFLAGS += -DGGML_USE_CLBLAST $(shell pkg-config --cflags clblast OpenCL)
307
+ MK_CPPFLAGS += -DGGML_USE_CLBLAST $(shell pkg-config --cflags-only-I clblast OpenCL)
308
+ MK_CFLAGS += $(shell pkg-config --cflags-only-other clblast OpenCL)
309
+ MK_CXXFLAGS += $(shell pkg-config --cflags-only-other clblast OpenCL)
332
310
333
311
# Mac provides OpenCL as a framework
334
312
ifeq ($(UNAME_S),Darwin)
335
- LDFLAGS += -lclblast -framework OpenCL
313
+ MK_LDFLAGS += -lclblast -framework OpenCL
336
314
else
337
- LDFLAGS += $(shell pkg-config --libs clblast OpenCL)
315
+ MK_LDFLAGS += $(shell pkg-config --libs clblast OpenCL)
338
316
endif
339
317
OBJS += ggml-opencl.o
340
318
@@ -349,10 +327,9 @@ ifdef LLAMA_HIPBLAS
349
327
LLAMA_CUDA_DMMV_X ?= 32
350
328
LLAMA_CUDA_MMV_Y ?= 1
351
329
LLAMA_CUDA_KQUANTS_ITER ?= 2
352
- CFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUBLAS
353
- CXXFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUBLAS
354
- LDFLAGS += -L$(ROCM_PATH)/lib -Wl,-rpath=$(ROCM_PATH)/lib
355
- LDFLAGS += -lhipblas -lamdhip64 -lrocblas
330
+ MK_CPPFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUBLAS
331
+ MK_LDFLAGS += -L$(ROCM_PATH)/lib -Wl,-rpath=$(ROCM_PATH)/lib
332
+ MK_LDFLAGS += -lhipblas -lamdhip64 -lrocblas
356
333
HIPFLAGS += $(addprefix --offload-arch=,$(GPU_TARGETS))
357
334
HIPFLAGS += -DGGML_CUDA_DMMV_X=$(LLAMA_CUDA_DMMV_X)
358
335
HIPFLAGS += -DGGML_CUDA_MMV_Y=$(LLAMA_CUDA_MMV_Y)
@@ -366,6 +343,12 @@ ggml-cuda.o: ggml-cuda.cu ggml-cuda.h
366
343
$(HIPCC ) $(CXXFLAGS ) $(HIPFLAGS ) -x hip -c -o $@ $<
367
344
endif # LLAMA_HIPBLAS
368
345
346
+ ifndef LLAMA_NO_METAL
347
+ MK_CPPFLAGS += -DGGML_USE_METAL # -DGGML_METAL_NDEBUG
348
+ MK_LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
349
+ OBJS += ggml-metal.o
350
+ endif # LLAMA_METAL
351
+
369
352
ifndef LLAMA_NO_METAL
370
353
ggml-metal.o : ggml-metal.m ggml-metal.h
371
354
$(CC ) $(CFLAGS ) -c $< -o $@
@@ -376,11 +359,17 @@ ggml-mpi.o: ggml-mpi.c ggml-mpi.h
376
359
$(CC ) $(CFLAGS ) -c $< -o $@
377
360
endif # LLAMA_MPI
378
361
379
- ifdef LLAMA_NO_K_QUANTS
362
+ ifndef LLAMA_NO_K_QUANTS
380
363
k_quants.o : k_quants.c k_quants.h
381
364
$(CC ) $(CFLAGS ) -c $< -o $@
382
365
endif # LLAMA_NO_K_QUANTS
383
366
367
+ # combine build flags with cmdline overrides
368
+ override CPPFLAGS := $(MK_CPPFLAGS ) $(CPPFLAGS )
369
+ override CFLAGS := $(MK_CFLAGS ) $(CFLAGS )
370
+ override CXXFLAGS := $(MK_CXXFLAGS ) $(CXXFLAGS )
371
+ override LDFLAGS := $(MK_LDFLAGS ) $(LDFLAGS )
372
+
384
373
#
385
374
# Print build information
386
375
#
0 commit comments