Skip to content

Commit db5d7b7

Browse files
committed
Update build configurations for linux-musl; add missing dependencies and improve platform detection
1 parent b4c8594 commit db5d7b7

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

.github/workflows/main.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,10 @@ jobs:
261261

262262
steps:
263263

264+
- name: linux-musl x86_64 install dependencies
265+
if: matrix.name == 'linux-musl' && matrix.arch == 'x86_64' && matrix.container
266+
run: apk update && apk add --no-cache gcc g++ make cmake sqlite sqlite-dev musl-dev linux-headers git
267+
264268
- uses: actions/checkout@v4.2.2
265269
with:
266270
submodules: ${{ !contains(matrix.make, 'OMIT_LOCAL_ENGINE=1') && 'true' || 'false' }}
@@ -284,10 +288,6 @@ jobs:
284288
if: matrix.name == 'macos'
285289
run: brew link sqlite --force
286290

287-
- name: linux-musl x86_64 install dependencies
288-
if: matrix.name == 'linux-musl' && matrix.arch == 'x86_64'
289-
run: apk update && apk add --no-cache gcc g++ make cmake sqlite musl-dev linux-headers
290-
291291
- name: linux-musl arm64 setup container
292292
if: matrix.name == 'linux-musl' && matrix.arch == 'arm64'
293293
run: |
@@ -297,7 +297,7 @@ jobs:
297297
-w /workspace \
298298
alpine:latest \
299299
tail -f /dev/null
300-
docker exec alpine sh -c "apk update && apk add --no-cache gcc g++ make cmake sqlite musl-dev linux-headers"
300+
docker exec alpine sh -c "apk update && apk add --no-cache gcc g++ make cmake sqlite sqlite-dev musl-dev linux-headers git"
301301
302302
- name: android-aar setup java
303303
if: matrix.name == 'android-aar'

Makefile

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ ARCH ?= $(shell uname -m)
2424
ifeq ($(PLATFORM),darwin)
2525
PLATFORM := macos
2626
endif
27+
# Handle MINGW/MSYS detection (Git Bash, MSYS2, etc.)
28+
ifneq (,$(findstring mingw,$(PLATFORM)))
29+
PLATFORM := windows
30+
endif
31+
ifneq (,$(findstring msys,$(PLATFORM)))
32+
PLATFORM := windows
33+
endif
2734

2835
# Directories
2936
SRC_DIR := src
@@ -93,9 +100,9 @@ else ifeq ($(PLATFORM),windows)
93100
EXT := dll
94101
CC := gcc
95102
CXX := g++
96-
LDFLAGS := -shared -static-libgcc
103+
LDFLAGS := -shared -static-libgcc -lbcrypt
97104
OUTPUT_NAME := memory
98-
TEST_LDFLAGS := -lsqlite3
105+
TEST_LDFLAGS := -lsqlite3 -lbcrypt
99106

100107
else ifeq ($(PLATFORM),android)
101108
EXT := so
@@ -169,7 +176,7 @@ ifeq ($(OMIT_LOCAL_ENGINE),0)
169176

