Skip to content

Commit 20ced6c

Browse files
committed
Update Makefile to improve library linking for LLAMA and WHISPER, and enhance platform-specific options for macOS, iOS, Android, Linux and iSIM
1 parent b6a19a0 commit 20ced6c

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed

Makefile

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,25 @@ MAKEFLAGS += -j$(CPUS)
2828
CC = gcc
2929
CXX = g++
3030
CFLAGS = -Wall -Wextra -Wno-unused-parameter -I$(SRC_DIR) -I$(LLAMA_DIR)/ggml/include -I$(LLAMA_DIR)/include
31-
LDFLAGS = -L./$(BUILD_DIR)/lib/common -L./$(BUILD_DIR)/lib/ggml/src -L./$(BUILD_DIR)/lib/ggml/src/ggml-blas -L./$(BUILD_DIR)/lib/src -lcommon -lggml -lggml-blas -lggml-base -lggml-cpu -lllama
31+
LDFLAGS = -L./$(BUILD_LLAMA)/common -L./$(BUILD_LLAMA)/ggml/src -L./$(BUILD_LLAMA)/src -L./$(BUILD_WHISPER)/src -lcommon -lggml -lggml-base -lggml-cpu -lllama -lwhisper
3232
LLAMA_OPTIONS = -DLLAMA_CURL=OFF -DLLAMA_BUILD_EXAMPLES=OFF -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=OFF -DLLAMA_BUILD_SERVER=OFF
33+
WHISPER_OPTIONS = -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_SERVER=OFF
3334

3435
# Directories
3536
SRC_DIR = src
3637
DIST_DIR = dist
3738
VPATH = $(SRC_DIR)
3839
BUILD_DIR = build
3940
LLAMA_DIR = modules/llama.cpp
41+
WHISPER_DIR = modules/whisper.cpp
42+
BUILD_LLAMA = $(BUILD_DIR)/llama.cpp
43+
BUILD_WHISPER = $(BUILD_DIR)/whisper.cpp
4044

