llama-cpp-capacitor 0.1.0 β 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/android/src/main/jniLibs/arm64-v8a/libllama-cpp-arm64.so +0 -0
- package/build-native.sh +229 -0
- package/cpp/README.md +13 -2
- package/ios/CMakeLists-arm64.txt +149 -0
- package/ios/CMakeLists-x86_64.txt +176 -0
- package/ios/CMakeLists.txt +149 -0
- package/ios/Frameworks/llama-cpp.framework/Versions/A/llama-cpp +0 -0
- package/package.json +8 -2
- package/ios/Tests/LlamaCppPluginTests/LlamaCppPluginTests.swift +0 -15
package/README.md
CHANGED
|
@@ -121,6 +121,21 @@ cd android
|
|
|
121
121
|
- **iOS**: `ios/build/LlamaCpp.framework/`
|
|
122
122
|
- **Android**: `android/src/main/jniLibs/{arch}/libllama-cpp-{arch}.so`
|
|
123
123
|
|
|
124
|
+
### **Updating the native source (e.g. for vision model support)**
|
|
125
|
+
|
|
126
|
+
The native `cpp/` layer is based on [llama.cpp](https://github.com/ggerganov/llama.cpp). To pull in a newer upstream version (e.g. for vision model support) **without overwriting** the Capacitor adapter code, use the **bootstrap script** (included in this repo):
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
./scripts/bootstrap.sh [branch-or-tag-or-commit]
|
|
130
|
+
# Example: ./scripts/bootstrap.sh master
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
This syncs upstream into `cpp/` and keeps project-specific files (`cap-*.cpp/h`, `tools/mtmd/`, etc.) intact. After running it, reconcile any API changes in the adapter code, then rebuild with `npm run build:native` or `./build-native.sh`. See [cpp/README.md](cpp/README.md) and [docs/IOS_IMPLEMENTATION_GUIDE.md](docs/IOS_IMPLEMENTATION_GUIDE.md).
|
|
134
|
+
|
|
135
|
+
### **iOS implementation (step-by-step)**
|
|
136
|
+
|
|
137
|
+
For a **step-by-step guide** on how methods are implemented on the iOS side (Swift bridge β native framework, adding/updating C symbols, and updating the native layer for vision), see **[docs/IOS_IMPLEMENTATION_GUIDE.md](docs/IOS_IMPLEMENTATION_GUIDE.md)**.
|
|
138
|
+
|
|
124
139
|
### iOS Setup
|
|
125
140
|
|
|
126
141
|
1. Install the plugin:
|
|
@@ -696,6 +711,17 @@ const logListener = addNativeLogListener((level, text) => {
|
|
|
696
711
|
});
|
|
697
712
|
```
|
|
698
713
|
|
|
714
|
+
## π¦ Publishing
|
|
715
|
+
|
|
716
|
+
To publish the package to npm:
|
|
717
|
+
|
|
718
|
+
1. **Build** (runs automatically on `npm publish` via `prepublishOnly`): `npm run build` β produces `dist/` (plugin bundles, ESM, docs).
|
|
719
|
+
2. **Optional β include native libs in the tarball**: `npm run build:all` (requires macOS/NDK) β builds iOS framework and Android `.so` into `ios/Frameworks` and `android/src/main/jniLibs`.
|
|
720
|
+
3. **Verify pack**: `npm run pack` (JS only) or `npm run pack:full` (JS + native) β lists files that would be published.
|
|
721
|
+
4. **Publish**: `npm publish`.
|
|
722
|
+
|
|
723
|
+
See [NPM_PUBLISH_GUIDE.md](NPM_PUBLISH_GUIDE.md) for 2FA/token setup and troubleshooting.
|
|
724
|
+
|
|
699
725
|
## π€ Contributing
|
|
700
726
|
|
|
701
727
|
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
Binary file
|
package/build-native.sh
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Build script for llama-cpp Capacitor plugin
|
|
4
|
+
# This script compiles the native llama.cpp library for iOS and Android
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Colors for output
|
|
9
|
+
RED='\033[0;31m'
|
|
10
|
+
GREEN='\033[0;32m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
NC='\033[0m' # No Color
|
|
14
|
+
|
|
15
|
+
# Function to print colored output
|
|
16
|
+
print_status() {
|
|
17
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
print_success() {
|
|
21
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
print_warning() {
|
|
25
|
+
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
print_error() {
|
|
29
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# Check if we're on macOS for iOS builds
|
|
33
|
+
check_macos() {
|
|
34
|
+
if [[ "$OSTYPE" != "darwin"* ]]; then
|
|
35
|
+
print_warning "iOS builds require macOS. Skipping iOS build."
|
|
36
|
+
return 1
|
|
37
|
+
fi
|
|
38
|
+
return 0
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Check if Android SDK is available
|
|
42
|
+
check_android_sdk() {
|
|
43
|
+
if [ -z "$ANDROID_HOME" ] && [ -z "$ANDROID_SDK_ROOT" ]; then
|
|
44
|
+
print_warning "Android SDK not found. Please set ANDROID_HOME or ANDROID_SDK_ROOT."
|
|
45
|
+
print_warning "Skipping Android build."
|
|
46
|
+
return 1
|
|
47
|
+
fi
|
|
48
|
+
return 0
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# Detect NDK path: ndk/<version>/build/cmake/android.toolchain.cmake
|
|
52
|
+
# Uses latest versioned NDK under $ANDROID_SDK/ndk/ (e.g. ndk/29.0.13113456).
|
|
53
|
+
detect_ndk() {
|
|
54
|
+
local sdk="${ANDROID_HOME:-$ANDROID_SDK_ROOT}"
|
|
55
|
+
local ndk_root="$sdk/ndk"
|
|
56
|
+
if [ ! -d "$ndk_root" ]; then
|
|
57
|
+
echo ""
|
|
58
|
+
return 1
|
|
59
|
+
fi
|
|
60
|
+
local latest=""
|
|
61
|
+
local latest_ver=0
|
|
62
|
+
for v in "$ndk_root"/*; do
|
|
63
|
+
[ -d "$v" ] || continue
|
|
64
|
+
local base=$(basename "$v")
|
|
65
|
+
if [[ "$base" =~ ^[0-9] ]]; then
|
|
66
|
+
local ver=$(echo "$base" | sed 's/[^0-9]//g' | head -c 10)
|
|
67
|
+
ver=${ver:-0}
|
|
68
|
+
if [ "$ver" -gt "$latest_ver" ] 2>/dev/null; then
|
|
69
|
+
latest_ver=$ver
|
|
70
|
+
latest=$v
|
|
71
|
+
fi
|
|
72
|
+
fi
|
|
73
|
+
done
|
|
74
|
+
if [ -n "$latest" ] && [ -f "$latest/build/cmake/android.toolchain.cmake" ]; then
|
|
75
|
+
echo "$latest"
|
|
76
|
+
return 0
|
|
77
|
+
fi
|
|
78
|
+
echo ""
|
|
79
|
+
return 1
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# Build iOS library
|
|
83
|
+
build_ios() {
|
|
84
|
+
print_status "Building iOS library..."
|
|
85
|
+
|
|
86
|
+
if ! check_macos; then
|
|
87
|
+
return 1
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
# Always start from a clean iOS build directory to avoid stale Xcode settings
|
|
91
|
+
rm -rf ios/build
|
|
92
|
+
mkdir -p ios/build
|
|
93
|
+
cd ios/build
|
|
94
|
+
|
|
95
|
+
# Configure with CMake
|
|
96
|
+
# IMPORTANT: build iOS framework as **ARM64-only**.
|
|
97
|
+
# Including x86_64 here makes CMake/Xcode try to link an x86_64 slice,
|
|
98
|
+
# but we only compile ARM-specific kernels (arch/arm), which leads to
|
|
99
|
+
# undefined symbols like lm_ggml_gemm_* for x86_64.
|
|
100
|
+
cmake .. \
|
|
101
|
+
-DCMAKE_BUILD_TYPE=Release \
|
|
102
|
+
-DCMAKE_OSX_ARCHITECTURES="arm64" \
|
|
103
|
+
-DCMAKE_OSX_DEPLOYMENT_TARGET=13.0 \
|
|
104
|
+
-DCMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE=NO
|
|
105
|
+
|
|
106
|
+
# Build
|
|
107
|
+
cmake --build . --config Release
|
|
108
|
+
|
|
109
|
+
# CMake builds the framework directly (FRAMEWORK TRUE in CMakeLists.txt)
|
|
110
|
+
# Verify the framework was created
|
|
111
|
+
if [ -d "llama-cpp.framework" ]; then
|
|
112
|
+
print_success "iOS framework built successfully at: $(pwd)/llama-cpp.framework"
|
|
113
|
+
|
|
114
|
+
# Strip debug symbols to reduce app store size (~0.5β1 MB)
|
|
115
|
+
BINARY="llama-cpp.framework/Versions/A/llama-cpp"
|
|
116
|
+
if [ -f "$BINARY" ]; then
|
|
117
|
+
if xcrun strip -x -S "$BINARY" 2>/dev/null; then
|
|
118
|
+
print_status "Stripped debug symbols from iOS framework"
|
|
119
|
+
fi
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
# Copy framework to package location for npm publishing
|
|
123
|
+
mkdir -p ../Frameworks
|
|
124
|
+
cp -R llama-cpp.framework ../Frameworks/
|
|
125
|
+
print_success "iOS framework copied to ios/Frameworks/ for npm package"
|
|
126
|
+
else
|
|
127
|
+
print_error "iOS framework not found after build"
|
|
128
|
+
cd ../..
|
|
129
|
+
return 1
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
cd ../..
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Build Android library
|
|
136
|
+
build_android() {
|
|
137
|
+
print_status "Building Android library..."
|
|
138
|
+
|
|
139
|
+
if ! check_android_sdk; then
|
|
140
|
+
return 1
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
ANDROID_NDK=$(detect_ndk)
|
|
144
|
+
if [ -z "$ANDROID_NDK" ]; then
|
|
145
|
+
print_error "Android NDK not found. Install NDK via Android Studio (SDK Manager β NDK)."
|
|
146
|
+
print_error "Expected: \$ANDROID_HOME/ndk/<version>/build/cmake/android.toolchain.cmake"
|
|
147
|
+
return 1
|
|
148
|
+
fi
|
|
149
|
+
print_status "Using NDK: $ANDROID_NDK"
|
|
150
|
+
|
|
151
|
+
TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake"
|
|
152
|
+
if [ ! -f "$TOOLCHAIN_FILE" ]; then
|
|
153
|
+
print_error "Toolchain file not found: $TOOLCHAIN_FILE"
|
|
154
|
+
return 1
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
rm -rf android/build
|
|
158
|
+
mkdir -p android/build
|
|
159
|
+
cd android/build
|
|
160
|
+
|
|
161
|
+
# Build only arm64-v8a to minimize app store size.
|
|
162
|
+
# build.gradle uses abiFilters 'arm64-v8a'; armeabi-v7a is not included in the app.
|
|
163
|
+
# Skipping armeabi-v7a saves ~25β48 MB in package and keeps app size minimal.
|
|
164
|
+
arch="arm64-v8a"
|
|
165
|
+
print_status "Building for $arch (only ABI shipped in app)..."
|
|
166
|
+
rm -rf CMakeCache.txt CMakeFiles Makefile cmake_install.cmake 2>/dev/null || true
|
|
167
|
+
find . -maxdepth 1 -name '*.so' -delete 2>/dev/null || true
|
|
168
|
+
|
|
169
|
+
cmake ../src/main \
|
|
170
|
+
-DCMAKE_BUILD_TYPE=Release \
|
|
171
|
+
-DANDROID_ABI=$arch \
|
|
172
|
+
-DANDROID_PLATFORM=android-21 \
|
|
173
|
+
-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \
|
|
174
|
+
-DANDROID_STL=c++_shared
|
|
175
|
+
|
|
176
|
+
cmake --build . --config Release
|
|
177
|
+
|
|
178
|
+
mkdir -p ../src/main/jniLibs/$arch
|
|
179
|
+
if [ -f "libllama-cpp-arm64.so" ]; then
|
|
180
|
+
PREBUILT="$ANDROID_NDK/toolchains/llvm/prebuilt"
|
|
181
|
+
if [ -d "$PREBUILT/darwin-x86_64" ]; then
|
|
182
|
+
STRIP_TOOL="$PREBUILT/darwin-x86_64/bin/llvm-strip"
|
|
183
|
+
elif [ -d "$PREBUILT/darwin-aarch64" ]; then
|
|
184
|
+
STRIP_TOOL="$PREBUILT/darwin-aarch64/bin/llvm-strip"
|
|
185
|
+
else
|
|
186
|
+
STRIP_TOOL=$(find "$ANDROID_NDK/toolchains" -name "llvm-strip" -type f 2>/dev/null | head -1)
|
|
187
|
+
fi
|
|
188
|
+
if [ -f "$STRIP_TOOL" ]; then
|
|
189
|
+
"$STRIP_TOOL" --strip-debug libllama-cpp-arm64.so
|
|
190
|
+
print_status "Stripped debug symbols from library"
|
|
191
|
+
fi
|
|
192
|
+
cp "libllama-cpp-arm64.so" "../src/main/jniLibs/$arch/"
|
|
193
|
+
fi
|
|
194
|
+
print_success "Built for $arch"
|
|
195
|
+
|
|
196
|
+
print_success "Android library built successfully"
|
|
197
|
+
cd ../..
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
# Main build function
|
|
201
|
+
main() {
|
|
202
|
+
print_status "Starting llama-cpp Capacitor plugin build..."
|
|
203
|
+
|
|
204
|
+
# Check dependencies
|
|
205
|
+
if ! command -v cmake &> /dev/null; then
|
|
206
|
+
print_error "CMake is required but not installed"
|
|
207
|
+
exit 1
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
if ! command -v make &> /dev/null; then
|
|
211
|
+
print_error "Make is required but not installed"
|
|
212
|
+
exit 1
|
|
213
|
+
fi
|
|
214
|
+
|
|
215
|
+
# Build iOS
|
|
216
|
+
if check_macos; then
|
|
217
|
+
build_ios
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
# Build Android
|
|
221
|
+
if check_android_sdk; then
|
|
222
|
+
build_android
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
print_success "Build completed successfully!"
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
# Run main function
|
|
229
|
+
main "$@"
|
package/cpp/README.md
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
# Note
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
-
|
|
3
|
+
- The **project-specific** files in this folder (never overwritten by bootstrap) are:
|
|
4
|
+
- `cap-llama.cpp` / `cap-llama.h` β Capacitor bridge (context, model load)
|
|
5
|
+
- `cap-completion.cpp` / `cap-completion.h` β completion
|
|
6
|
+
- `cap-tts.cpp` / `cap-tts.h` β TTS
|
|
7
|
+
- `cap-embedding.cpp` / `cap-embedding.h` β embeddings
|
|
8
|
+
- `cap-mtmd.hpp` β multimodal/vision
|
|
9
|
+
- `tools/mtmd/` β multimodal/vision tooling
|
|
10
|
+
- All other sources are synced from [llama.cpp](https://github.com/ggerganov/llama.cpp).
|
|
11
|
+
- **Update native source** (e.g. for a newer llama.cpp or vision support): run from repo root:
|
|
12
|
+
```bash
|
|
13
|
+
./scripts/bootstrap.sh [branch-or-tag-or-commit]
|
|
14
|
+
```
|
|
15
|
+
See [scripts/bootstrap.sh](../scripts/bootstrap.sh) and [docs/IOS_IMPLEMENTATION_GUIDE.md](../docs/IOS_IMPLEMENTATION_GUIDE.md).
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.16)
|
|
2
|
+
project(llama-cpp VERSION 1.0.0 LANGUAGES CXX C)
|
|
3
|
+
|
|
4
|
+
set(CMAKE_CXX_STANDARD 17)
|
|
5
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
6
|
+
|
|
7
|
+
# iOS specific settings for ARM64 devices
|
|
8
|
+
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.0)
|
|
9
|
+
set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE NO)
|
|
10
|
+
|
|
11
|
+
# Common llama.cpp definitions
|
|
12
|
+
add_definitions(
|
|
13
|
+
-DNDEBUG
|
|
14
|
+
-DO3
|
|
15
|
+
-DLM_GGML_USE_CPU
|
|
16
|
+
-DLM_GGML_USE_ACCELERATE
|
|
17
|
+
-DLM_GGML_USE_METAL
|
|
18
|
+
-DLM_GGML_METAL_USE_BF16
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cpp)
|
|
22
|
+
|
|
23
|
+
# ARM64βtuned ggml sources
|
|
24
|
+
set(SOURCE_FILES_ARCH
|
|
25
|
+
${SOURCE_DIR}/ggml-cpu/arch/arm/quants.c
|
|
26
|
+
${SOURCE_DIR}/ggml-cpu/arch/arm/repack.cpp
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Define public headers
|
|
30
|
+
set(PUBLIC_HEADERS
|
|
31
|
+
${SOURCE_DIR}/cap-llama.h
|
|
32
|
+
${SOURCE_DIR}/cap-completion.h
|
|
33
|
+
${SOURCE_DIR}/cap-tts.h
|
|
34
|
+
${SOURCE_DIR}/llama.h
|
|
35
|
+
${SOURCE_DIR}/ggml.h
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Create library target
|
|
39
|
+
add_library(llama-cpp SHARED
|
|
40
|
+
${SOURCE_DIR}/ggml.c
|
|
41
|
+
${SOURCE_DIR}/ggml-alloc.c
|
|
42
|
+
${SOURCE_DIR}/ggml-backend.cpp
|
|
43
|
+
${SOURCE_DIR}/ggml-backend-reg.cpp
|
|
44
|
+
${SOURCE_DIR}/ggml-cpu/amx/amx.cpp
|
|
45
|
+
${SOURCE_DIR}/ggml-cpu/amx/mmq.cpp
|
|
46
|
+
${SOURCE_DIR}/ggml-cpu/ggml-cpu.c
|
|
47
|
+
${SOURCE_DIR}/ggml-cpu/ggml-cpu.cpp
|
|
48
|
+
${SOURCE_DIR}/ggml-cpu/quants.c
|
|
49
|
+
${SOURCE_DIR}/ggml-cpu/traits.cpp
|
|
50
|
+
${SOURCE_DIR}/ggml-cpu/repack.cpp
|
|
51
|
+
${SOURCE_DIR}/ggml-cpu/unary-ops.cpp
|
|
52
|
+
${SOURCE_DIR}/ggml-cpu/binary-ops.cpp
|
|
53
|
+
${SOURCE_DIR}/ggml-cpu/vec.cpp
|
|
54
|
+
${SOURCE_DIR}/ggml-cpu/ops.cpp
|
|
55
|
+
${SOURCE_DIR}/ggml-metal.m
|
|
56
|
+
${SOURCE_DIR}/ggml-opt.cpp
|
|
57
|
+
${SOURCE_DIR}/ggml-threading.cpp
|
|
58
|
+
${SOURCE_DIR}/ggml-quants.c
|
|
59
|
+
${SOURCE_DIR}/gguf.cpp
|
|
60
|
+
${SOURCE_DIR}/log.cpp
|
|
61
|
+
${SOURCE_DIR}/llama-impl.cpp
|
|
62
|
+
${SOURCE_DIR}/llama-grammar.cpp
|
|
63
|
+
${SOURCE_DIR}/llama-sampling.cpp
|
|
64
|
+
${SOURCE_DIR}/llama-vocab.cpp
|
|
65
|
+
${SOURCE_DIR}/llama-adapter.cpp
|
|
66
|
+
${SOURCE_DIR}/llama-chat.cpp
|
|
67
|
+
${SOURCE_DIR}/llama-context.cpp
|
|
68
|
+
${SOURCE_DIR}/llama-arch.cpp
|
|
69
|
+
${SOURCE_DIR}/llama-batch.cpp
|
|
70
|
+
${SOURCE_DIR}/llama-cparams.cpp
|
|
71
|
+
${SOURCE_DIR}/llama-hparams.cpp
|
|
72
|
+
${SOURCE_DIR}/llama.cpp
|
|
73
|
+
${SOURCE_DIR}/llama-model.cpp
|
|
74
|
+
${SOURCE_DIR}/llama-model-loader.cpp
|
|
75
|
+
${SOURCE_DIR}/llama-model-saver.cpp
|
|
76
|
+
${SOURCE_DIR}/llama-mmap.cpp
|
|
77
|
+
${SOURCE_DIR}/llama-kv-cache.cpp
|
|
78
|
+
${SOURCE_DIR}/llama-kv-cache-iswa.cpp
|
|
79
|
+
${SOURCE_DIR}/llama-memory-hybrid.cpp
|
|
80
|
+
${SOURCE_DIR}/llama-memory-recurrent.cpp
|
|
81
|
+
${SOURCE_DIR}/llama-memory.cpp
|
|
82
|
+
${SOURCE_DIR}/llama-io.cpp
|
|
83
|
+
${SOURCE_DIR}/llama-graph.cpp
|
|
84
|
+
${SOURCE_DIR}/sampling.cpp
|
|
85
|
+
${SOURCE_DIR}/unicode-data.cpp
|
|
86
|
+
${SOURCE_DIR}/unicode.cpp
|
|
87
|
+
${SOURCE_DIR}/common.cpp
|
|
88
|
+
${SOURCE_DIR}/chat.cpp
|
|
89
|
+
# Additional sources required for JSON parsing, chat parser, and mtmd tools
|
|
90
|
+
${SOURCE_DIR}/chat-parser.cpp
|
|
91
|
+
${SOURCE_DIR}/regex-partial.cpp
|
|
92
|
+
${SOURCE_DIR}/json-partial.cpp
|
|
93
|
+
${SOURCE_DIR}/json-schema-to-grammar.cpp
|
|
94
|
+
${SOURCE_DIR}/anyascii.c
|
|
95
|
+
${SOURCE_DIR}/tools/mtmd/mtmd.cpp
|
|
96
|
+
${SOURCE_DIR}/tools/mtmd/mtmd-helper.cpp
|
|
97
|
+
${SOURCE_DIR}/tools/mtmd/mtmd-audio.cpp
|
|
98
|
+
${SOURCE_DIR}/tools/mtmd/clip.cpp
|
|
99
|
+
${SOURCE_DIR}/cap-llama.cpp
|
|
100
|
+
${SOURCE_DIR}/cap-completion.cpp
|
|
101
|
+
${SOURCE_DIR}/cap-tts.cpp
|
|
102
|
+
${SOURCE_FILES_ARCH}
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Set target properties
|
|
106
|
+
set_target_properties(llama-cpp PROPERTIES
|
|
107
|
+
FRAMEWORK TRUE
|
|
108
|
+
FRAMEWORK_VERSION A
|
|
109
|
+
MACOSX_FRAMEWORK_IDENTIFIER com.arusatech.llama-cpp
|
|
110
|
+
MACOSX_FRAMEWORK_BUNDLE_VERSION 1.0.0
|
|
111
|
+
MACOSX_FRAMEWORK_SHORT_VERSION_STRING 1.0.0
|
|
112
|
+
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
|
|
113
|
+
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ""
|
|
114
|
+
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO
|
|
115
|
+
XCODE_ATTRIBUTE_ENABLE_BITCODE NO
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Include directories
|
|
119
|
+
target_include_directories(llama-cpp PRIVATE
|
|
120
|
+
${SOURCE_DIR}
|
|
121
|
+
${SOURCE_DIR}/ggml-cpu
|
|
122
|
+
${SOURCE_DIR}/tools/mtmd
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# ARM64: rely on Clang's default tuning; no x86βspecific -march flags here
|
|
126
|
+
|
|
127
|
+
# Link frameworks via linker flags
|
|
128
|
+
target_link_options(llama-cpp PRIVATE
|
|
129
|
+
"-Wl,-framework,Accelerate"
|
|
130
|
+
"-Wl,-framework,Metal"
|
|
131
|
+
"-Wl,-framework,MetalKit"
|
|
132
|
+
"-Wl,-framework,Foundation"
|
|
133
|
+
"-Wl,-framework,CoreGraphics"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# Public headers
|
|
137
|
+
set_target_properties(llama-cpp PROPERTIES
|
|
138
|
+
PUBLIC_HEADER "${PUBLIC_HEADERS}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Install rules
|
|
142
|
+
install(TARGETS llama-cpp
|
|
143
|
+
FRAMEWORK DESTINATION .
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
message(STATUS "Building llama-cpp for ARM64 (devices)")
|
|
147
|
+
message(STATUS "Source directory: ${SOURCE_DIR}")
|
|
148
|
+
message(STATUS "Architecture: arm64")
|
|
149
|
+
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.16)
|
|
2
|
+
project(llama-cpp VERSION 1.0.0 LANGUAGES CXX C)
|
|
3
|
+
|
|
4
|
+
set(CMAKE_CXX_STANDARD 17)
|
|
5
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
6
|
+
|
|
7
|
+
# iOS specific settings for x86_64 emulator
|
|
8
|
+
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.0)
|
|
9
|
+
set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE NO)
|
|
10
|
+
|
|
11
|
+
# Dependencies and compile options optimized for x86_64
|
|
12
|
+
add_definitions(
|
|
13
|
+
-DNDEBUG
|
|
14
|
+
-DO3
|
|
15
|
+
-DLM_GGML_USE_CPU
|
|
16
|
+
-DLM_GGML_USE_ACCELERATE
|
|
17
|
+
-DLM_GGML_USE_METAL
|
|
18
|
+
-DLM_GGML_METAL_USE_BF16
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# X86_64 specific optimizations for emulator
|
|
22
|
+
add_definitions(-DLM_GGML_CPU_GENERIC)
|
|
23
|
+
add_definitions(-DLM_GGML_USE_AVX2)
|
|
24
|
+
add_definitions(-DLM_GGML_USE_AVX)
|
|
25
|
+
add_definitions(-DLM_GGML_USE_SSE3)
|
|
26
|
+
add_definitions(-DLM_GGML_USE_SSE)
|
|
27
|
+
add_definitions(-DLM_GGML_USE_F16C)
|
|
28
|
+
add_definitions(-DLM_GGML_USE_FMA)
|
|
29
|
+
|
|
30
|
+
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cpp)
|
|
31
|
+
|
|
32
|
+
# Use x86_64 optimized source files for emulator
|
|
33
|
+
set(SOURCE_FILES_ARCH
|
|
34
|
+
${SOURCE_DIR}/ggml-cpu/arch/x86/quants.c
|
|
35
|
+
${SOURCE_DIR}/ggml-cpu/arch/x86/repack.cpp
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Define public headers
|
|
39
|
+
set(PUBLIC_HEADERS
|
|
40
|
+
${SOURCE_DIR}/cap-llama.h
|
|
41
|
+
${SOURCE_DIR}/cap-completion.h
|
|
42
|
+
${SOURCE_DIR}/cap-tts.h
|
|
43
|
+
${SOURCE_DIR}/llama.h
|
|
44
|
+
${SOURCE_DIR}/ggml.h
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Create library target
|
|
48
|
+
add_library(llama-cpp SHARED
|
|
49
|
+
${SOURCE_DIR}/ggml.c
|
|
50
|
+
${SOURCE_DIR}/ggml-alloc.c
|
|
51
|
+
${SOURCE_DIR}/ggml-backend.cpp
|
|
52
|
+
${SOURCE_DIR}/ggml-backend-reg.cpp
|
|
53
|
+
${SOURCE_DIR}/ggml-cpu/amx/amx.cpp
|
|
54
|
+
${SOURCE_DIR}/ggml-cpu/amx/mmq.cpp
|
|
55
|
+
${SOURCE_DIR}/ggml-cpu/ggml-cpu.c
|
|
56
|
+
${SOURCE_DIR}/ggml-cpu/ggml-cpu.cpp
|
|
57
|
+
${SOURCE_DIR}/ggml-cpu/quants.c
|
|
58
|
+
${SOURCE_DIR}/ggml-cpu/traits.cpp
|
|
59
|
+
${SOURCE_DIR}/ggml-cpu/repack.cpp
|
|
60
|
+
${SOURCE_DIR}/ggml-cpu/unary-ops.cpp
|
|
61
|
+
${SOURCE_DIR}/ggml-cpu/binary-ops.cpp
|
|
62
|
+
${SOURCE_DIR}/ggml-cpu/vec.cpp
|
|
63
|
+
${SOURCE_DIR}/ggml-cpu/ops.cpp
|
|
64
|
+
${SOURCE_DIR}/ggml-metal.m
|
|
65
|
+
${SOURCE_DIR}/ggml-opt.cpp
|
|
66
|
+
${SOURCE_DIR}/ggml-threading.cpp
|
|
67
|
+
${SOURCE_DIR}/ggml-quants.c
|
|
68
|
+
${SOURCE_DIR}/gguf.cpp
|
|
69
|
+
${SOURCE_DIR}/log.cpp
|
|
70
|
+
${SOURCE_DIR}/llama-impl.cpp
|
|
71
|
+
${SOURCE_DIR}/llama-grammar.cpp
|
|
72
|
+
${SOURCE_DIR}/llama-sampling.cpp
|
|
73
|
+
${SOURCE_DIR}/llama-vocab.cpp
|
|
74
|
+
${SOURCE_DIR}/llama-adapter.cpp
|
|
75
|
+
${SOURCE_DIR}/llama-chat.cpp
|
|
76
|
+
${SOURCE_DIR}/llama-context.cpp
|
|
77
|
+
${SOURCE_DIR}/llama-arch.cpp
|
|
78
|
+
${SOURCE_DIR}/llama-batch.cpp
|
|
79
|
+
${SOURCE_DIR}/llama-cparams.cpp
|
|
80
|
+
${SOURCE_DIR}/llama-hparams.cpp
|
|
81
|
+
${SOURCE_DIR}/llama.cpp
|
|
82
|
+
${SOURCE_DIR}/llama-model.cpp
|
|
83
|
+
${SOURCE_DIR}/llama-model-loader.cpp
|
|
84
|
+
${SOURCE_DIR}/llama-model-saver.cpp
|
|
85
|
+
${SOURCE_DIR}/llama-mmap.cpp
|
|
86
|
+
${SOURCE_DIR}/llama-kv-cache.cpp
|
|
87
|
+
${SOURCE_DIR}/llama-kv-cache-iswa.cpp
|
|
88
|
+
${SOURCE_DIR}/llama-memory-hybrid.cpp
|
|
89
|
+
${SOURCE_DIR}/llama-memory-recurrent.cpp
|
|
90
|
+
${SOURCE_DIR}/llama-memory.cpp
|
|
91
|
+
${SOURCE_DIR}/llama-io.cpp
|
|
92
|
+
${SOURCE_DIR}/llama-graph.cpp
|
|
93
|
+
${SOURCE_DIR}/sampling.cpp
|
|
94
|
+
${SOURCE_DIR}/unicode-data.cpp
|
|
95
|
+
${SOURCE_DIR}/unicode.cpp
|
|
96
|
+
${SOURCE_DIR}/common.cpp
|
|
97
|
+
${SOURCE_DIR}/chat.cpp
|
|
98
|
+
# Additional sources required for JSON parsing, chat parser, and mtmd tools
|
|
99
|
+
${SOURCE_DIR}/chat-parser.cpp
|
|
100
|
+
${SOURCE_DIR}/regex-partial.cpp
|
|
101
|
+
${SOURCE_DIR}/json-partial.cpp
|
|
102
|
+
${SOURCE_DIR}/json-schema-to-grammar.cpp
|
|
103
|
+
${SOURCE_DIR}/anyascii.c
|
|
104
|
+
${SOURCE_DIR}/tools/mtmd/mtmd.cpp
|
|
105
|
+
${SOURCE_DIR}/tools/mtmd/mtmd-helper.cpp
|
|
106
|
+
${SOURCE_DIR}/tools/mtmd/mtmd-audio.cpp
|
|
107
|
+
${SOURCE_DIR}/tools/mtmd/clip.cpp
|
|
108
|
+
${SOURCE_DIR}/minja/minja.hpp
|
|
109
|
+
${SOURCE_DIR}/minja/chat-template.hpp
|
|
110
|
+
${SOURCE_DIR}/nlohmann/json.hpp
|
|
111
|
+
${SOURCE_DIR}/nlohmann/json_fwd.hpp
|
|
112
|
+
${SOURCE_DIR}/cap-llama.cpp
|
|
113
|
+
${SOURCE_DIR}/cap-completion.cpp
|
|
114
|
+
${SOURCE_DIR}/cap-tts.cpp
|
|
115
|
+
${SOURCE_FILES_ARCH}
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Set target properties
|
|
119
|
+
set_target_properties(llama-cpp PROPERTIES
|
|
120
|
+
FRAMEWORK TRUE
|
|
121
|
+
FRAMEWORK_VERSION A
|
|
122
|
+
MACOSX_FRAMEWORK_IDENTIFIER com.arusatech.llama-cpp
|
|
123
|
+
MACOSX_FRAMEWORK_BUNDLE_VERSION 1.0.0
|
|
124
|
+
MACOSX_FRAMEWORK_SHORT_VERSION_STRING 1.0.0
|
|
125
|
+
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
|
|
126
|
+
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ""
|
|
127
|
+
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO
|
|
128
|
+
XCODE_ATTRIBUTE_ENABLE_BITCODE NO
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
# Set include directories
|
|
132
|
+
target_include_directories(llama-cpp PRIVATE
|
|
133
|
+
${SOURCE_DIR}
|
|
134
|
+
${SOURCE_DIR}/ggml-cpu
|
|
135
|
+
${SOURCE_DIR}/tools/mtmd
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
# Set compile options for x86_64 optimization
|
|
139
|
+
target_compile_options(llama-cpp PRIVATE
|
|
140
|
+
-march=x86-64
|
|
141
|
+
-mtune=generic
|
|
142
|
+
-mavx2
|
|
143
|
+
-mavx
|
|
144
|
+
-msse3
|
|
145
|
+
-msse
|
|
146
|
+
-mfma
|
|
147
|
+
-mf16c
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
# Set link options
|
|
151
|
+
# NOTE:
|
|
152
|
+
# Use -Wl,-framework,<Name> so that the compiler driver passes the correct
|
|
153
|
+
# framework flags through to the linker as a single option.
|
|
154
|
+
target_link_options(llama-cpp PRIVATE
|
|
155
|
+
"-Wl,-framework,Accelerate"
|
|
156
|
+
"-Wl,-framework,Metal"
|
|
157
|
+
"-Wl,-framework,MetalKit"
|
|
158
|
+
"-Wl,-framework,Foundation"
|
|
159
|
+
"-Wl,-framework,CoreGraphics"
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# Set public headers
|
|
163
|
+
set_target_properties(llama-cpp PROPERTIES
|
|
164
|
+
PUBLIC_HEADER "${PUBLIC_HEADERS}"
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
# Install rules
|
|
168
|
+
install(TARGETS llama-cpp
|
|
169
|
+
FRAMEWORK DESTINATION .
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
# Print build information
|
|
173
|
+
message(STATUS "Building llama-cpp for x86_64 (emulator)")
|
|
174
|
+
message(STATUS "Source directory: ${SOURCE_DIR}")
|
|
175
|
+
message(STATUS "Architecture: x86_64")
|
|
176
|
+
message(STATUS "Optimizations: AVX2, AVX, SSE3, SSE, FMA, F16C")
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.16)
|
|
2
|
+
project(llama-cpp VERSION 1.0.0 LANGUAGES CXX C)
|
|
3
|
+
|
|
4
|
+
set(CMAKE_CXX_STANDARD 17)
|
|
5
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
6
|
+
|
|
7
|
+
# iOS specific settings for ARM64 devices
|
|
8
|
+
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.0)
|
|
9
|
+
set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE NO)
|
|
10
|
+
|
|
11
|
+
# Common llama.cpp definitions
|
|
12
|
+
add_definitions(
|
|
13
|
+
-DNDEBUG
|
|
14
|
+
-DO3
|
|
15
|
+
-DLM_GGML_USE_CPU
|
|
16
|
+
-DLM_GGML_USE_ACCELERATE
|
|
17
|
+
-DLM_GGML_USE_METAL
|
|
18
|
+
-DLM_GGML_METAL_USE_BF16
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cpp)
|
|
22
|
+
|
|
23
|
+
# ARM64βtuned ggml sources
|
|
24
|
+
set(SOURCE_FILES_ARCH
|
|
25
|
+
${SOURCE_DIR}/ggml-cpu/arch/arm/quants.c
|
|
26
|
+
${SOURCE_DIR}/ggml-cpu/arch/arm/repack.cpp
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Define public headers
|
|
30
|
+
set(PUBLIC_HEADERS
|
|
31
|
+
${SOURCE_DIR}/cap-llama.h
|
|
32
|
+
${SOURCE_DIR}/cap-completion.h
|
|
33
|
+
${SOURCE_DIR}/cap-tts.h
|
|
34
|
+
${SOURCE_DIR}/llama.h
|
|
35
|
+
${SOURCE_DIR}/ggml.h
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Create library target
|
|
39
|
+
add_library(llama-cpp SHARED
|
|
40
|
+
${SOURCE_DIR}/ggml.c
|
|
41
|
+
${SOURCE_DIR}/ggml-alloc.c
|
|
42
|
+
${SOURCE_DIR}/ggml-backend.cpp
|
|
43
|
+
${SOURCE_DIR}/ggml-backend-reg.cpp
|
|
44
|
+
${SOURCE_DIR}/ggml-cpu/amx/amx.cpp
|
|
45
|
+
${SOURCE_DIR}/ggml-cpu/amx/mmq.cpp
|
|
46
|
+
${SOURCE_DIR}/ggml-cpu/ggml-cpu.c
|
|
47
|
+
${SOURCE_DIR}/ggml-cpu/ggml-cpu.cpp
|
|
48
|
+
${SOURCE_DIR}/ggml-cpu/quants.c
|
|
49
|
+
${SOURCE_DIR}/ggml-cpu/traits.cpp
|
|
50
|
+
${SOURCE_DIR}/ggml-cpu/repack.cpp
|
|
51
|
+
${SOURCE_DIR}/ggml-cpu/unary-ops.cpp
|
|
52
|
+
${SOURCE_DIR}/ggml-cpu/binary-ops.cpp
|
|
53
|
+
${SOURCE_DIR}/ggml-cpu/vec.cpp
|
|
54
|
+
${SOURCE_DIR}/ggml-cpu/ops.cpp
|
|
55
|
+
${SOURCE_DIR}/ggml-metal.m
|
|
56
|
+
${SOURCE_DIR}/ggml-opt.cpp
|
|
57
|
+
${SOURCE_DIR}/ggml-threading.cpp
|
|
58
|
+
${SOURCE_DIR}/ggml-quants.c
|
|
59
|
+
${SOURCE_DIR}/gguf.cpp
|
|
60
|
+
${SOURCE_DIR}/log.cpp
|
|
61
|
+
${SOURCE_DIR}/llama-impl.cpp
|
|
62
|
+
${SOURCE_DIR}/llama-grammar.cpp
|
|
63
|
+
${SOURCE_DIR}/llama-sampling.cpp
|
|
64
|
+
${SOURCE_DIR}/llama-vocab.cpp
|
|
65
|
+
${SOURCE_DIR}/llama-adapter.cpp
|
|
66
|
+
${SOURCE_DIR}/llama-chat.cpp
|
|
67
|
+
${SOURCE_DIR}/llama-context.cpp
|
|
68
|
+
${SOURCE_DIR}/llama-arch.cpp
|
|
69
|
+
${SOURCE_DIR}/llama-batch.cpp
|
|
70
|
+
${SOURCE_DIR}/llama-cparams.cpp
|
|
71
|
+
${SOURCE_DIR}/llama-hparams.cpp
|
|
72
|
+
${SOURCE_DIR}/llama.cpp
|
|
73
|
+
${SOURCE_DIR}/llama-model.cpp
|
|
74
|
+
${SOURCE_DIR}/llama-model-loader.cpp
|
|
75
|
+
${SOURCE_DIR}/llama-model-saver.cpp
|
|
76
|
+
${SOURCE_DIR}/llama-mmap.cpp
|
|
77
|
+
${SOURCE_DIR}/llama-kv-cache.cpp
|
|
78
|
+
${SOURCE_DIR}/llama-kv-cache-iswa.cpp
|
|
79
|
+
${SOURCE_DIR}/llama-memory-hybrid.cpp
|
|
80
|
+
${SOURCE_DIR}/llama-memory-recurrent.cpp
|
|
81
|
+
${SOURCE_DIR}/llama-memory.cpp
|
|
82
|
+
${SOURCE_DIR}/llama-io.cpp
|
|
83
|
+
${SOURCE_DIR}/llama-graph.cpp
|
|
84
|
+
${SOURCE_DIR}/sampling.cpp
|
|
85
|
+
${SOURCE_DIR}/unicode-data.cpp
|
|
86
|
+
${SOURCE_DIR}/unicode.cpp
|
|
87
|
+
${SOURCE_DIR}/common.cpp
|
|
88
|
+
${SOURCE_DIR}/chat.cpp
|
|
89
|
+
# Additional sources required for JSON parsing, chat parser, and mtmd tools
|
|
90
|
+
${SOURCE_DIR}/chat-parser.cpp
|
|
91
|
+
${SOURCE_DIR}/regex-partial.cpp
|
|
92
|
+
${SOURCE_DIR}/json-partial.cpp
|
|
93
|
+
${SOURCE_DIR}/json-schema-to-grammar.cpp
|
|
94
|
+
${SOURCE_DIR}/anyascii.c
|
|
95
|
+
${SOURCE_DIR}/tools/mtmd/mtmd.cpp
|
|
96
|
+
${SOURCE_DIR}/tools/mtmd/mtmd-helper.cpp
|
|
97
|
+
${SOURCE_DIR}/tools/mtmd/mtmd-audio.cpp
|
|
98
|
+
${SOURCE_DIR}/tools/mtmd/clip.cpp
|
|
99
|
+
${SOURCE_DIR}/cap-llama.cpp
|
|
100
|
+
${SOURCE_DIR}/cap-completion.cpp
|
|
101
|
+
${SOURCE_DIR}/cap-tts.cpp
|
|
102
|
+
${SOURCE_FILES_ARCH}
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Set target properties
|
|
106
|
+
set_target_properties(llama-cpp PROPERTIES
|
|
107
|
+
FRAMEWORK TRUE
|
|
108
|
+
FRAMEWORK_VERSION A
|
|
109
|
+
MACOSX_FRAMEWORK_IDENTIFIER com.arusatech.llama-cpp
|
|
110
|
+
MACOSX_FRAMEWORK_BUNDLE_VERSION 1.0.0
|
|
111
|
+
MACOSX_FRAMEWORK_SHORT_VERSION_STRING 1.0.0
|
|
112
|
+
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
|
|
113
|
+
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM ""
|
|
114
|
+
XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO
|
|
115
|
+
XCODE_ATTRIBUTE_ENABLE_BITCODE NO
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Include directories
|
|
119
|
+
target_include_directories(llama-cpp PRIVATE
|
|
120
|
+
${SOURCE_DIR}
|
|
121
|
+
${SOURCE_DIR}/ggml-cpu
|
|
122
|
+
${SOURCE_DIR}/tools/mtmd
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# ARM64: rely on Clang's default tuning; no x86βspecific -march flags here
|
|
126
|
+
|
|
127
|
+
# Link frameworks via linker flags
|
|
128
|
+
target_link_options(llama-cpp PRIVATE
|
|
129
|
+
"-Wl,-framework,Accelerate"
|
|
130
|
+
"-Wl,-framework,Metal"
|
|
131
|
+
"-Wl,-framework,MetalKit"
|
|
132
|
+
"-Wl,-framework,Foundation"
|
|
133
|
+
"-Wl,-framework,CoreGraphics"
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# Public headers
|
|
137
|
+
set_target_properties(llama-cpp PROPERTIES
|
|
138
|
+
PUBLIC_HEADER "${PUBLIC_HEADERS}"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
# Install rules
|
|
142
|
+
install(TARGETS llama-cpp
|
|
143
|
+
FRAMEWORK DESTINATION .
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
message(STATUS "Building llama-cpp for ARM64 (devices)")
|
|
147
|
+
message(STATUS "Source directory: ${SOURCE_DIR}")
|
|
148
|
+
message(STATUS "Architecture: arm64")
|
|
149
|
+
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "llama-cpp-capacitor",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A native Capacitor plugin that embeds llama.cpp directly into mobile apps, enabling offline AI inference with chat-first API design. Complete iOS and Android support: text generation, chat, multimodal, TTS, LoRA, embeddings, and more.",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,11 +10,14 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"android/src/main/",
|
|
12
12
|
"android/build.gradle",
|
|
13
|
+
"build-native.sh",
|
|
13
14
|
"cpp/",
|
|
14
15
|
"dist/",
|
|
16
|
+
"ios/CMakeLists.txt",
|
|
17
|
+
"ios/CMakeLists-arm64.txt",
|
|
18
|
+
"ios/CMakeLists-x86_64.txt",
|
|
15
19
|
"ios/Sources",
|
|
16
20
|
"ios/Frameworks",
|
|
17
|
-
"ios/Tests",
|
|
18
21
|
"Package.swift",
|
|
19
22
|
"LlamaCpp.podspec",
|
|
20
23
|
"types/"
|
|
@@ -65,8 +68,11 @@
|
|
|
65
68
|
"docgen": "npx docgen --api LlamaCppPlugin --output-readme README.md --output-json dist/docs.json",
|
|
66
69
|
"build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
|
|
67
70
|
"build:native": "./build-native.sh",
|
|
71
|
+
"build:all": "npm run build && npm run build:native",
|
|
68
72
|
"build:ios": "cd ios && cmake -B build -S . && cmake --build build --config Release",
|
|
69
73
|
"build:android": "cd android && gradlew.bat assembleRelease",
|
|
74
|
+
"pack": "npm run build && npm pack --dry-run",
|
|
75
|
+
"pack:full": "npm run build:all && npm pack --dry-run",
|
|
70
76
|
"test": "jest",
|
|
71
77
|
"test:integration": "./scripts/test-integration.sh",
|
|
72
78
|
"test:integration:jest": "jest --config test/jest.integration.config.js",
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import XCTest
|
|
2
|
-
@testable import LlamaCppPlugin
|
|
3
|
-
|
|
4
|
-
class LlamaCppTests: XCTestCase {
|
|
5
|
-
func testEcho() {
|
|
6
|
-
// This is an example of a functional test case for a plugin.
|
|
7
|
-
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
8
|
-
|
|
9
|
-
let implementation = LlamaCpp()
|
|
10
|
-
let value = "Hello, World!"
|
|
11
|
-
let result = implementation.echo(value)
|
|
12
|
-
|
|
13
|
-
XCTAssertEqual(value, result)
|
|
14
|
-
}
|
|
15
|
-
}
|