170177
# Platform-specific llama.cpp settings
171178
ifeq ($(PLATFORM),macos)
172-
LLAMA_OPTIONS += -DGGML_OPENMP=OFF -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
179+
LLAMA_OPTIONS += -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0
173180
# Add Metal and BLAS libraries for macOS (cmake auto-detects and builds these)
174181
LLAMA_LIBS += $(LLAMA_BUILD)/ggml/src/ggml-metal/libggml-metal.a
175182
LLAMA_LIBS += $(LLAMA_BUILD)/ggml/src/ggml-blas/libggml-blas.a
@@ -189,32 +196,34 @@ ifeq ($(OMIT_LOCAL_ENGINE),0)
189196
LDFLAGS += -arch arm64 -arch x86_64
190197
endif
191198
else ifeq ($(PLATFORM),linux)
192-
LLAMA_OPTIONS += -DGGML_OPENMP=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
199+
LLAMA_OPTIONS += -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON
193200
else ifeq ($(PLATFORM),windows)
194-
LLAMA_OPTIONS += -DGGML_OPENMP=OFF
201+
# Target Windows 8+ for CreateFile2 support in cpp-httplib
202+
LLAMA_OPTIONS += -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DCMAKE_CXX_FLAGS="-D_WIN32_WINNT=0x0602"
195203
LDFLAGS := -shared -lbcrypt -static-libgcc -Wl,--push-state,-Bstatic,-lstdc++,-lwinpthread,--pop-state
196204
else ifeq ($(PLATFORM),android)
197205
# Android NDK cmake toolchain
198206
ANDROID_OPTIONS := -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolchain.cmake \
199207
-DANDROID_ABI=$(ARCH) \
200208
-DANDROID_PLATFORM=android-26 \
201209
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
210+
-DGGML_NATIVE=OFF \
202211
-DGGML_OPENMP=OFF \
203212
-DGGML_LLAMAFILE=OFF
204213
ifeq ($(ARCH),arm64-v8a)
205214
ANDROID_OPTIONS += -DGGML_CPU_ARM_ARCH=armv8.2-a+dotprod
206215
endif
207216
LLAMA_OPTIONS += $(ANDROID_OPTIONS)
208217
else ifeq ($(PLATFORM),ios)
209-
LLAMA_OPTIONS += -DGGML_OPENMP=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0
218+
LLAMA_OPTIONS += -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0
210219
# Add Metal and BLAS libraries for iOS
211220
LLAMA_LIBS += $(LLAMA_BUILD)/ggml/src/ggml-metal/libggml-metal.a
212221
LLAMA_LIBS += $(LLAMA_BUILD)/ggml/src/ggml-blas/libggml-blas.a
213222
LDFLAGS := -dynamiclib -isysroot $(SDK) -arch arm64 -miphoneos-version-min=14.0 \
214223
-framework Metal -framework Foundation -framework Accelerate -framework CoreFoundation -framework Security \
215224
-ldl -lpthread -lm -headerpad_max_install_names
216225
else ifeq ($(PLATFORM),ios-sim)
217-
LLAMA_OPTIONS += -DGGML_OPENMP=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 '-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'
226+
LLAMA_OPTIONS += -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_DEPLOYMENT_TARGET=14.0 '-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'
218227
# Add Metal and BLAS libraries for iOS simulator
219228
LLAMA_LIBS += $(LLAMA_BUILD)/ggml/src/ggml-metal/libggml-metal.a
220229
LLAMA_LIBS += $(LLAMA_BUILD)/ggml/src/ggml-blas/libggml-blas.a
@@ -328,12 +337,11 @@ test: $(BUILD_DEPS) $(TARGET) $(BUILD_DIR)/unittest
328337
TEST_DEFINES := -DSQLITE_CORE
329338

330339
# Test-specific link flags (includes all frameworks/libs needed for llama.cpp)
340+
TEST_LINK_EXTRAS :=
331341
ifeq ($(OMIT_LOCAL_ENGINE),0)
332342
ifeq ($(PLATFORM),macos)
333343
TEST_LINK_EXTRAS := -framework Metal -framework Foundation -framework Accelerate -lobjc
334344
endif
335-
else
336-
TEST_LINK_EXTRAS :=
337345
endif
338346

339347
# Compile test sources with SQLITE_CORE
@@ -431,17 +439,17 @@ XCFRAMEWORK_LLAMA = LLAMA="-DGGML_NATIVE=OFF -DGGML_METAL=ON -DGGML_ACCELERATE=O
431439
# Helper function to create xcframework from 3 dylibs
432440
# Usage: $(call create_xcframework,variant_suffix,output_name)
433441
define create_xcframework
434-
@$(foreach pair,ios:ios-arm64 ios-sim:ios-arm64_x86_64-simulator macos:macos-arm64_x86_64,\
435-
platform=$(word 1,$(subst :, ,$(pair))); \
436-
fmwk=$(word 2,$(subst :, ,$(pair))); \
442+
@for pair in "ios:ios-arm64" "ios-sim:ios-arm64_x86_64-simulator" "macos:macos-arm64_x86_64"; do \
443+
platform=$${pair%%:*}; \
444+
fmwk=$${pair##*:}; \
437445
mkdir -p $(DIST_DIR)/$$fmwk/memory.framework/Headers; \
438446
mkdir -p $(DIST_DIR)/$$fmwk/memory.framework/Modules; \
439447
cp src/sqlite-memory.h $(DIST_DIR)/$$fmwk/memory.framework/Headers; \
440448
printf "$(PLIST)" > $(DIST_DIR)/$$fmwk/memory.framework/Info.plist; \
441449
printf "$(MODULEMAP)" > $(DIST_DIR)/$$fmwk/memory.framework/Modules/module.modulemap; \
442-
mv $(DIST_DIR)/$$platform$(1).dylib $(DIST_DIR)/$$fmwk/memory.framework/memory; \
450+
mv $(DIST_DIR)/$${platform}$(1).dylib $(DIST_DIR)/$$fmwk/memory.framework/memory; \
443451
install_name_tool -id "@rpath/memory.framework/memory" $(DIST_DIR)/$$fmwk/memory.framework/memory; \
444-
)
452+
done
445453
xcodebuild -create-xcframework $(foreach fmwk,$(FMWK_NAMES),-framework $(DIST_DIR)/$(fmwk)/memory.framework) -output $(DIST_DIR)/$(2).xcframework
446454
rm -rf $(foreach fmwk,$(FMWK_NAMES),$(DIST_DIR)/$(fmwk))
447455
endef

0 commit comments

Comments
 (0)