ggerganov commited on
Commit
15c1d58
·
1 Parent(s): 5908a19

make : shim cmake

Browse files
Files changed (2) hide show
  1. .github/workflows/build.yml +12 -26
  2. Makefile +4 -1074
.github/workflows/build.yml CHANGED
@@ -28,9 +28,9 @@ jobs:
28
  -w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
29
  set -e
30
  apt update
31
- apt install -y build-essential libsdl2-dev
32
- make
33
- make stream'
34
 
35
  macOS-latest:
36
  runs-on: macOS-latest
@@ -42,12 +42,12 @@ jobs:
42
  - name: Dependencies
43
  run: |
44
  brew update
45
- brew install sdl2
46
 
47
  - name: Build
48
  run: |
49
- make
50
- make stream
51
 
52
  freeBSD-latest:
53
  runs-on: macos-12
@@ -63,9 +63,9 @@ jobs:
63
  version: '13.3'
64
  run: |
65
  sudo pkg update
66
- sudo pkg install -y gmake sdl2
67
- gmake
68
- gmake stream
69
 
70
  ubuntu-latest-gcc:
71
  runs-on: ubuntu-latest
@@ -280,21 +280,6 @@ jobs:
280
  mingw-w64-${{matrix.env}}-SDL2
281
  mingw-w64-${{matrix.env}}-openblas
282
 
283
- - name: Build using make
284
- shell: msys2 {0}
285
- run: |
286
- make -j $(nproc)
287
-
288
- - name: Clean after building using make
289
- shell: msys2 {0}
290
- run: |
291
- make clean
292
-
293
- - name: Build using make w/ OpenBLAS
294
- shell: msys2 {0}
295
- run: |
296
- make GGML_OPENBLAS=1 -j $(nproc)
297
-
298
  - name: Build using CMake
299
  shell: msys2 {0}
300
  run: |
@@ -664,5 +649,6 @@ jobs:
664
  - name: Test quantize
665
  run: |
666
  ./models/download-ggml-model.sh tiny.en
667
- make quantize
668
- ./quantize models/ggml-tiny.en.bin models/ggml-tiny.en-q4_0.bin q4_0
 
 
28
  -w /workspace ${{ env.ubuntu_image }} /bin/sh -c '
29
  set -e
30
  apt update
31
+ apt install -y build-essential libsdl2-dev cmake
32
+ cmake -B build
33
+ cmake --build build --config Release -j $(nproc)'
34
 
35
  macOS-latest:
36
  runs-on: macOS-latest
 
42
  - name: Dependencies
43
  run: |
44
  brew update
45
+ brew install sdl2 cmake
46
 
47
  - name: Build
48
  run: |
49
+ cmake -B build
50
+ cmake --build build --config Release
51
 
52
  freeBSD-latest:
53
  runs-on: macos-12
 
63
  version: '13.3'
64
  run: |
65
  sudo pkg update
66
+ sudo pkg install -y gmake sdl2 cmake
67
+ cmake -B build
68
+ cmake --build build --config Release
69
 
70
  ubuntu-latest-gcc:
71
  runs-on: ubuntu-latest
 
280
  mingw-w64-${{matrix.env}}-SDL2
281
  mingw-w64-${{matrix.env}}-openblas
282
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
283
  - name: Build using CMake
284
  shell: msys2 {0}
285
  run: |
 
649
  - name: Test quantize
650
  run: |
651
  ./models/download-ggml-model.sh tiny.en
