1
- GOCMD =go
1
+ CMAKE_ARGS? =
2
+ BUILD_TYPE? =
2
3
NATIVE? =false
3
4
4
- BUILD_TYPE? =
5
- CMAKE_ARGS? =
5
+ GOCMD? =go
6
+ GO_TAGS? =
7
+ JOBS? =$(shell nproc --ignore=1)
6
8
7
9
# whisper.cpp version
8
10
WHISPER_REPO? =https://github.com/ggml-org/whisper.cpp
9
- WHISPER_CPP_VERSION? =fc45bb86251f774ef817e89878bb4c2636c8a58f
10
-
11
- export WHISPER_CMAKE_ARGS?=-DBUILD_SHARED_LIBS =OFF
12
- export WHISPER_DIR =$(abspath ./sources/whisper.cpp)
13
- export WHISPER_INCLUDE_PATH=$(WHISPER_DIR ) /include :$(WHISPER_DIR ) /ggml/include
14
- export WHISPER_LIBRARY_PATH=$(WHISPER_DIR ) /build/src/ :$(WHISPER_DIR ) /build/ggml/src
11
+ WHISPER_CPP_VERSION? =16c2924cb2c4b5c9f79220aa7708eb5b346b029b
15
12
16
- CGO_LDFLAGS_WHISPER? =
17
- CGO_LDFLAGS_WHISPER+ =-lggml
18
- CMAKE_ARGS+=-DBUILD_SHARED_LIBS =OFF -DLLAMA_CURL=OFF
19
- CUDA_LIBPATH? =/usr/local/cuda/lib64/
13
+ CMAKE_ARGS+=-DBUILD_SHARED_LIBS =OFF
20
14
21
- ONEAPI_VERSION? =2025.2
22
-
23
- # IF native is false, we add -DGGML_NATIVE=OFF to CMAKE_ARGS
24
- ifeq ($(NATIVE ) ,false)
25
- CMAKE_ARGS+=-DGGML_NATIVE=OFF
26
- WHISPER_CMAKE_ARGS+=-DGGML_NATIVE=OFF
27
- endif
28
- CURRENT_MAKEFILE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST ) ) ) )
29
15
ifeq ($(NATIVE ) ,false)
30
16
CMAKE_ARGS+=-DGGML_NATIVE=OFF
31
17
endif
32
- # If build type is cublas, then we set -DGGML_CUDA=ON to CMAKE_ARGS automatically
18
+
33
19
ifeq ($(BUILD_TYPE ) ,cublas)
34
- CGO_LDFLAGS+=-lcublas -lcudart -L$(CUDA_LIBPATH) -L$(CUDA_LIBPATH)/stubs/ -lcuda
35
20
CMAKE_ARGS+=-DGGML_CUDA=ON
36
- CGO_LDFLAGS_WHISPER+=-lcufft -lggml-cuda
37
- export WHISPER_LIBRARY_PATH:=$(WHISPER_LIBRARY_PATH):$(WHISPER_DIR)/build/ggml/src/ggml-cuda/
38
- # If build type is openblas then we set -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS
39
- # to CMAKE_ARGS automatically
40
21
else ifeq ($(BUILD_TYPE),openblas)
41
22
CMAKE_ARGS+=-DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS
42
- # If build type is clblas (openCL) we set -DGGML_CLBLAST=ON -DCLBlast_DIR=/some/path
43
23
else ifeq ($(BUILD_TYPE),clblas)
44
24
CMAKE_ARGS+=-DGGML_CLBLAST=ON -DCLBlast_DIR=/some/path
45
- # If it's hipblas we do have also to set CC=/opt/rocm/llvm/bin/clang CXX=/opt/rocm/llvm/bin/clang++
46
25
else ifeq ($(BUILD_TYPE),hipblas)
47
- ROCM_HOME ?= /opt/rocm
48
- ROCM_PATH ?= /opt/rocm
49
- LD_LIBRARY_PATH ?= /opt/rocm/lib:/opt/rocm/llvm/lib
50
- export STABLE_BUILD_TYPE=
51
- export CXX=$(ROCM_HOME)/llvm/bin/clang++
52
- export CC=$(ROCM_HOME)/llvm/bin/clang
53
- # GPU_TARGETS ?= gfx803,gfx900,gfx906,gfx908,gfx90a,gfx942,gfx1010,gfx1030,gfx1032,gfx1100,gfx1101,gfx1102
54
- # AMDGPU_TARGETS ?= "$(GPU_TARGETS)"
55
- CMAKE_ARGS+=-DGGML_HIP=ON
56
- CGO_LDFLAGS += -O3 --rtlib=compiler-rt -unwindlib=libgcc -lhipblas -lrocblas --hip-link -L${ROCM_HOME}/lib/llvm/lib -L$(CURRENT_MAKEFILE_DIR)/sources/whisper.cpp/build/ggml/src/ggml-hip/ -lggml-hip
57
- # CMAKE_ARGS+=-DGGML_HIP=ON -DAMDGPU_TARGETS="$(AMDGPU_TARGETS)" -DGPU_TARGETS="$(GPU_TARGETS)"
26
+ CMAKE_ARGS+=-DGGML_HIPBLAS=ON
58
27
else ifeq ($(BUILD_TYPE),vulkan)
59
- CMAKE_ARGS+=-DGGML_VULKAN=1
60
- CGO_LDFLAGS_WHISPER+=-lggml-vulkan -lvulkan
61
- export WHISPER_LIBRARY_PATH:=$(WHISPER_LIBRARY_PATH):$(WHISPER_DIR)/build/ggml/src/ggml-vulkan/
28
+ CMAKE_ARGS+=-DGGML_VULKAN=ON
62
29
else ifeq ($(OS),Darwin)
63
- ifeq ($(BUILD_TYPE),)
64
- BUILD_TYPE=metal
65
- endif
66
30
ifneq ($(BUILD_TYPE),metal)
67
31
CMAKE_ARGS+=-DGGML_METAL=OFF
68
- CGO_LDFLAGS_WHISPER+=-lggml-blas
69
- export WHISPER_LIBRARY_PATH:=$(WHISPER_LIBRARY_PATH):$(WHISPER_DIR)/build/ggml/src/ggml-blas
70
32
else
71
33
CMAKE_ARGS+=-DGGML_METAL=ON
72
34
CMAKE_ARGS+=-DGGML_METAL_EMBED_LIBRARY=ON
73
- CMAKE_ARGS+=-DGGML_METAL_USE_BF16=ON
74
- CMAKE_ARGS+=-DGGML_OPENMP=OFF
75
- CMAKE_ARGS+=-DWHISPER_BUILD_EXAMPLES=OFF
76
- CMAKE_ARGS+=-DWHISPER_BUILD_TESTS=OFF
77
- CMAKE_ARGS+=-DWHISPER_BUILD_SERVER=OFF
78
- CGO_LDFLAGS += -framework Accelerate
79
- CGO_LDFLAGS_WHISPER+=-lggml-metal -lggml-blas
80
- export WHISPER_LIBRARY_PATH:=$(WHISPER_LIBRARY_PATH):$(WHISPER_DIR)/build/ggml/src/ggml-metal/:$(WHISPER_DIR)/build/ggml/src/ggml-blas
81
35
endif
82
- TARGET+=--target ggml-metal
83
36
endif
84
37
85
- ifneq (,$(findstring sycl,$(BUILD_TYPE ) ) )
86
- export CC=icx
87
- export CXX=icpx
88
- CGO_LDFLAGS_WHISPER += -fsycl -L${DNNLROOT}/lib -rpath ${ONEAPI_ROOT}/${ONEAPI_VERSION}/lib -ldnnl ${MKLROOT}/lib/intel64/libmkl_sycl.a -fiopenmp -fopenmp-targets=spir64 -lOpenCL -lggml-sycl
89
- CGO_LDFLAGS_WHISPER += $(shell pkg-config --libs mkl-static-lp64-gomp)
90
- CGO_CXXFLAGS_WHISPER += -fiopenmp -fopenmp-targets=spir64
91
- CGO_CXXFLAGS_WHISPER += $(shell pkg-config --cflags mkl-static-lp64-gomp )
92
- export WHISPER_LIBRARY_PATH:=$(WHISPER_LIBRARY_PATH):$(WHISPER_DIR)/build/ggml/src/ggml-sycl/
38
+ ifeq ($(BUILD_TYPE ) ,sycl_f16)
93
39
CMAKE_ARGS+=-DGGML_SYCL=ON \
94
40
-DCMAKE_C_COMPILER=icx \
95
41
-DCMAKE_CXX_COMPILER=icpx \
96
- -DCMAKE_CXX_FLAGS="-fsycl"
42
+ -DGGML_SYCL_F16=ON
97
43
endif
98
44
99
- ifeq ($(BUILD_TYPE ) ,sycl_f16)
100
- CMAKE_ARGS+=-DGGML_SYCL_F16=ON
101
- endif
102
-
103
- ifneq ($(OS ) ,Darwin)
104
- CGO_LDFLAGS_WHISPER+=-lgomp
45
+ ifeq ($(BUILD_TYPE ) ,sycl_f32)
46
+ CMAKE_ARGS+=-DGGML_SYCL=ON \
47
+ -DCMAKE_C_COMPILER=icx \
48
+ -DCMAKE_CXX_COMPILER=icpx
105
49
endif
106
50
107
- # # whisper
108
51
sources/whisper.cpp :
109
52
mkdir -p sources/whisper.cpp
110
53
cd sources/whisper.cpp && \
@@ -114,18 +57,21 @@ sources/whisper.cpp:
114
57
git checkout $(WHISPER_CPP_VERSION ) && \
115
58
git submodule update --init --recursive --depth 1 --single-branch
116
59
117
- sources/whisper.cpp/build/src/libwhisper.a : sources/whisper.cpp
118
- cd sources/whisper.cpp && cmake $(CMAKE_ARGS ) $(WHISPER_CMAKE_ARGS ) . -B ./build
119
- cd sources/whisper.cpp/build && cmake --build . --config Release
60
+ libgowhisper.so : sources/whisper.cpp CMakeLists.txt gowhisper.cpp gowhisper.h
61
+ mkdir -p build && \
62
+ cd build && \
63
+ cmake .. $(CMAKE_ARGS ) && \
64
+ cmake --build . --config Release -j$(JOBS ) && \
65
+ cd .. && \
66
+ mv build/libgowhisper.so ./
120
67
121
- whisper : sources/whisper.cpp sources/whisper.cpp/build/src/libwhisper.a
122
- $(GOCMD ) mod edit -replace github.com/ggerganov/whisper.cpp=$(CURDIR ) /sources/whisper.cpp
123
- $(GOCMD ) mod edit -replace github.com/ggerganov/whisper.cpp/bindings/go=$(CURDIR ) /sources/whisper.cpp/bindings/go
124
- CGO_LDFLAGS=" $( CGO_LDFLAGS) $( CGO_LDFLAGS_WHISPER) " C_INCLUDE_PATH=" ${WHISPER_INCLUDE_PATH} " LIBRARY_PATH=" ${WHISPER_LIBRARY_PATH} " LD_LIBRARY_PATH=" ${WHISPER_LIBRARY_PATH} " \
125
- CGO_CXXFLAGS=" $( CGO_CXXFLAGS_WHISPER) " \
126
- $(GOCMD ) build -ldflags " $( LD_FLAGS) " -tags " $( GO_TAGS) " -o whisper ./
68
+ whisper : main.go gowhisper.go libgowhisper.so
69
+ CGO_ENABLED=0 $(GOCMD ) build -tags " $( GO_TAGS) " -o whisper ./
127
70
128
71
package :
129
72
bash package.sh
130
73
131
74
build : whisper package
75
+
76
+ clean :
77
+ rm -rf libgowhisper.o build whisper
0 commit comments