@@ -43,8 +43,15 @@ CFLAGS = -Wall -Wextra -Wno-unused-parameter -I$(SRC_DIR) -I$(LLAMA_DIR)/ggml/in
4343LLAMA_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 -DGGML_RPC=OFF
4444WHISPER_OPTIONS = $(WHISPER ) -DBUILD_SHARED_LIBS=OFF -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_SERVER=OFF -DWHISPER_RPC=OFF
4545MINIAUDIO_OPTIONS = $(MINIAUDIO ) -DBUILD_SHARED_LIBS=OFF -DMINIAUDIO_BUILD_EXAMPLES=OFF -DMINIAUDIO_BUILD_TESTS=OFF
46+ # MinGW produces .a files without lib prefix, use -l:filename.a syntax
47+ ifeq ($(PLATFORM ) ,windows)
48+ L = -l:
49+ A = .a
50+ else
51+ L = -l
52+ endif
4653# Module-specific linker flags
47- LLAMA_LDFLAGS = -L./$(BUILD_LLAMA ) /common -L./$(BUILD_LLAMA ) /ggml/src -L./$(BUILD_LLAMA ) /src -lcommon -lllama -lggml -lggml- base -lggml- cpu
54+ LLAMA_LDFLAGS = -L./$(BUILD_LLAMA ) /common -L./$(BUILD_LLAMA ) /ggml/src -L./$(BUILD_LLAMA ) /src -lcommon -lllama $( L ) ggml $( A ) $( L ) ggml- base$( A ) $( L ) ggml- cpu$( A )
4855WHISPER_LDFLAGS = -L./$(BUILD_WHISPER ) /src -lwhisper
4956MINIAUDIO_LDFLAGS = -L./$(BUILD_MINIAUDIO ) -lminiaudio
5057LDFLAGS = $(LLAMA_LDFLAGS ) $(WHISPER_LDFLAGS ) $(MINIAUDIO_LDFLAGS )
@@ -62,6 +69,7 @@ ifeq ($(PLATFORM),windows)
6269 LDFLAGS += -shared
6370 # Create .def file for Windows
6471 DEF_FILE := $(BUILD_DIR)/ai.def
72+ LDFLAGS += -lbcrypt -lgomp -lstdc++
6573 STRIP = strip --strip-unneeded $@
6674else ifeq ($(PLATFORM),macos)
6775 TARGET := $(DIST_DIR)/ai.dylib
@@ -94,9 +102,10 @@ else ifeq ($(PLATFORM),android)
94102 CXX = $(CC)++
95103 TARGET := $(DIST_DIR)/ai.so
96104 LDFLAGS += -static-libstdc++ -shared
97- 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
98- 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
99- 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
105+ ANDROID_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
106+ LLAMA_OPTIONS += $(ANDROID_OPTIONS) -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF
107+ WHISPER_OPTIONS += $(ANDROID_OPTIONS) -DGGML_OPENMP=OFF -DGGML_LLAMAFILE=OFF
108+ MINIAUDIO_OPTIONS += $(ANDROID_OPTIONS)
100109 STRIP = $(BIN)/llvm-strip --strip-unneeded $@
101110else ifeq ($(PLATFORM),ios)
102111 TARGET := $(DIST_DIR)/ai.dylib
@@ -129,21 +138,25 @@ endif
129138# Backend specific settings
130139ifneq (,$(findstring VULKAN,$(LLAMA ) ) )
131140 LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-vulkan/libggml-vulkan.a
132- LLAMA_LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-vulkan -lggml-vulkan
141+ LLAMA_LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-vulkan $(L)ggml-vulkan$(A)
142+ # Vulkan variations
143+ ifeq ($(PLATFORM),windows)
144+ VULKAN_VAR = -1
145+ endif
133146 # Add Vulkan SDK library path if available
134147 ifdef VULKAN_SDK
135- LLAMA_LDFLAGS += -L$(VULKAN_SDK)/lib -lvulkan
148+ LLAMA_LDFLAGS += -L$(VULKAN_SDK)/lib -lvulkan$(VULKAN_VAR)
136149 else # system Vulkan library locations
137- LLAMA_LDFLAGS += -lvulkan -ldl
150+ LLAMA_LDFLAGS += -lvulkan$(VULKAN_VAR) -ldl
138151 endif
139152endif
140153ifneq (,$(findstring OPENCL,$(LLAMA ) ) )
141154 LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-opencl/libggml-opencl.a
142- LLAMA_LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-opencl -lggml- opencl -lOpenCL
155+ LLAMA_LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-opencl $(L)ggml- opencl$(A) -lOpenCL -ldl
143156endif
144157ifneq (,$(findstring BLAS,$(LLAMA ) ) )
145158 LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
146- LLAMA_LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-blas -lggml- blas
159+ LLAMA_LDFLAGS += -L./$(BUILD_LLAMA)/ggml/src/ggml-blas $(L)ggml- blas$(A)
147160 # Link against specific BLAS implementations
148161 ifneq (,$(findstring OpenBLAS,$(LLAMA)))
149162 LLAMA_LDFLAGS += -lopenblas
@@ -193,19 +206,24 @@ test: $(TARGET)
193206 $(SQLITE3 ) " :memory:" -cmd " .bail on" " .load ./dist/ai" " SELECT ai_version();"
194207
195208# Build submodules
209+ ifeq ($(PLATFORM ) ,windows)
210+ ARGS = --parallel $(CPUS )
211+ else
212+ ARGS = -- -j$(CPUS )
213+ endif
196214build/llama.cpp.stamp :
197215 cmake -B $(BUILD_LLAMA ) $(LLAMA_OPTIONS ) $(LLAMA_DIR )
198- cmake --build $(BUILD_LLAMA ) --config Release -- -j $( CPUS )
216+ cmake --build $(BUILD_LLAMA ) --config Release $( ARGS )
199217 touch $@
200218
201219build/whisper.cpp.stamp :
202220 cmake -B $(BUILD_WHISPER ) $(WHISPER_OPTIONS ) $(WHISPER_DIR )
203- cmake --build $(BUILD_WHISPER ) --config Release -- -j $( CPUS )
221+ cmake --build $(BUILD_WHISPER ) --config Release $( ARGS )
204222 touch $@
205223
206224build/miniaudio.stamp :
207225 cmake -B $(BUILD_MINIAUDIO ) $(MINIAUDIO_OPTIONS ) $(MINIAUDIO_DIR )
208- cmake --build $(BUILD_MINIAUDIO ) --config Release -- -j $( CPUS )
226+ cmake --build $(BUILD_MINIAUDIO ) --config Release $( ARGS )
209227 touch $@
210228
211229$(LLAMA_LIBS ) : build/llama.cpp.stamp
0 commit comments