652
+ cmake -B build
653
+ cmake --build build --config Release
654
+ ./build/bin/quantize models/ggml-tiny.en.bin models/ggml-tiny.en-q4_0.bin q4_0
Makefile CHANGED
@@ -1,1075 +1,3 @@
1
- # Define the default target now so that it is always the first target
2
- BUILD_TARGETS = \
3
- main \
4
- bench \
5
- quantize \
6
- server
7
-
8
- # Binaries only useful for tests
9
- TEST_TARGETS = \
10
- tests/test-c.o
11
-
12
- # Deprecation aliases
13
- ifdef WHISPER_CUBLAS
14
- $(error WHISPER_CUBLAS is removed. Use GGML_CUDA instead.)
15
- endif
16
-
17
- ifdef WHISPER_CUDA
18
- GGML_CUDA := 1
19
- DEPRECATE_WARNING := 1
20
- endif
21
-
22
- ifdef WHISPER_KOMPUTE
23
- GGML_KOMPUTE := 1
24
- DEPRECATE_WARNING := 1
25
- endif
26
-
27
- ifdef WHISPER_METAL
28
- GGML_METAL := 1
29
- DEPRECATE_WARNING := 1
30
- endif
31
-
32
- ifdef WHISPER_OPENMP
33
- GGML_OPENMP := 1
34
- DEPRECATE_WARNING := 1
35
- endif
36
-
37
- ifdef WHISPER_RPC
38
- GGML_RPC := 1
39
- DEPRECATE_WARNING := 1
40
- endif
41
-
42
- ifdef WHISPER_SYCL
43
- GGML_SYCL := 1
44
- DEPRECATE_WARNING := 1
45
- endif
46
-
47
- ifdef WHISPER_SYCL_F16
48
- GGML_SYCL_F16 := 1
49
- DEPRECATE_WARNING := 1
50
- endif
51
-
52
- ifdef WHISPER_OPENBLAS
53
- GGML_OPENBLAS := 1
54
- DEPRECATE_WARNING := 1
55
- endif
56
-
57
- ifdef WHISPER_OPENBLAS64
58
- GGML_OPENBLAS64 := 1
59
- DEPRECATE_WARNING := 1
60
- endif
61
-
62
- ifdef WHISPER_BLIS
63
- GGML_BLIS := 1
64
- DEPRECATE_WARNING := 1
65
- endif
66
-
67
- ifdef WHISPER_NO_WHISPERFILE
68
- GGML_NO_WHISPERFILE := 1
69
- DEPRECATE_WARNING := 1
70
- endif
71
-
72
- ifdef WHISPER_NO_ACCELERATE
73
- GGML_NO_ACCELERATE := 1
74
- DEPRECATE_WARNING := 1
75
- endif
76
-
77
- ifdef WHISPER_NO_OPENMP
78
- GGML_NO_OPENMP := 1
79
- DEPRECATE_WARNING := 1
80
- endif
81
-
82
- ifdef WHISPER_NO_METAL
83
- GGML_NO_METAL := 1
84
- DEPRECATE_WARNING := 1
85
- endif
86
-
87
- ifndef UNAME_S
88
- UNAME_S := $(shell uname -s)
89
- endif
90
-
91
- ifndef UNAME_P
92
- UNAME_P := $(shell uname -p)
93
- endif
94
-
95
- ifndef UNAME_M
96
- UNAME_M := $(shell uname -m)
97
- endif
98
-
99
- # In GNU make default CXX is g++ instead of c++. Let's fix that so that users
100
- # of non-gcc compilers don't have to provide g++ alias or wrapper.
101
- DEFCC := cc
102
- DEFCXX := c++
103
- ifeq ($(origin CC),default)
104
- CC := $(DEFCC)
105
- endif
106
- ifeq ($(origin CXX),default)
107
- CXX := $(DEFCXX)
108
- endif
109
-
110
- # Mac OS + Arm can report x86_64
111
- # ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789
112
- ifeq ($(UNAME_S),Darwin)
113
- ifndef GGML_NO_METAL
114
- GGML_METAL := 1
115
- endif
116
-
117
- GGML_NO_OPENMP := 1
118
-
119
- ifneq ($(UNAME_P),arm)
120
- SYSCTL_M := $(shell sysctl -n hw.optional.arm64 2>/dev/null)
121
- ifeq ($(SYSCTL_M),1)
122
- # UNAME_P := arm
123
- # UNAME_M := arm64
124
- warn := $(warning Your arch is announced as x86_64, but it seems to actually be ARM64. Not fixing that can lead to bad performance. For more info see: https://github.com/ggerganov/whisper.cpp/issues/66\#issuecomment-1282546789)
125
- endif
126
- endif
127
- endif
128
-
129
- ifdef GGML_METAL
130
- GGML_METAL_EMBED_LIBRARY := 1
131
- endif
132
-
133
- ifdef GGML_RPC
134
- BUILD_TARGETS += rpc-server
135
- endif
136
-
137
- ifdef GGML_VULKAN
138
- BUILD_TARGETS += vulkan-shaders-gen
139
- endif
140
-
141
- ifeq ($(shell sdl2-config --cflags --libs 2>/dev/null),)
142
- else
143
- BUILD_TARGETS += \
144
- command \
145
- stream \
146
- lsp \
147
- talk-llama
148
- # talk (TODO: disalbed)
149
- endif
150
-
151
- default: $(BUILD_TARGETS)
152
-
153
- test: $(TEST_TARGETS)
154
- @failures=0; \
155
- for test_target in $(TEST_TARGETS); do \
156
- echo "Running test $$test_target..."; \
157
- ./$$test_target; \
158
- if [ $$? -ne 0 ]; then \
159
- printf 'Test %s FAILED!\n\n' $$test_target; \
160
- failures=$$(( failures + 1 )); \
161
- else \
162
- printf 'Test %s passed.\n\n' $$test_target; \
163
- fi; \
164
- done; \
165
- failures=$$(( failures + $$? )); \
166
- if [ $$failures -gt 0 ]; then \
167
- printf '\n%s tests failed.\n' $$failures; \
168
- exit 1; \
169
- fi
170
- @echo 'All tests passed.'
171
-
172
- all: $(BUILD_TARGETS) $(TEST_TARGETS)
173
-
174
- ifdef RISCV_CROSS_COMPILE
175
- CC := riscv64-unknown-linux-gnu-gcc
176
- CXX := riscv64-unknown-linux-gnu-g++
177
- endif
178
-
179
- #
180
- # Compile flags
181
- #
182
-
183
- # keep standard at C11 and C++11
184
- MK_CPPFLAGS = -Iggml/include -Iggml/src -Iinclude -Isrc -Iexamples
185
- MK_CFLAGS = -std=c11 -fPIC
186
- MK_CXXFLAGS = -std=c++11 -fPIC
187
- MK_NVCCFLAGS = -std=c++11
188
-
189
- ifndef WHISPER_NO_CCACHE
190
- CCACHE := $(shell which ccache)
191
- ifdef CCACHE
192
- export CCACHE_SLOPPINESS = time_macros
193
- $(info I ccache found, compilation results will be cached. Disable with WHISPER_NO_CCACHE.)
194
- CC := $(CCACHE) $(CC)
195
- CXX := $(CCACHE) $(CXX)
196
- else
197
- $(info I ccache not found. Consider installing it for faster compilation.)
198
- endif # CCACHE
199
- endif # WHISPER_NO_CCACHE
200
-
201
- # clock_gettime came in POSIX.1b (1993)
202
- # CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
203
- # posix_memalign came in POSIX.1-2001 / SUSv3
204
- # M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
205
- MK_CPPFLAGS += -D_XOPEN_SOURCE=600
206
-
207
- # Somehow in OpenBSD whenever POSIX conformance is specified
208
- # some string functions rely on locale_t availability,
209
- # which was introduced in POSIX.1-2008, forcing us to go higher
210
- ifeq ($(UNAME_S),OpenBSD)
211
- MK_CPPFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700
212
- endif
213
-
214
- # Data types, macros and functions related to controlling CPU affinity and
215
- # some memory allocation are available on Linux through GNU extensions in libc
216
- ifeq ($(UNAME_S),Linux)
217
- MK_CPPFLAGS += -D_GNU_SOURCE
218
- endif
219
-
220
- # RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
221
- # and on macOS its availability depends on enabling Darwin extensions
222
- # similarly on DragonFly, enabling BSD extensions is necessary
223
- ifeq ($(UNAME_S),Darwin)
224
- MK_CPPFLAGS += -D_DARWIN_C_SOURCE
225
- endif
226
- ifeq ($(UNAME_S),DragonFly)
227
- MK_CPPFLAGS += -D__BSD_VISIBLE
228
- endif
229
-
230
- # alloca is a non-standard interface that is not visible on BSDs when
231
- # POSIX conformance is specified, but not all of them provide a clean way
232
- # to enable it in such cases
233
- ifeq ($(UNAME_S),FreeBSD)
234
- MK_CPPFLAGS += -D__BSD_VISIBLE
235
- endif
236
- ifeq ($(UNAME_S),NetBSD)
237
- MK_CPPFLAGS += -D_NETBSD_SOURCE
238
- endif
239
- ifeq ($(UNAME_S),OpenBSD)
240
- MK_CPPFLAGS += -D_BSD_SOURCE
241
- endif
242
-
243
- ifdef GGML_SCHED_MAX_COPIES
244
- MK_CPPFLAGS += -DGGML_SCHED_MAX_COPIES=$(GGML_SCHED_MAX_COPIES)
245
- endif
246
-
247
- ifdef WHISPER_DEBUG
248
- MK_CFLAGS += -O0 -g
249
- MK_CXXFLAGS += -O0 -g
250
- MK_LDFLAGS += -g
251
- MK_NVCCFLAGS += -O0 -g
252
-
253
- ifeq ($(UNAME_S),Linux)
254
- MK_CPPFLAGS += -D_GLIBCXX_ASSERTIONS
255
- endif
256
- else
257
- MK_CPPFLAGS += -DNDEBUG
258
- MK_CFLAGS += -O3
259
- MK_CXXFLAGS += -O3
260
- MK_NVCCFLAGS += -O3
261
- endif
262
-
263
- ifdef WHISPER_SANITIZE_THREAD
264
- MK_CFLAGS += -fsanitize=thread -g
265
- MK_CXXFLAGS += -fsanitize=thread -g
266
- MK_LDFLAGS += -fsanitize=thread -g
267
- endif
268
-
269
- ifdef WHISPER_SANITIZE_ADDRESS
270
- MK_CFLAGS += -fsanitize=address -fno-omit-frame-pointer -g
271
- MK_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer -g
272
- MK_LDFLAGS += -fsanitize=address -fno-omit-frame-pointer -g
273
- endif
274
-
275
- ifdef WHISPER_SANITIZE_UNDEFINED
276
- MK_CFLAGS += -fsanitize=undefined -g
277
- MK_CXXFLAGS += -fsanitize=undefined -g
278
- MK_LDFLAGS += -fsanitize=undefined -g
279
- endif
280
-
281
- ifdef WHISPER_SERVER_VERBOSE
282
- MK_CPPFLAGS += -DSERVER_VERBOSE=$(WHISPER_SERVER_VERBOSE)
283
- endif
284
-
285
- ifdef WHISPER_SERVER_SSL
286
- MK_CPPFLAGS += -DCPPHTTPLIB_OPENSSL_SUPPORT
287
- MK_LDFLAGS += -lssl -lcrypto
288
- endif
289
-
290
- ifdef WHISPER_DISABLE_LOGS
291
- MK_CPPFLAGS += -DLOG_DISABLE_LOGS
292
- endif # WHISPER_DISABLE_LOGS
293
-
294
- # warnings
295
- WARN_FLAGS = \
296
- -Wall \
297
- -Wextra \
298
- -Wpedantic \
299
- -Wcast-qual \
300
- -Wno-unused-function
301
-
302
- MK_CFLAGS += \
303
- $(WARN_FLAGS) \
304
- -Wshadow \
305
- -Wstrict-prototypes \
306
- -Wpointer-arith \
307
- -Wmissing-prototypes \
308
- -Werror=implicit-int \
309
- -Werror=implicit-function-declaration
310
-
311
- MK_CXXFLAGS += \
312
- $(WARN_FLAGS) \
313
- -Wmissing-declarations \
314
- -Wmissing-noreturn
315
-
316
- ifeq ($(WHISPER_FATAL_WARNINGS),1)
317
- MK_CFLAGS += -Werror
318
- MK_CXXFLAGS += -Werror
319
- endif
320
-
321
- # this version of Apple ld64 is buggy
322
- ifneq '' '$(findstring dyld-1015.7,$(shell $(CC) $(LDFLAGS) -Wl,-v 2>&1))'
323
- MK_CPPFLAGS += -DHAVE_BUGGY_APPLE_LINKER
324
- endif
325
-
326
- # OS specific
327
- # TODO: support Windows
328
- ifneq '' '$(filter $(UNAME_S),Linux Darwin FreeBSD NetBSD OpenBSD Haiku)'
329
- MK_CFLAGS += -pthread
330
- MK_CXXFLAGS += -pthread
331
- endif
332
-
333
- # detect Windows
334
- ifneq ($(findstring _NT,$(UNAME_S)),)
335
- _WIN32 := 1
336
- endif
337
-
338
- # library name prefix
339
- ifneq ($(_WIN32),1)
340
- LIB_PRE := lib
341
- endif
342
-
343
- # Dynamic Shared Object extension
344
- ifneq ($(_WIN32),1)
345
- DSO_EXT := .so
346
- else
347
- DSO_EXT := .dll
348
- endif
349
-
350
- # Windows Sockets 2 (Winsock) for network-capable apps
351
- ifeq ($(_WIN32),1)
352
- LWINSOCK2 := -lws2_32
353
- endif
354
-
355
- ifdef WHISPER_GPROF
356
- MK_CFLAGS += -pg
357
- MK_CXXFLAGS += -pg
358
- endif
359
-
360
- # Architecture specific
361
- # TODO: probably these flags need to be tweaked on some architectures
362
- # feel free to update the Makefile for your architecture and send a pull request or issue
363
-
364
- ifndef RISCV
365
-
366
- ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
367
- # Use all CPU extensions that are available:
368
- MK_CFLAGS += -march=native -mtune=native
369
- HOST_CXXFLAGS += -march=native -mtune=native
370
-
371
- # Usage AVX-only
372
- #MK_CFLAGS += -mfma -mf16c -mavx
373
- #MK_CXXFLAGS += -mfma -mf16c -mavx
374
-
375
- # Usage SSSE3-only (Not is SSE3!)
376
- #MK_CFLAGS += -mssse3
377
- #MK_CXXFLAGS += -mssse3
378
- endif
379
-
380
- ifneq '' '$(findstring mingw,$(shell $(CC) -dumpmachine))'
381
- # The stack is only 16-byte aligned on Windows, so don't let gcc emit aligned moves.
382
- # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54412
383
- # https://github.com/ggerganov/llama.cpp/issues/2922
384
- MK_CFLAGS += -Xassembler -muse-unaligned-vector-move
385
- MK_CXXFLAGS += -Xassembler -muse-unaligned-vector-move
386
-
387
- # Target Windows 8 for PrefetchVirtualMemory
388
- MK_CPPFLAGS += -D_WIN32_WINNT=0x602
389
- endif
390
-
391
- ifneq ($(filter aarch64%,$(UNAME_M)),)
392
- # Apple M1, M2, etc.
393
- # Raspberry Pi 3, 4, Zero 2 (64-bit)
394
- # Nvidia Jetson
395
- MK_CFLAGS += -mcpu=native
396
- MK_CXXFLAGS += -mcpu=native
397
- JETSON_RELEASE_INFO = $(shell jetson_release)
398
- ifdef JETSON_RELEASE_INFO
399
- ifneq ($(filter TX2%,$(JETSON_RELEASE_INFO)),)
400
- JETSON_EOL_MODULE_DETECT = 1
401
- CC = aarch64-unknown-linux-gnu-gcc
402
- cxx = aarch64-unknown-linux-gnu-g++
403
- endif
404
- endif
405
- endif
406
-
407
- ifneq ($(filter armv6%,$(UNAME_M)),)
408
- # Raspberry Pi 1, Zero
409
- MK_CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
410
- MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
411
- endif
412
-
413
- ifneq ($(filter armv7%,$(UNAME_M)),)
414
- # Raspberry Pi 2
415
- MK_CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
416
- MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
417
- endif
418
-
419
- ifneq ($(filter armv8%,$(UNAME_M)),)
420
- # Raspberry Pi 3, 4, Zero 2 (32-bit)
421
- MK_CFLAGS += -mfp16-format=ieee -mno-unaligned-access
422
- MK_CXXFLAGS += -mfp16-format=ieee -mno-unaligned-access
423
- endif
424
-
425
- ifneq ($(filter ppc64%,$(UNAME_M)),)
426
- POWER9_M := $(shell grep "POWER9" /proc/cpuinfo)
427
- ifneq (,$(findstring POWER9,$(POWER9_M)))
428
- MK_CFLAGS += -mcpu=power9
429
- MK_CXXFLAGS += -mcpu=power9
430
- endif
431
- endif
432
-
433
- ifneq ($(filter ppc64le%,$(UNAME_M)),)
434
- MK_CFLAGS += -mcpu=powerpc64le
435
- MK_CXXFLAGS += -mcpu=powerpc64le
436
- CUDA_POWER_ARCH = 1
437
- endif
438
-
439
- ifneq ($(filter loongarch64%,$(UNAME_M)),)
440
- MK_CFLAGS += -mlasx
441
- MK_CXXFLAGS += -mlasx
442
- endif
443
-
444
- else
445
- MK_CFLAGS += -march=rv64gcv -mabi=lp64d
446
- MK_CXXFLAGS += -march=rv64gcv -mabi=lp64d
447
- endif # RISCV
448
-
449
- ifndef GGML_NO_ACCELERATE
450
- # Mac OS - include Accelerate framework.
451
- # `-framework Accelerate` works both with Apple Silicon and Mac Intel
452
- ifeq ($(UNAME_S),Darwin)
453
- MK_CPPFLAGS += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS -DGGML_BLAS_USE_ACCELERATE
454
- MK_CPPFLAGS += -DACCELERATE_NEW_LAPACK
455
- MK_CPPFLAGS += -DACCELERATE_LAPACK_ILP64
456
- MK_LDFLAGS += -framework Accelerate
457
- OBJ_GGML += ggml/src/ggml-blas/ggml-blas.o
458
- endif
459
- endif # GGML_NO_ACCELERATE
460
-
461
- ifndef GGML_NO_OPENMP
462
- MK_CPPFLAGS += -DGGML_USE_OPENMP
463
- MK_CFLAGS += -fopenmp
464
- MK_CXXFLAGS += -fopenmp
465
- endif # GGML_NO_OPENMP
466
-
467
- ifdef WHISPER_COREML
468
- MK_CXXFLAGS += -DWHISPER_USE_COREML
469
- LDFLAGS += -framework Foundation -framework CoreML
470
-
471
- ifdef WHISPER_COREML_ALLOW_FALLBACK
472
- MK_CXXFLAGS += -DWHISPER_COREML_ALLOW_FALLBACK
473
- endif
474
- endif # WHISPER_COREML
475
-
476
- ifdef GGML_OPENBLAS
477
- MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas)
478
- MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas)
479
- MK_LDFLAGS += $(shell pkg-config --libs openblas)
480
- OBJ_GGML += ggml/src/ggml-blas/ggml-blas.o
481
- endif # GGML_OPENBLAS
482
-
483
- ifdef GGML_OPENBLAS64
484
- MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas64)
485
- MK_CFLAGS += $(shell pkg-config --cflags-only-other openblas64)
486
- MK_LDFLAGS += $(shell pkg-config --libs openblas64)
487
- OBJ_GGML += ggml/src/ggml-blas/ggml-blas.o
488
- endif # GGML_OPENBLAS64
489
-
490
- ifdef GGML_BLIS
491
- MK_CPPFLAGS += -DGGML_USE_BLAS -I/usr/local/include/blis -I/usr/include/blis
492
- MK_LDFLAGS += -lblis -L/usr/local/lib
493
- OBJ_GGML += ggml/src/ggml-blas/ggml-blas.o
494
- endif # GGML_BLIS
495
-
496
- ifdef GGML_RPC
497
- MK_CPPFLAGS += -DGGML_USE_RPC
498
- OBJ_GGML += ggml/src/ggml-rpc/ggml-rpc.o
499
- endif # GGML_RPC
500
-
501
- OBJ_CUDA_TMPL = $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-wmma*.cu))
502
- OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/mmq*.cu))
503
-
504
- ifdef GGML_CUDA_FA_ALL_QUANTS
505
- OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*.cu))
506
- else
507
- OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu))
508
- OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu))
509
- OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*f16-f16.cu))
510
- endif # GGML_CUDA_FA_ALL_QUANTS
511
-
512
- ifdef GGML_CUDA
513
- ifneq ('', '$(wildcard /opt/cuda)')
514
- CUDA_PATH ?= /opt/cuda
515
- else
516
- CUDA_PATH ?= /usr/local/cuda
517
- endif
518
-
519
- #MK_CPPFLAGS += -DGGML_USE_CUDA -I$(CUDA_PATH)/include -I$(CUDA_PATH)/targets/$(UNAME_M)-linux/include -DGGML_CUDA_USE_GRAPHS
520
- #MK_LDFLAGS += -lcuda -lcublas -lculibos -lcudart -lcufft -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
521
- MK_CPPFLAGS += -DGGML_USE_CUDA -I$(CUDA_PATH)/include -I$(CUDA_PATH)/targets/$(UNAME_M)-linux/include
522
- 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
523
- MK_NVCCFLAGS += -use_fast_math
524
-
525
- OBJ_GGML += ggml/src/ggml-cuda/ggml-cuda.o
526
- OBJ_GGML += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu))
527
- OBJ_GGML += $(OBJ_CUDA_TMPL)
528
- ifdef WHISPER_FATAL_WARNINGS
529
- MK_NVCCFLAGS += -Werror all-warnings
530
- endif # WHISPER_FATAL_WARNINGS
531
-
532
- ifndef JETSON_EOL_MODULE_DETECT
533
- MK_NVCCFLAGS += --forward-unknown-to-host-compiler
534
- endif # JETSON_EOL_MODULE_DETECT
535
-
536
- ifdef WHISPER_DEBUG
537
- MK_NVCCFLAGS += -lineinfo
538
- endif # WHISPER_DEBUG
539
-
540
- ifdef GGML_CUDA_DEBUG
541
- MK_NVCCFLAGS += --device-debug
542
- endif # GGML_CUDA_DEBUG
543
-
544
- ifdef GGML_CUDA_NVCC
545
- NVCC = $(CCACHE) $(GGML_CUDA_NVCC)
546
- else
547
- NVCC = $(CCACHE) nvcc
548
- endif #GGML_CUDA_NVCC
549
-
550
- ifdef CUDA_DOCKER_ARCH
551
- MK_NVCCFLAGS += -Wno-deprecated-gpu-targets -arch=$(CUDA_DOCKER_ARCH)
552
- else ifndef CUDA_POWER_ARCH
553
- MK_NVCCFLAGS += -arch=native
554
- endif # CUDA_DOCKER_ARCH
555
-
556
- ifdef GGML_CUDA_FORCE_DMMV
557
- MK_NVCCFLAGS += -DGGML_CUDA_FORCE_DMMV
558
- endif # GGML_CUDA_FORCE_DMMV
559
-
560
- ifdef GGML_CUDA_FORCE_MMQ
561
- MK_NVCCFLAGS += -DGGML_CUDA_FORCE_MMQ
562
- endif # GGML_CUDA_FORCE_MMQ
563
-
564
- ifdef GGML_CUDA_DMMV_X
565
- MK_NVCCFLAGS += -DGGML_CUDA_DMMV_X=$(GGML_CUDA_DMMV_X)
566
- else
567
- MK_NVCCFLAGS += -DGGML_CUDA_DMMV_X=32
568
- endif # GGML_CUDA_DMMV_X
569
-
570
- ifdef GGML_CUDA_MMV_Y
571
- MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y=$(GGML_CUDA_MMV_Y)
572
- else ifdef GGML_CUDA_DMMV_Y
573
- MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y=$(GGML_CUDA_DMMV_Y) # for backwards compatibility
574
- else
575
- MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y=1
576
- endif # GGML_CUDA_MMV_Y
577
-
578
- ifdef GGML_CUDA_F16
579
- MK_NVCCFLAGS += -DGGML_CUDA_F16
580
- endif # GGML_CUDA_F16
581
-
582
- ifdef GGML_CUDA_DMMV_F16
583
- MK_NVCCFLAGS += -DGGML_CUDA_F16
584
- endif # GGML_CUDA_DMMV_F16
585
-
586
- ifdef GGML_CUDA_KQUANTS_ITER
587
- MK_NVCCFLAGS += -DK_QUANTS_PER_ITERATION=$(GGML_CUDA_KQUANTS_ITER)
588
- else
589
- MK_NVCCFLAGS += -DK_QUANTS_PER_ITERATION=2
590
- endif
591
-
592
- ifdef GGML_CUDA_PEER_MAX_BATCH_SIZE
593
- MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=$(GGML_CUDA_PEER_MAX_BATCH_SIZE)
594
- else
595
- MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=128
596
- endif # GGML_CUDA_PEER_MAX_BATCH_SIZE
597
-
598
- ifdef GGML_CUDA_NO_PEER_COPY
599
- MK_NVCCFLAGS += -DGGML_CUDA_NO_PEER_COPY
600
- endif # GGML_CUDA_NO_PEER_COPY
601
-
602
- ifdef GGML_CUDA_CCBIN
603
- MK_NVCCFLAGS += -ccbin $(GGML_CUDA_CCBIN)
604
- endif # GGML_CUDA_CCBIN
605
-
606
- ifdef GGML_CUDA_FA_ALL_QUANTS
607
- MK_NVCCFLAGS += -DGGML_CUDA_FA_ALL_QUANTS
608
- endif # GGML_CUDA_FA_ALL_QUANTS
609
-
610
- ifdef JETSON_EOL_MODULE_DETECT
611
- define NVCC_COMPILE
612
- $(NVCC) -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_CUDA -I/usr/local/cuda/include -I/opt/cuda/include -I/usr/local/cuda/targets/aarch64-linux/include -std=c++11 -O3 $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@
613
- endef # NVCC_COMPILE
614
- else
615
- define NVCC_COMPILE
616
- $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@
617
- endef # NVCC_COMPILE
618
- endif # JETSON_EOL_MODULE_DETECT
619
-
620
- ggml/src/ggml-cuda/%.o: \
621
- ggml/src/ggml-cuda/%.cu \
622
- ggml/include/ggml.h \
623
- ggml/src/ggml-common.h \
624
- ggml/src/ggml-cuda/common.cuh
625
- $(NVCC_COMPILE)
626
-
627
- ggml/src/ggml-cuda/ggml-cuda.o: \
628
- ggml/src/ggml-cuda/ggml-cuda.cu \
629
- ggml/include/ggml-cuda.h \
630
- ggml/include/ggml.h \
631
- ggml/include/ggml-backend.h \
632
- ggml/src/ggml-backend-impl.h \
633
- ggml/src/ggml-common.h \
634
- $(wildcard ggml/src/ggml-cuda/*.cuh)
635
- $(NVCC_COMPILE)
636
- endif # GGML_CUDA
637
-
638
- ifdef GGML_VULKAN
639
- MK_CPPFLAGS += -DGGML_USE_VULKAN
640
- MK_LDFLAGS += $(shell pkg-config --libs vulkan)
641
- OBJ_GGML += ggml/src/ggml-vulkan.o ggml/src/ggml-vulkan-shaders.o
642
-
643
- ifdef GGML_VULKAN_CHECK_RESULTS
644
- MK_CPPFLAGS += -DGGML_VULKAN_CHECK_RESULTS
645
- endif
646
-
647
- ifdef GGML_VULKAN_DEBUG
648
- MK_CPPFLAGS += -DGGML_VULKAN_DEBUG
649
- endif
650
-
651
- ifdef GGML_VULKAN_MEMORY_DEBUG
652
- MK_CPPFLAGS += -DGGML_VULKAN_MEMORY_DEBUG
653
- endif
654
-
655
- ifdef GGML_VULKAN_PERF
656
- MK_CPPFLAGS += -DGGML_VULKAN_PERF
657
- endif
658
-
659
- ifdef GGML_VULKAN_VALIDATE
660
- MK_CPPFLAGS += -DGGML_VULKAN_VALIDATE
661
- endif
662
-
663
- ifdef GGML_VULKAN_RUN_TESTS
664
- MK_CPPFLAGS += -DGGML_VULKAN_RUN_TESTS
665
- endif
666
-
667
- GLSLC_CMD = glslc
668
- _ggml_vk_genshaders_cmd = $(shell pwd)/vulkan-shaders-gen
669
- _ggml_vk_header = ggml/src/ggml-vulkan-shaders.hpp
670
- _ggml_vk_source = ggml/src/ggml-vulkan-shaders.cpp
671
- _ggml_vk_input_dir = ggml/src/vulkan-shaders
672
- _ggml_vk_shader_deps = $(echo $(_ggml_vk_input_dir)/*.comp)
673
-
674
- ggml/src/ggml-vulkan.o: ggml/src/ggml-vulkan.cpp ggml/include/ggml-vulkan.h $(_ggml_vk_header) $(_ggml_vk_source)
675
- $(CXX) $(CXXFLAGS) $(shell pkg-config --cflags vulkan) -c $< -o $@
676
-
677
- $(_ggml_vk_header): $(_ggml_vk_source)
678
-
679
- $(_ggml_vk_source): $(_ggml_vk_shader_deps) vulkan-shaders-gen
680
- $(_ggml_vk_genshaders_cmd) \
681
- --glslc $(GLSLC_CMD) \
682
- --input-dir $(_ggml_vk_input_dir) \
683
- --target-hpp $(_ggml_vk_header) \
684
- --target-cpp $(_ggml_vk_source)
685
-
686
- vulkan-shaders-gen: ggml/src/vulkan-shaders/vulkan-shaders-gen.cpp
687
- $(CXX) $(CXXFLAGS) -o $@ $(LDFLAGS) ggml/src/vulkan-shaders/vulkan-shaders-gen.cpp
688
-
689
- endif # GGML_VULKAN
690
-
691
- ifdef GGML_HIPBLAS
692
- ifeq ($(wildcard /opt/rocm),)
693
- ROCM_PATH ?= /usr
694
- AMDGPU_TARGETS ?= $(shell $(shell which amdgpu-arch))
695
- else
696
- ROCM_PATH ?= /opt/rocm
697
- AMDGPU_TARGETS ?= $(shell $(ROCM_PATH)/llvm/bin/amdgpu-arch)
698
- endif
699
-
700
- GGML_CUDA_DMMV_X ?= 32
701
- GGML_CUDA_MMV_Y ?= 1
702
- GGML_CUDA_KQUANTS_ITER ?= 2
703
-
704
- MK_CPPFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUDA
705
-
706
- ifdef GGML_HIP_UMA
707
- MK_CPPFLAGS += -DGGML_HIP_UMA
708
- endif # GGML_HIP_UMA
709
-
710
- MK_LDFLAGS += -L$(ROCM_PATH)/lib -Wl,-rpath=$(ROCM_PATH)/lib
711
- MK_LDFLAGS += -L$(ROCM_PATH)/lib64 -Wl,-rpath=$(ROCM_PATH)/lib64
712
- MK_LDFLAGS += -lhipblas -lamdhip64 -lrocblas
713
-
714
- HIPCC ?= $(CCACHE) $(ROCM_PATH)/bin/hipcc
715
-
716
- HIPFLAGS += $(addprefix --offload-arch=,$(AMDGPU_TARGETS))
717
- HIPFLAGS += -DGGML_CUDA_DMMV_X=$(GGML_CUDA_DMMV_X)
718
- HIPFLAGS += -DGGML_CUDA_MMV_Y=$(GGML_CUDA_MMV_Y)
719
- HIPFLAGS += -DK_QUANTS_PER_ITERATION=$(GGML_CUDA_KQUANTS_ITER)
720
-
721
- ifdef GGML_CUDA_FORCE_DMMV
722
- HIPFLAGS += -DGGML_CUDA_FORCE_DMMV
723
- endif # GGML_CUDA_FORCE_DMMV
724
-
725
- ifdef GGML_CUDA_NO_PEER_COPY
726
- HIPFLAGS += -DGGML_CUDA_NO_PEER_COPY
727
- endif # GGML_CUDA_NO_PEER_COPY
728
-
729
- OBJ_GGML += ggml/src/ggml-cuda.o
730
- OBJ_GGML += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu))
731
- OBJ_GGML += $(OBJ_CUDA_TMPL)
732
-
733
- ggml/src/ggml-cuda.o: \
734
- ggml/src/ggml-cuda.cu \
735
- ggml/include/ggml.h \
736
- ggml/include/ggml-backend.h \
737
- ggml/include/ggml-cuda.h \
738
- ggml/src/ggml-backend-impl.h \
739
- ggml/src/ggml-common.h \
740
- $(wildcard ggml/src/ggml-cuda/*.cuh)
741
- $(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $<
742
-
743
- ggml/src/ggml-cuda/%.o: \
744
- ggml/src/ggml-cuda/%.cu \
745
- ggml/include/ggml.h \
746
- ggml/src/ggml-common.h \
747
- ggml/src/ggml-cuda/common.cuh
748
- $(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $<
749
- endif # GGML_HIPBLAS
750
-
751
- ifdef GGML_METAL
752
- MK_CPPFLAGS += -DGGML_USE_METAL
753
- MK_LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
754
- OBJ_GGML += ggml/src/ggml-metal/ggml-metal.o
755
- ifdef GGML_METAL_NDEBUG
756
- MK_CPPFLAGS += -DGGML_METAL_NDEBUG
757
- endif
758
-
759
- ifdef GGML_METAL_EMBED_LIBRARY
760
- MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY
761
- OBJ_GGML += ggml/src/ggml-metal/ggml-metal-embed.o
762
- endif
763
- endif # GGML_METAL
764
-
765
- ifdef GGML_METAL
766
- ggml/src/ggml-metal/ggml-metal.o: \
767
- ggml/src/ggml-metal/ggml-metal.m \
768
- ggml/src/ggml-metal/ggml-metal-impl.h \
769
- ggml/include/ggml-metal.h \
770
- ggml/include/ggml.h
771
- $(CC) $(CFLAGS) -c $< -o $@
772
-
773
- ifdef GGML_METAL_EMBED_LIBRARY
774
- ggml/src/ggml-metal/ggml-metal-embed.o: \
775
- ggml/src/ggml-metal/ggml-metal.metal \
776
- ggml/src/ggml-metal/ggml-metal-impl.h \
777
- ggml/src/ggml-common.h
778
- @echo "Embedding Metal library"
779
- @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
780
- @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
781
- $(eval TEMP_ASSEMBLY=$(shell mktemp -d))
782
- @echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)/ggml-metal-embed.s
783
- @echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s
784
- @echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s
785
- @echo ".incbin \"ggml/src/ggml-metal/ggml-metal-embed.metal\"" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s
786
- @echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s
787
- @echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)/ggml-metal-embed.s
788
- $(CC) $(CFLAGS) -c $(TEMP_ASSEMBLY)/ggml-metal-embed.s -o $@
789
- @rm -f ${TEMP_ASSEMBLY}/ggml-metal-embed.s
790
- @rmdir ${TEMP_ASSEMBLY}
791
- endif
792
- endif # GGML_METAL
793
-
794
- ifdef WHISPER_COREML
795
- src/coreml/whisper-encoder.o: src/coreml/whisper-encoder.mm src/coreml/whisper-encoder.h
796
- $(CXX) -O3 -I . -fobjc-arc -c src/coreml/whisper-encoder.mm -o src/coreml/whisper-encoder.o
797
-
798
- src/coreml/whisper-encoder-impl.o: src/coreml/whisper-encoder-impl.m src/coreml/whisper-encoder-impl.h
799
- $(CXX) -O3 -I . -fobjc-arc -c src/coreml/whisper-encoder-impl.m -o src/coreml/whisper-encoder-impl.o
800
-
801
- OBJ_WHISPER += src/coreml/whisper-encoder.o src/coreml/whisper-encoder-impl.o
802
- endif
803
-
804
- OBJ_GGML += \
805
- ggml/src/ggml.o \
806
- ggml/src/ggml-aarch64.o \
807
- ggml/src/ggml-alloc.o \
808
- ggml/src/ggml-backend.o \
809
- ggml/src/ggml-backend-reg.o \
810
- ggml/src/ggml-opt.o \
811
- ggml/src/ggml-quants.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
817
-
818
- OBJ_WHISPER += \
819
- src/whisper.o
820
-
821
- OBJ_COMMON += \
822
- examples/common.o \
823
- examples/common-ggml.o \
824
- examples/grammar-parser.o
825
-
826
- OBJ_SDL += \
827
- examples/common-sdl.o
828
-
829
- OBJ_ALL = $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
830
-
831
- LIB_GGML = $(LIB_PRE)ggml$(DSO_EXT)
832
- LIB_GGML_S = $(LIB_PRE)ggml.a
833
-
834
- LIB_WHISPER = $(LIB_PRE)whisper$(DSO_EXT)
835
- LIB_WHISPER_S = $(LIB_PRE)whisper.a
836
-
837
- LIB_COMMON = $(LIB_PRE)common$(DSO_EXT)
838
- LIB_COMMON_S = $(LIB_PRE)common.a
839
-
840
- LIB_COMMON_SDL = $(LIB_PRE)common-sdl$(DSO_EXT)
841
- LIB_COMMON_SDL_S = $(LIB_PRE)common-sdl.a
842
-
843
- LIB_ALL = $(LIB_GGML) $(LIB_WHISPER) $(LIB_COMMON) $(LIB_COMMON_SDL)
844
- LIB_ALL_S = $(LIB_GGML_S) $(LIB_WHISPER_S) $(LIB_COMMON_S) $(LIB_COMMON_SDL_S)
845
-
846
- GF_CC := $(CC)
847
- include scripts/get-flags.mk
848
-
849
- # combine build flags with cmdline overrides
850
- override CPPFLAGS := $(MK_CPPFLAGS) $(CPPFLAGS)
851
- override CFLAGS := $(CPPFLAGS) $(MK_CFLAGS) $(GF_CFLAGS) $(CFLAGS)
852
- BASE_CXXFLAGS := $(MK_CXXFLAGS) $(CXXFLAGS)
853
- override CXXFLAGS := $(BASE_CXXFLAGS) $(HOST_CXXFLAGS) $(GF_CXXFLAGS) $(CPPFLAGS)
854
- override NVCCFLAGS := $(MK_NVCCFLAGS) $(NVCCFLAGS)
855
- override LDFLAGS := $(MK_LDFLAGS) $(LDFLAGS)
856
-
857
- # identify CUDA host compiler
858
- ifdef GGML_CUDA
859
- GF_CC := $(NVCC) $(NVCCFLAGS) 2>/dev/null .c -Xcompiler
860
- include scripts/get-flags.mk
861
- CUDA_CXXFLAGS := $(BASE_CXXFLAGS) $(GF_CXXFLAGS) -Wno-pedantic
862
- endif
863
-
864
- ifdef WHISPER_CURL
865
- override CXXFLAGS := $(CXXFLAGS) -DWHISPER_USE_CURL
866
- override LDFLAGS := $(LDFLAGS) -lcurl
867
- endif
868
-
869
- #
870
- # Print build information
871
- #
872
-
873
- $(info I whisper.cpp build info: )
874
- $(info I UNAME_S: $(UNAME_S))
875
- $(info I UNAME_P: $(UNAME_P))
876
- $(info I UNAME_M: $(UNAME_M))
877
- $(info I CFLAGS: $(CFLAGS))
878
- $(info I CXXFLAGS: $(CXXFLAGS))
879
- $(info I NVCCFLAGS: $(NVCCFLAGS))
880
- $(info I LDFLAGS: $(LDFLAGS))
881
- $(info I CC: $(shell $(CC) --version | head -n 1))
882
- $(info I CXX: $(shell $(CXX) --version | head -n 1))
883
- ifdef GGML_CUDA
884
- $(info I NVCC: $(shell $(NVCC) --version | tail -n 1))
885
- CUDA_VERSION := $(shell $(NVCC) --version | grep -oP 'release (\K[0-9]+\.[0-9])')
886
- ifeq ($(shell awk -v "v=$(CUDA_VERSION)" 'BEGIN { print (v < 11.7) }'),1)
887
-
888
- ifndef CUDA_DOCKER_ARCH
889
- ifndef CUDA_POWER_ARCH
890
- $(error I ERROR: For CUDA versions < 11.7 a target CUDA architecture must be explicitly provided via environment variable CUDA_DOCKER_ARCH, e.g. by running "export CUDA_DOCKER_ARCH=compute_XX" on Unix-like systems, where XX is the minimum compute capability that the code needs to run on. A list with compute capabilities can be found here: https://developer.nvidia.com/cuda-gpus )
891
- endif # CUDA_POWER_ARCH
892
- endif # CUDA_DOCKER_ARCH
893
-
894
- endif # eq ($(shell echo "$(CUDA_VERSION) < 11.7" | bc),1)
895
- endif # GGML_CUDA
896
- $(info )
897
-
898
- ifdef DEPRECATE_WARNING
899
- $(info !!! DEPRECATION WARNING !!!)
900
- $(info The following WHISPER_ options are deprecated and will be removed in the future. Use the GGML_ prefix instead)
901
- $(info - WHISPER_CUDA)
902
- $(info - WHISPER_METAL)
903
- $(info - WHISPER_OPENMP)
904
- $(info - WHISPER_RPC)
905
- $(info - WHISPER_SYCL)
906
- $(info - WHISPER_SYCL_F16)
907
- $(info - WHISPER_OPENBLAS)
908
- $(info - WHISPER_OPENBLAS64)
909
- $(info - WHISPER_BLIS)
910
- $(info - WHISPER_NO_LLAMAFILE)
911
- $(info - WHISPER_NO_ACCELERATE)
912
- $(info - WHISPER_NO_OPENMP)
913
- $(info - WHISPER_NO_METAL)
914
- $(info )
915
- endif
916
-
917
- #
918
- # Build libraries
919
- #
920
-
921
- LIB_GGML = libggml.so
922
- LIB_GGML_S = libggml.a
923
-
924
- LIB_LLAMA = libllama.so
925
- LIB_LLAMA_S = libllama.a
926
-
927
- LIB_COMMON = libcommon.so
928
- LIB_COMMON_S = libcommon.a
929
-
930
- LIB_COMMON_SDL = libcommon-sdl.so
931
- LIB_COMMON_SDL_S = libcommon-sdl.a
932
-
933
- # Targets
934
- BUILD_TARGETS += $(LIB_GGML) $(LIB_GGML_S) $(LIB_LLAMA) $(LIB_LLAMA_S) $(LIB_COMMON) $(LIB_COMMON_S)
935
-
936
- # Dependency files
937
- DEP_FILES = $(OBJ_GGML:.o=.d) $(OBJ_LLAMA:.o=.d) $(OBJ_COMMON:.o=.d)
938
-
939
- # Default target
940
- all: $(BUILD_TARGETS)
941
-
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 \
947
- ggml/include/ggml.h \
948
- ggml/include/ggml-alloc.h \
949
- ggml/src/ggml-backend-impl.h \
950
- ggml/include/ggml-cpu.h \
951
- ggml/src/ggml-impl.h
952
- $(CXX) $(CXXFLAGS) -c $< -o $@
953
-
954
- # Rules for building object files
955
- ggml/%.o: ggml/%.c
956
- $(CC) $(CFLAGS) -MMD -c $< -o $@
957
-
958
- ggml/%.o: ggml/%.cpp
959
- $(CXX) $(CXXFLAGS) -MMD -c $< -o $@
960
-
961
- src/%.o: src/%.cpp
962
- $(CXX) $(CXXFLAGS) -MMD -c $< -o $@
963
-
964
- examples/%.o: examples/%.cpp
965
- $(CXX) $(CXXFLAGS) -MMD -c $< -o $@
966
-
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) $^
973
-
974
- $(LIB_LLAMA): $(OBJ_LLAMA) $(LIB_GGML)
975
- $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS)
976
-
977
- $(LIB_LLAMA_S): $(OBJ_LLAMA)
978
- ar rcs $(LIB_LLAMA_S) $^
979
-
980
- # common-sdl
981
-
982
- CFLAGS_SDL=$(shell sdl2-config --cflags)
983
- LDFLAGS_SDL=$(shell sdl2-config --libs)
984
-
985
- examples/common-sdl.o: \
986
- examples/common-sdl.cpp \
987
- examples/common-sdl.h
988
- $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $@
989
-
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) $^
995
-
996
- # Include dependency files
997
- -include $(DEP_FILES)
998
-
999
- # Clean rule
1000
- clean:
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
1005
-
1006
- #
1007
- # Examples
1008
- #
1009
-
1010
- # $< is the first prerequisite, i.e. the source file.
1011
- # Explicitly compile this to an object file so that it can be cached with ccache.
1012
- # The source file is then filtered out from $^ (the list of all prerequisites) and the object file is added instead.
1013
-
1014
- # Helper function that replaces .c, .cpp, and .cu file endings with .o:
1015
- GET_OBJ_FILE = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cu,%.o,$(1))))
1016
-
1017
- main: examples/main/main.cpp \
1018
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
1019
- $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
1020
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
1021
-
1022
- bench: examples/bench/bench.cpp \
1023
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
1024
- $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
1025
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
1026
-
1027
- quantize: examples/quantize/quantize.cpp \
1028
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
1029
- $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
1030
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
1031
-
1032
- server: examples/server/server.cpp \
1033
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
1034
- $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
1035
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LWINSOCK2)
1036
-
1037
- command: examples/command/command.cpp \
1038
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
1039
- $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
1040
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
1041
-
1042
- stream: examples/stream/stream.cpp \
1043
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
1044
- $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
1045
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
1046
-
1047
- lsp: examples/lsp/lsp.cpp \
1048
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
1049
- $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
1050
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
1051
-
1052
- # TODO: disabled until update
1053
- # https://github.com/ggerganov/whisper.cpp/issues/1818
1054
- #talk: examples/talk/talk.cpp examples/talk/gpt-2.cpp \
1055
- # $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
1056
- # $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
1057
- # $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
1058
-
1059
- talk-llama: examples/talk-llama/talk-llama.cpp examples/talk-llama/llama.cpp examples/talk-llama/llama-vocab.cpp examples/talk-llama/llama-grammar.cpp examples/talk-llama/llama-sampling.cpp examples/talk-llama/unicode.cpp examples/talk-llama/unicode-data.cpp \
1060
- $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
1061
- $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
1062
- $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
1063
-
1064
- #
1065
- # Tests
1066
- #
1067
-
1068
- tests: $(TEST_TARGETS)
1069
-
1070
- tests/test-c.o: tests/test-c.c include/whisper.h
1071
- $(CC) $(CFLAGS) -c $(filter-out %.h,$^) -o $@
1072
-
1073
  #
1074
  # Audio samples
1075
  #
@@ -1117,8 +45,10 @@ samples:
1117
  .PHONY: large-v3
1118
  .PHONY: large-v3-turbo
1119
 
1120
- tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3 large-v3-turbo: main
1121
  bash ./models/download-ggml-model.sh $@
 
 
1122
  @echo ""
1123
  @echo "==============================================="
1124
  @echo "Running $@ on all samples in ./samples ..."
@@ -1129,6 +59,6 @@ tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 larg
1129
  echo "[+] Running $@ on $$f ... (run 'ffplay $$f' to listen)" ; \
1130
  echo "----------------------------------------------" ; \
1131
  echo "" ; \
1132
- ./main -m models/[email protected] -f $$f ; \
1133
  echo "" ; \
1134
  done
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  #
2
  # Audio samples
3
  #
 
45
  .PHONY: large-v3
46
  .PHONY: large-v3-turbo
47
 
48
+ tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 large-v3 large-v3-turbo:
49
  bash ./models/download-ggml-model.sh $@
50
+ cmake -B build
51
+ cmake --build build --config Release
52
  @echo ""
53
  @echo "==============================================="
54
  @echo "Running $@ on all samples in ./samples ..."
 
59
  echo "[+] Running $@ on $$f ... (run 'ffplay $$f' to listen)" ; \
60
  echo "----------------------------------------------" ; \
61
  echo "" ; \
62
+ ./build/bin/main -m models/[email protected] -f $$f ; \
63
  echo "" ; \
64
  done