4145
# Files
4246
SRC_FILES = $(wildcard $(SRC_DIR)/*.c)
4347
OBJ_FILES = $(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SRC_FILES)))
44-
LIBS = $(BUILD_DIR)/lib/common/libcommon.a \
45-
$(BUILD_DIR)/lib/ggml/src/libggml.a \
46-
$(BUILD_DIR)/lib/ggml/src/ggml-blas/libggml-blas.a \
47-
$(BUILD_DIR)/lib/ggml/src/libggml-base.a \
48-
$(BUILD_DIR)/lib/ggml/src/libggml-cpu.a \
49-
$(BUILD_DIR)/lib/src/libllama.a
48+
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
49+
WHISPER_LIBS = $(BUILD_WHISPER)/src/libwhisper.a
5050

5151
# Platform-specific settings
5252
ifeq ($(PLATFORM),windows)
@@ -56,10 +56,11 @@ ifeq ($(PLATFORM),windows)
5656
DEF_FILE := $(BUILD_DIR)/ai.def
5757
else ifeq ($(PLATFORM),macos)
5858
TARGET := $(DIST_DIR)/ai.dylib
59-
LIBS += $(BUILD_DIR)/lib/ggml/src/ggml-metal/libggml-metal.a
60-
LDFLAGS += -arch x86_64 -arch arm64 -L./$(BUILD_DIR)/lib/ggml/src/ggml-metal -lggml-metal -framework Metal -framework Foundation -framework CoreFoundation -framework QuartzCore -framework Accelerate -dynamiclib -undefined dynamic_lookup
59+
LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
60+
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 -dynamiclib -undefined dynamic_lookup
6161
CFLAGS += -arch x86_64 -arch arm64
6262
LLAMA_OPTIONS += -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
63+
WHISPER_OPTIONS += -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
6364
else ifeq ($(PLATFORM),android)
6465
# Set ARCH to find Android NDK's Clang compiler, the user should set the ARCH
6566
ifeq ($(filter %,$(ARCH)),)
@@ -84,19 +85,24 @@ else ifeq ($(PLATFORM),android)
8485
else ifeq ($(PLATFORM),ios)
8586
TARGET := $(DIST_DIR)/ai.dylib
8687
SDK := -isysroot $(shell xcrun --sdk iphoneos --show-sdk-path) -miphoneos-version-min=14.0
87-
LDFLAGS += -framework Accelerate -framework Metal -dynamiclib $(SDK)
88+
LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
89+
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 -dynamiclib $(SDK)
8890
CFLAGS += -arch arm64 $(SDK)
8991
LLAMA_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0
92+
WHISPER_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0
9093
else ifeq ($(PLATFORM),isim)
9194
TARGET := $(DIST_DIR)/ai.dylib
9295
SDK := -isysroot $(shell xcrun --sdk iphonesimulator --show-sdk-path) -miphonesimulator-version-min=14.0
93-
LDFLAGS += -arch x86_64 -arch arm64 -framework Accelerate -framework Metal -dynamiclib $(SDK)
96+
LLAMA_LIBS += $(BUILD_LLAMA)/ggml/src/ggml-metal/libggml-metal.a $(BUILD_LLAMA)/ggml/src/ggml-blas/libggml-blas.a
97+
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 -dynamiclib $(SDK)
9498
CFLAGS += -arch x86_64 -arch arm64 $(SDK)
95-
LLAMA_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
99+
LLAMA_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
100+
WHISPER_OPTIONS += -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
96101
else # linux
97102
TARGET := $(DIST_DIR)/ai.so
98103
LDFLAGS += -shared
99104
LLAMA_OPTIONS += -DCMAKE_POSITION_INDEPENDENT_CODE=ON
105+
WHISPER_OPTIONS += -DCMAKE_POSITION_INDEPENDENT_CODE=ON
100106
endif
101107

102108
# Windows .def file generation
@@ -115,7 +121,7 @@ extension: $(TARGET)
115121
all: $(TARGET)
116122

117123
# Loadable library
118-
$(TARGET): $(OBJ_FILES) $(DEF_FILE) $(LIBS)
124+
$(TARGET): $(OBJ_FILES) $(DEF_FILE) $(LLAMA_LIBS) $(WHISPER_LIBS)
119125
$(CXX) $(OBJ_FILES) $(DEF_FILE) -o $@ $(LDFLAGS)
120126
ifeq ($(PLATFORM),windows)
121127
# Generate import library for Windows
@@ -130,12 +136,18 @@ test: $(TARGET)
130136
$(SQLITE3) ":memory:" -cmd ".bail on" ".load ./$<" "SELECT ai_version();"
131137

132138
# Build all libraries at once using one CMake call
133-
build/libs.stamp:
134-
cmake -B $(BUILD_DIR)/lib -DBUILD_SHARED_LIBS=OFF $(LLAMA_OPTIONS) $(LLAMA_DIR)
135-
cmake --build $(BUILD_DIR)/lib --config Release -- -j$(CPUS)
139+
build/llama.cpp.stamp:
140+
cmake -B $(BUILD_LLAMA) -DBUILD_SHARED_LIBS=OFF $(LLAMA_OPTIONS) $(LLAMA_DIR)
141+
cmake --build $(BUILD_LLAMA) --config Release -- -j$(CPUS)
136142
touch $@
137143

138-
$(LIBS): build/libs.stamp
144+
build/whisper.cpp.stamp:
145+
cmake -B $(BUILD_WHISPER) -DBUILD_SHARED_LIBS=OFF $(WHISPER_OPTIONS) $(WHISPER_DIR)
146+
cmake --build $(BUILD_WHISPER) --config Release -- -j$(CPUS)
147+
touch $@
148+
149+
$(LLAMA_LIBS): build/llama.cpp.stamp
150+
$(WHISPER_LIBS): build/whisper.cpp.stamp
139151

140152
# Tools
141153
version:

0 commit comments

Comments
 (0)