2424# Speed up builds by using all available CPU cores
2525MAKEFLAGS += -j$(CPUS )
2626
27- # Compiler and flags
28- CC = gcc
29- CXX = g++
30- CFLAGS = -Wall -Wextra -Wno-unused-parameter -I$(SRC_DIR ) -I$(LLAMA_DIR ) /ggml/include -I$(LLAMA_DIR ) /include -I$(WHISPER_DIR ) /include -I$(MINIAUDIO_DIR )
31- LDFLAGS = $(LLAMA_LDFLAGS ) $(WHISPER_LDFLAGS ) $(MINIAUDIO_LDFLAGS )
32- LLAMA_OPTIONS = $(LLAMA ) -DLLAMA_CURL=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=OFF -DLLAMA_BUILD_SERVER=OFF
33- WHISPER_OPTIONS = $(WHISPER ) -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_SERVER=OFF
34- MINIAUDIO_OPTIONS = -DMINIAUDIO_BUILD_EXAMPLES=OFF -DMINIAUDIO_BUILD_TESTS=OFF
35-
36- # Module-specific linking flags
37- LLAMA_LDFLAGS = -L./$(BUILD_LLAMA ) /common -L./$(BUILD_LLAMA ) /ggml/src -L./$(BUILD_LLAMA ) /src -lcommon -lggml -lggml-cpu -lggml-base -lllama
38- WHISPER_LDFLAGS = -L./$(BUILD_WHISPER ) /src -lwhisper
39- MINIAUDIO_LDFLAGS = -L./$(BUILD_MINIAUDIO ) -lminiaudio
40-
4127# Directories
4228SRC_DIR = src
4329DIST_DIR = dist
@@ -50,6 +36,21 @@ BUILD_LLAMA = $(BUILD_DIR)/llama.cpp
5036BUILD_WHISPER = $(BUILD_DIR ) /whisper.cpp
5137BUILD_MINIAUDIO = $(BUILD_DIR ) /miniaudio
5238
39+ # Compiler and flags
40+ CC = gcc
41+ CXX = g++
42+ CFLAGS = -Wall -Wextra -Wno-unused-parameter -I$(SRC_DIR ) -I$(LLAMA_DIR ) /ggml/include -I$(LLAMA_DIR ) /include -I$(WHISPER_DIR ) /include -I$(MINIAUDIO_DIR )
43+ LLAMA_OPTIONS = -DLLAMA_CURL=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=OFF -DLLAMA_BUILD_SERVER=OFF
44+ WHISPER_OPTIONS = -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_SERVER=OFF
45+ MINIAUDIO_OPTIONS = -DMINIAUDIO_BUILD_EXAMPLES=OFF -DMINIAUDIO_BUILD_TESTS=OFF
46+
47+ # Module-specific linking flags
48+ LLAMA_LDFLAGS = -L./$(BUILD_LLAMA ) /common -L./$(BUILD_LLAMA ) /ggml/src -L./$(BUILD_LLAMA ) /src -lcommon -lggml -lggml-cpu -lggml-base -lllama
49+ WHISPER_LDFLAGS = -L./$(BUILD_WHISPER ) /src -lwhisper
50+ MINIAUDIO_LDFLAGS = -L./$(BUILD_MINIAUDIO ) -lminiaudio
51+
52+ LDFLAGS = $(LLAMA_LDFLAGS ) $(WHISPER_LDFLAGS ) $(MINIAUDIO_LDFLAGS )
53+
5354# Files
5455SRC_FILES = $(wildcard $(SRC_DIR ) /* .c)
5556OBJ_FILES = $(patsubst % .c, $(BUILD_DIR ) /% .o, $(notdir $(SRC_FILES ) ) )
@@ -67,12 +68,13 @@ ifeq ($(PLATFORM),windows)
6768else ifeq ($(PLATFORM),macos)
6869 TARGET := $(DIST_DIR ) /ai.dylib
6970 LLAMA_LIBS += $(BUILD_LLAMA ) /ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA ) /ggml/src/ggml-blas/libggml-blas.a
70- LDFLAGS += -arch x86_64 -arch arm64 -L./$(BUILD_LLAMA ) /ggml/src/ggml-metal -lggml-metal -L./$(BUILD_LLAMA ) /ggml/src/ggml-blas -lggml-blas -framework Metal -framework Foundation -framework CoreFoundation -framework QuartzCore -framework Accelerate -framework CoreML -dynamiclib -undefined dynamic_lookup
71+ WHISPER_LIBS += $(BUILD_WHISPER ) /src/libwhisper.coreml.a
72+ LDFLAGS += -arch x86_64 -arch arm64 -L./$(BUILD_LLAMA ) /ggml/src/ggml-metal -lggml-metal -L./$(BUILD_LLAMA ) /ggml/src/ggml-blas -lggml-blas -Wl,-force_load,$(BUILD_WHISPER ) /src/libwhisper.coreml.a -framework Metal -framework Foundation -framework CoreFoundation -framework QuartzCore -framework Accelerate -framework CoreML -dynamiclib -undefined dynamic_lookup
7173 CFLAGS += -arch x86_64 -arch arm64
7274 LLAMA_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
73- WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DWHISPER_COREML=ON
75+ WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DWHISPER_SHARED_LIB=OFF - DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DWHISPER_COREML=ON
7476 MINIAUDIO_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
75- STRIP = strip -x -S $@
77+ # STRIP = strip -x -S $@ # Disabled for debugging symbol issues
7678else ifeq ($(PLATFORM),android)
7779 # Set ARCH to find Android NDK's Clang compiler, the user should set the ARCH
7880 ifeq ($(filter %,$(ARCH)),)
@@ -134,9 +136,9 @@ endif
134136# Windows .def file generation
135137$(DEF_FILE ) :
136138ifeq ($(PLATFORM ) ,windows)
137- @echo "LIBRARY ai.dll" > $@
138- @echo "EXPORTS" >> $@
139- @echo " sqlite3_ai_init" >> $@
139+ @echo "LIBRARY ai.dll" > $@
140+ @echo "EXPORTS" >> $@
141+ @echo " sqlite3_ai_init" >> $@
140142endif
141143
142144# Make sure the build and dist directories exist
@@ -151,67 +153,70 @@ compile: $(OBJ_FILES)
151153
152154# Loadable library
153155$(TARGET ) : $(DEF_FILE ) $(LLAMA_LIBS ) $(WHISPER_LIBS ) $(MINIAUDIO_LIBS )
154- $(CXX ) $(OBJ_FILES ) $(DEF_FILE ) -o $@ $(LDFLAGS )
156+ $(CXX) $(OBJ_FILES) $(DEF_FILE) -o $@ $(LDFLAGS)
155157ifeq ($(PLATFORM ) ,windows)
156158 # Generate import library for Windows
157- dlltool -D $@ -d $(DEF_FILE) -l $(DIST_DIR)/ai.lib
159+ dlltool -D $@ -d $(DEF_FILE) -l $(DIST_DIR)/ai.lib
158160endif
159- # Strip debug symbols
160- $(STRIP)
161+ # Strip debug symbols (disabled for macOS symbol debugging)
162+ ifneq ($(PLATFORM),macos)
163+ @echo PLATFORM is [$(PLATFORM)]
164+ $(STRIP)
165+ endif
161166
162167# Object files
163168$(BUILD_DIR ) /% .o : % .c
164- $(CC ) $(CFLAGS ) -O3 -fPIC -c $< -o $@
169+ $(CC) $(CFLAGS) -O3 -fPIC -c $< -o $@
165170
166171test : $(TARGET )
167- $(SQLITE3 ) " :memory:" -cmd " .bail on" " .load ./dist/ai" " SELECT ai_version();"
172+ $(SQLITE3 ) " :memory:" -cmd ".bail on" ".load ./dist/ai" "SELECT ai_version();"
168173
169174# Build submodules (only after successful compilation of the extension)
170175build/llama.cpp.stamp : | compile
171- cmake -B $(BUILD_LLAMA ) $(LLAMA_OPTIONS ) $(LLAMA_DIR )
172- cmake --build $(BUILD_LLAMA ) --config Release -- -j$(CPUS )
173- touch $@
176+ cmake -B $(BUILD_LLAMA) $(LLAMA_OPTIONS) $(LLAMA_DIR)
177+ cmake --build $(BUILD_LLAMA) --config Release -- -j$(CPUS)
178+ touch $@
174179
175180build/whisper.cpp.stamp : | compile
176- cmake -B $(BUILD_WHISPER ) $(WHISPER_OPTIONS ) $(WHISPER_DIR )
177- cmake --build $(BUILD_WHISPER ) --config Release -- -j$(CPUS )
178- touch $@
181+ cmake -B $(BUILD_WHISPER) $(WHISPER_OPTIONS) $(WHISPER_DIR)
182+ cmake --build $(BUILD_WHISPER) --config Release -- -j$(CPUS)
183+ touch $@
179184
180185build/miniaudio.stamp : | compile
181- cmake -B $(BUILD_MINIAUDIO ) $(MINIAUDIO_OPTIONS ) $(MINIAUDIO_DIR )
182- cmake --build $(BUILD_MINIAUDIO ) --config Release -- -j$(CPUS )
183- touch $@
186+ cmake -B $(BUILD_MINIAUDIO) $(MINIAUDIO_OPTIONS) $(MINIAUDIO_DIR)
187+ cmake --build $(BUILD_MINIAUDIO) --config Release -- -j$(CPUS)
188+ touch $@
184189
185190$(LLAMA_LIBS ) : build/llama.cpp.stamp
186191$(WHISPER_LIBS ) : build/whisper.cpp.stamp
187192$(MINIAUDIO_LIBS ) : build/miniaudio.stamp
188193
189194# Tools
190195version :
191- @echo $(shell sed -n 's/^#define SQLITE_AI_VERSION[[:space:]]* "\([^"]* \) " .*/\1/p' src/sqlite-ai.h)
196+ @echo $(shell sed -n 's/^#define SQLITE_AI_VERSION[[ :space:]]* "\([^"]* \)".* /\1/p' src/sqlite-ai.h)
192197
193198# Clean up generated files
194199clean :
195- rm -rf $(BUILD_DIR ) /* $(DIST_DIR ) /* * .gcda * .gcno * .gcov * .sqlite
200+ rm -rf $(BUILD_DIR)/* $(DIST_DIR)/* *.gcda *.gcno *.gcov *.sqlite
196201
197202# Help message
198203help :
199- @echo " SQLite AI Extension Makefile"
200- @echo " Usage:"
201- @echo " make [PLATFORM=platform] [ARCH=arch] [ANDROID_NDK=\$ $ANDROID_HOME /ndk/26.1.10909125] [target]"
202- @echo " "
203- @echo " Platforms:"
204- @echo " linux (default on Linux)"
205- @echo " macos (default on macOS)"
206- @echo " windows (default on Windows)"
207- @echo " android (needs ARCH to be set to x86_64 or arm64-v8a and ANDROID_NDK to be set)"
208- @echo " ios (only on macOS)"
209- @echo " isim (only on macOS)"
210- @echo " "
211- @echo " Targets:"
212- @echo " all - Build the extension (default)"
213- @echo " clean - Remove built files"
214- @echo " test - Test the extension"
215- @echo " help - Display this help message"
204+ @echo "SQLite AI Extension Makefile"
205+ @echo "Usage :"
206+ @echo " make [PLATFORM=platform] [ARCH=arch] [ANDROID_NDK=\$$ANDROID_HOME/ndk/26.1.10909125] [target]"
207+ @echo ""
208+ @echo "Platforms :"
209+ @echo " linux (default on Linux)"
210+ @echo " macos (default on macOS)"
211+ @echo " windows (default on Windows)"
212+ @echo " android (needs ARCH to be set to x86_64 or arm64-v8a and ANDROID_NDK to be set)"
213+ @echo " ios (only on macOS)"
214+ @echo " isim (only on macOS)"
215+ @echo ""
216+ @echo "Targets :"
217+ @echo " all - Build the extension (default)"
218+ @echo " clean - Remove built files"
219+ @echo " test - Test the extension"
220+ @echo " help - Display this help message"
216221
217222.PHONY : all clean test extension help compile
0 commit comments