Skip to content

Commit 1cba9ff

Browse files
committed
refactor(makefile): remove errors and windows microsoft compiler specific flags
1 parent 2f64bd8 commit 1cba9ff

File tree

1 file changed

+40
-61
lines changed

1 file changed

+40
-61
lines changed

Makefile

Lines changed: 40 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -36,52 +36,44 @@ BUILD_LLAMA = $(BUILD_DIR)/llama.cpp
3636
BUILD_WHISPER = $(BUILD_DIR)/whisper.cpp
3737
BUILD_MINIAUDIO = $(BUILD_DIR)/miniaudio
3838

39-
OBJ_EXT = o
4039
# Compiler and flags
4140
CC = gcc
4241
CXX = g++
4342
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)
44-
LLAMA_OPTIONS = -DLLAMA_CURL=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=OFF -DLLAMA_BUILD_SERVER=OFF
45-
WHISPER_OPTIONS = -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_SERVER=OFF
46-
MINIAUDIO_OPTIONS = -DMINIAUDIO_BUILD_EXAMPLES=OFF -DMINIAUDIO_BUILD_TESTS=OFF
47-
48-
# Module-specific linking flags
49-
LLAMA_LDFLAGS = -L./$(BUILD_LLAMA)/common -L./$(BUILD_LLAMA)/ggml/src -L./$(BUILD_LLAMA)/src -lcommon -lggml -lggml-cpu -lggml-base -lllama
43+
LLAMA_OPTIONS = $(LLAMA) -DBUILD_SHARED_LIBS=OFF -DLLAMA_CURL=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=OFF -DLLAMA_BUILD_SERVER=OFF
44+
WHISPER_OPTIONS = $(WHISPER) -DBUILD_SHARED_LIBS=OFF -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_SERVER=OFF
45+
MINIAUDIO_OPTIONS = $(MINIAUDIO) -DBUILD_SHARED_LIBS=OFF -DMINIAUDIO_BUILD_EXAMPLES=OFF -DMINIAUDIO_BUILD_TESTS=OFF
46+
# Module-specific linker flags
47+
LLAMA_LDFLAGS = -L./$(BUILD_LLAMA)/common -L./$(BUILD_LLAMA)/ggml/src -L./$(BUILD_LLAMA)/src -lcommon -lggml -lggml-base -lggml-cpu -lllama
5048
WHISPER_LDFLAGS = -L./$(BUILD_WHISPER)/src -lwhisper
5149
MINIAUDIO_LDFLAGS = -L./$(BUILD_MINIAUDIO) -lminiaudio
52-
5350
LDFLAGS = $(LLAMA_LDFLAGS) $(WHISPER_LDFLAGS) $(MINIAUDIO_LDFLAGS)
5451

5552
# Files
5653
SRC_FILES = $(wildcard $(SRC_DIR)/*.c)
57-
OBJ_FILES = $(patsubst %.c, $(BUILD_DIR)/%.$(OBJ_EXT), $(notdir $(SRC_FILES)))
54+
OBJ_FILES = $(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SRC_FILES)))
5855
LLAMA_LIBS = $(BUILD_LLAMA)/common/libcommon.a $(BUILD_LLAMA)/ggml/src/libggml.a $(BUILD_LLAMA)/ggml/src/libggml-base.a $(BUILD_LLAMA)/ggml/src/libggml-cpu.a $(BUILD_LLAMA)/src/libllama.a
5956
WHISPER_LIBS = $(BUILD_WHISPER)/src/libwhisper.a
6057
MINIAUDIO_LIBS = $(BUILD_MINIAUDIO)/libminiaudio.a
6158

6259
# Platform-specific settings
6360
ifeq ($(PLATFORM),windows)
64-
OBJ_EXT = obj
65-
CC = cl
66-
CXX = cl
6761
TARGET := $(DIST_DIR)/ai.dll
68-
CFLAGS = /nologo /W3 /EHsc /I$(SRC_DIR) /I$(LLAMA_DIR)/ggml/include /I$(LLAMA_DIR)/include /I$(WHISPER_DIR)/include /I$(MINIAUDIO_DIR) /MD
69-
LDFLAGS = /DLL /OUT:$(TARGET) /LIBPATH:$(BUILD_LLAMA)/common /LIBPATH:$(BUILD_LLAMA)/ggml/src /LIBPATH:$(BUILD_LLAMA)/src /LIBPATH:$(BUILD_WHISPER)/src /LIBPATH:$(BUILD_MINIAUDIO) common.lib ggml.lib ggml-cpu.lib ggml-base.lib llama.lib whisper.lib miniaudio.lib bcrypt.lib
62+
LDFLAGS += -shared
63+
# Create .def file for Windows
7064
DEF_FILE := $(BUILD_DIR)/ai.def
71-
STRIP = echo "No strip needed for MSVC"
65+
STRIP = strip --strip-unneeded $@
7266
else ifeq ($(PLATFORM),macos)
7367
TARGET := $(DIST_DIR)/ai.dylib
7468
LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
7569
WHISPER_LIBS += $(BUILD_WHISPER)/src/libwhisper.coreml.a
76-
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
70+
WHISPER_LDFLAGS += -lwhisper.coreml
71+
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
7772
CFLAGS += -arch x86_64 -arch arm64
78-
LLAMA_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
79-
WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DWHISPER_COREML=ON
80-
MINIAUDIO_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
81-
# Strip removes symbols that are needed for the extension to work properly because loaded via `dlopen()`:
82-
# Error: dlopen(./dist/ai.dylib, 0x000A): symbol not found in flat namespace '_whisper_coreml_encode'
83-
# STRIP = strip -x -S $@
84-
STRIP = true
73+
LLAMA_OPTIONS += -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
74+
WHISPER_OPTIONS += -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DWHISPER_COREML=ON
75+
MINIAUDIO_OPTIONS += -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
76+
STRIP = strip -x -S $@
8577
else ifeq ($(PLATFORM),android)
8678
# Set ARCH to find Android NDK's Clang compiler, the user should set the ARCH
8779
ifeq ($(filter %,$(ARCH)),)
@@ -104,41 +96,35 @@ else ifeq ($(PLATFORM),android)
10496
CXX = $(CC)++
10597
TARGET := $(DIST_DIR)/ai.so
10698
LDFLAGS += -static-libstdc++ -shared
107-
LLAMA_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake -DANDROID_ABI=$(if $(filter aarch64,$(ARCH)),arm64-v8a,$(ARCH)) -DANDROID_PLATFORM=android-26 -DCMAKE_C_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_CXX_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
108-
WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake -DANDROID_ABI=$(if $(filter aarch64,$(ARCH)),arm64-v8a,$(ARCH)) -DANDROID_PLATFORM=android-26 -DCMAKE_C_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_CXX_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
109-
MINIAUDIO_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake -DANDROID_ABI=$(if $(filter aarch64,$(ARCH)),arm64-v8a,$(ARCH)) -DANDROID_PLATFORM=android-26 -DCMAKE_C_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_CXX_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_POSITION_INDEPENDENT_CODE=ON
99+
LLAMA_OPTIONS += -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake -DANDROID_ABI=$(if $(filter aarch64,$(ARCH)),arm64-v8a,$(ARCH)) -DANDROID_PLATFORM=android-26 -DCMAKE_C_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_CXX_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
100+
WHISPER_OPTIONS += -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake -DANDROID_ABI=$(if $(filter aarch64,$(ARCH)),arm64-v8a,$(ARCH)) -DANDROID_PLATFORM=android-26 -DCMAKE_C_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_CXX_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
101+
MINIAUDIO_OPTIONS += -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake -DANDROID_ABI=$(if $(filter aarch64,$(ARCH)),arm64-v8a,$(ARCH)) -DANDROID_PLATFORM=android-26 -DCMAKE_C_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_CXX_FLAGS="-march=$(if $(filter aarch64,$(ARCH)),armv8.7a,x86-64)" -DCMAKE_POSITION_INDEPENDENT_CODE=ON
110102
STRIP = $(BIN)/llvm-strip --strip-unneeded $@
111103
else ifeq ($(PLATFORM),ios)
112-
CC = clang
113-
CXX = $(CC)++
114104
TARGET := $(DIST_DIR)/ai.dylib
115105
SDK := -isysroot $(shell xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=14.0
116106
LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
117-
# Need to force-load `libwhisper.coreml.a` for CoreML because dinamically loaded on runtime and the compiler strips the symbols
118-
LDFLAGS += -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 Accelerate -framework Metal -framework Foundation -framework CoreML -framework AVFoundation -framework AudioToolbox -framework Security -dynamiclib $(SDK)
119-
# Miniaudio requires to compile as Objective-C on iOS
120-
# https://github.com/mackron/miniaudio/blob/master/README.md#building
107+
WHISPER_LDFLAGS += -lwhisper.coreml
108+
LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-metal -lggml-metal -L./$(BUILD_LLAMA)/ggml/src/ggml-blas -lggml-blas -framework Accelerate -framework Metal -framework Foundation -framework CoreML -ldl -dynamiclib $(SDK)
121109
CFLAGS += -arch arm64 -x objective-c $(SDK)
122-
LLAMA_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0
123-
WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DWHISPER_COREML=ON
110+
LLAMA_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0
111+
WHISPER_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DWHISPER_COREML=ON
124112
STRIP = strip -x -S $@
125113
else ifeq ($(PLATFORM),isim)
126114
TARGET := $(DIST_DIR)/ai.dylib
127115
SDK := -isysroot $(shell xcrun --sdk iphonesimulator --show-sdk-path) -miphonesimulator-version-min=14.0
128116
LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
129-
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 Accelerate -framework Metal -framework Foundation -framework CoreML -framework AVFoundation -framework AudioToolbox -framework Security -dynamiclib $(SDK)
117+
WHISPER_LDFLAGS += -lwhisper.coreml
118+
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 Accelerate -framework Metal -framework Foundation -framework CoreML -ldl -dynamiclib $(SDK)
130119
CFLAGS += -arch x86_64 -arch arm64 -x objective-c $(SDK)
131-
LLAMA_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
132-
WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DWHISPER_COREML=ON
120+
LLAMA_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
121+
WHISPER_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DWHISPER_COREML=ON
133122
else # linux
134123
TARGET := $(DIST_DIR)/ai.so
135-
# Using -DGGML_CPU_ALL_VARIANTS=ON, `-lggml-cpu` is not needed
136-
LDFLAGS := $(filter-out -lggml-cpu,$(LDFLAGS))
137-
LDFLAGS += -shared -L./$(BUILD_LLAMA)/bin -Wl,-rpath,./$(BUILD_LLAMA)/bin -Wl,-rpath,./$(BUILD_LLAMA)/common -Wl,-rpath,./$(BUILD_LLAMA)/ggml/src -Wl,-rpath,./$(BUILD_LLAMA)/src -Wl,-rpath,./$(BUILD_WHISPER)/src
138-
# Add miniaudio Linux-specific flags (as per miniaudio docs)
124+
LDFLAGS += -shared
139125
MINIAUDIO_LDFLAGS += -lpthread -lm
140-
LLAMA_OPTIONS += -DBUILD_SHARED_LIBS=ON -DGGML_OPENMP=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
141-
WHISPER_OPTIONS += -DBUILD_SHARED_LIBS=ON -DGGML_OPENMP=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
126+
LLAMA_OPTIONS += -DGGML_OPENMP=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
127+
WHISPER_OPTIONS += -DGGML_OPENMP=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
142128
STRIP = strip --strip-unneeded $@
143129
endif
144130

@@ -147,7 +133,7 @@ $(DEF_FILE):
147133
ifeq ($(PLATFORM),windows)
148134
@echo "LIBRARY ai.dll" > $@
149135
@echo "EXPORTS" >> $@
150-
@echo " sqlite3_ai_init" >> $@
136+
@echo " sqlite3_ai_init" >> $@
151137
endif
152138

153139
# Make sure the build and dist directories exist
@@ -157,42 +143,35 @@ $(shell mkdir -p $(BUILD_DIR) $(DIST_DIR))
157143
extension: $(TARGET)
158144
all: $(TARGET)
159145

160-
# Ensure object files are built first
161-
compile: $(OBJ_FILES)
162-
163146
# Loadable library
164-
$(TARGET): $(DEF_FILE) $(LLAMA_LIBS) $(WHISPER_LIBS) $(MINIAUDIO_LIBS)
165-
ifeq ($(PLATFORM),windows)
166-
$(CXX) $(OBJ_FILES) /link $(LDFLAGS)
167-
else
147+
$(TARGET): $(OBJ_FILES) $(DEF_FILE) $(LLAMA_LIBS) $(WHISPER_LIBS) $(MINIAUDIO_LIBS)
168148
$(CXX) $(OBJ_FILES) $(DEF_FILE) -o $@ $(LDFLAGS)
149+
ifeq ($(PLATFORM),windows)
150+
# Generate import library for Windows
151+
dlltool -D $@ -d $(DEF_FILE) -l $(DIST_DIR)/ai.lib
169152
endif
153+
# Strip debug symbols
170154
$(STRIP)
171155

172156
# Object files
173-
ifeq ($(PLATFORM),windows)
174-
$(BUILD_DIR)/%.obj: %.c
175-
$(CC) $(CFLAGS) /c $< /Fo$@
176-
else
177157
$(BUILD_DIR)/%.o: %.c
178158
$(CC) $(CFLAGS) -O3 -fPIC -c $< -o $@
179-
endif
180159

181160
test: $(TARGET)
182161
$(SQLITE3) ":memory:" -cmd ".bail on" ".load ./dist/ai" "SELECT ai_version();"
183162

184-
# Build submodules (only after successful compilation of the extension)
185-
build/llama.cpp.stamp: | compile
163+
# Build submodules
164+
build/llama.cpp.stamp:
186165
cmake -B $(BUILD_LLAMA) $(LLAMA_OPTIONS) $(LLAMA_DIR)
187166
cmake --build $(BUILD_LLAMA) --config Release -- -j$(CPUS)
188167
touch $@
189168

190-
build/whisper.cpp.stamp: | compile
169+
build/whisper.cpp.stamp:
191170
cmake -B $(BUILD_WHISPER) $(WHISPER_OPTIONS) $(WHISPER_DIR)
192171
cmake --build $(BUILD_WHISPER) --config Release -- -j$(CPUS)
193172
touch $@
194173

195-
build/miniaudio.stamp: | compile
174+
build/miniaudio.stamp:
196175
cmake -B $(BUILD_MINIAUDIO) $(MINIAUDIO_OPTIONS) $(MINIAUDIO_DIR)
197176
cmake --build $(BUILD_MINIAUDIO) --config Release -- -j$(CPUS)
198177
touch $@
@@ -229,4 +208,4 @@ help:
229208
@echo " test - Test the extension"
230209
@echo " help - Display this help message"
231210

232-
.PHONY: all clean test extension help compile
211+
.PHONY: all clean test extension help

0 commit comments

Comments
 (0)