This guide provides detailed instructions for building GPUFabric Mobile SDK, supporting Android and iOS platforms.
- Operating System: Windows 10/11 (build), macOS (iOS build)
- Rust: 1.70+
- PowerShell: 5.1+ (Windows)
- Android Studio: Latest version
- Android NDK: r21+ (recommended r26d)
- Android SDK: API 24+
- CMake: 3.18+ (auto-installed)
- Xcode: 14.0+
- iOS SDK: 14.0+
- Rust iOS targets:
aarch64-apple-ios,x86_64-apple-ios
- UPX: For compressing .so files (recommended)
- cbindgen: For generating C header files (auto-installed)
git clone https://github.com/your-repo/GPUFabric.git
cd GPUFabric/gpuf-c# Navigate to scripts directory
cd scripts
# Configure Android NDK
.\setup_ndk.ps1
# Install UPX (optional)
winget install UPX# Build Android
.\build_mobile.ps1 -Platform android
# Build all platforms (requires macOS)
.\build_mobile.ps1 -Platform all# Prepare Android test files
.\test_android.ps1- Open Android Studio
- Go to
Tools→SDK Manager→SDK Tools - Check
NDK (Side by side)andCMake - Click
Applyto install
# Manual setup (if script fails)
$env:ANDROID_NDK_HOME = "C:\Users\admin\AppData\Local\Android\Sdk\ndk\26.1.10909125"
# Permanent setup
[System.Environment]::SetEnvironmentVariable('ANDROID_NDK_HOME', "C:\Users\admin\AppData\Local\Android\Sdk\ndk\26.1.10909125", 'User')rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add x86_64-linux-android# Navigate to gpuf-c directory
cd D:\codedir\GPUFabric\gpuf-c
# Build Android libraries
cargo ndk -t arm64-v8a -t armeabi-v7a -t x86_64 build --release --features vulkan
# Or use script
cd scripts
.\build_mobile.ps1 -Platform androidrustup target add aarch64-apple-ios
rustup target add x86_64-apple-ios
rustup target add aarch64-apple-ios-sim# Build iOS device libraries
cargo build --target aarch64-apple-ios --release --features metal
cargo build --target x86_64-apple-ios --release --features metal
# Build iOS simulator libraries
cargo build --target aarch64-apple-ios-sim --release --features metaltarget/
├── aarch64-linux-android/release/
│ └── libgpuf_c.so # ARM64 library (2.2MB → ~1.5MB compressed)
├── armv7-linux-androideabi/release/
│ └── libgpuf_c.so # ARMv7 library
└── x86_64-linux-android/release/
└── libgpuf_c.so # x86_64 library
target/
├── aarch64-apple-ios/release/
│ └── libgpuf_c.a # iOS ARM64 static library
├── x86_64-apple-ios/release/
│ └── libgpuf_c.a # iOS x86_64 static library
└── aarch64-apple-ios-sim/release/
└── libgpuf_c.a # iOS simulator static library
gpuf_c.h # C header file (common for all platforms)
Purpose: Main build script supporting multi-platform builds and auto-compression
Parameters:
-Platform:android,ios,all(default:all)
Features:
- ✅ Automatic NDK environment detection
- ✅ Support for multiple GPU backends (Vulkan/Metal/CPU)
- ✅ Automatic UPX compression (if available)
- ✅ C header file generation
- ✅ Parallel multi-architecture builds
Usage Examples:
# Build Android (Vulkan acceleration)
.\build_mobile.ps1 -Platform android
# Build iOS (Metal acceleration)
.\build_mobile.ps1 -Platform ios
# Build all platforms
.\build_mobile.ps1 -Platform allPurpose: Android NDK environment configuration
Steps:
- Check NDK installation status
- Set
ANDROID_NDK_HOMEenvironment variable - Verify configuration validity
- Provide installation guide
Purpose: Android test environment preparation
Features:
- ✅ Copy .so files to test directory
- ✅ Generate Android Studio project structure
- ✅ Create sample code
- ✅ Verify file integrity
# Manual compression (higher compression ratio)
upx --best --lzma libgpuf_c.so
# Compression effect
# Original: 2.23 MB
# Compressed: 1.49 MB (33% savings)# Release build (highest performance)
cargo ndk build --release
# Reduce size (remove debug info)
cargo ndk build --release
# (Rust strips debug symbols by default in release)
# Feature selection
--features vulkan # GPU acceleration (Android)
--features metal # GPU acceleration (iOS)
--features cpu # CPU only (best compatibility)# Cargo.toml
[dependencies]
llama-cpp-2 = { version = "0.1", features = ["vulkan"] }# Cargo.toml
[dependencies]
llama-cpp-2 = { version = "0.1", features = ["metal"] }# Cargo.toml
[dependencies]
llama-cpp-2 = { version = "0.1", features = ["cpu"] }# Solution
echo $env:ANDROID_NDK_HOME # Check path
.\setup_ndk.ps1 # Reconfigure# Solution - install via Android Studio
# Or manual download: https://cmake.org/download/# Solution - install correct targets
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add x86_64-linux-android# Some .so files cannot be compressed, can skip
# Or try different parameters
upx --best libgpuf_c.so
upx --lzma libgpuf_c.so# Rust build logs
RUST_LOG=debug cargo ndk build --release
# NDK build logs
cargo ndk build --release --verbose# Android
readelf -d libgpuf_c.so | grep NEEDED
# iOS
otool -L libgpuf_c.a
# Strip debug symbols (newer NDK versions use llvm-strip)
llvm-strip libgpuf_c.so# Check exported C functions
nm -D libgpuf_c.so | grep gpuf_| Architecture | ABI | Device Support | Recommendation |
|---|---|---|---|
| ARM64 | arm64-v8a | Modern phones/tablets | ⭐⭐⭐⭐⭐ |
| ARMv7 | armeabi-v7a | Older/low-end devices | ⭐⭐⭐ |
| x86_64 | x86_64 | Emulators/ChromeOS | ⭐⭐ |
| Architecture | Device Support | Recommendation |
|---|---|---|
| ARM64 | iPhone 6s+/iPad Air 2+ | ⭐⭐⭐⭐⭐ |
| x86_64 | Simulators/Mac Catalyst | ⭐⭐⭐ |
Welcome to submit Issues and Pull Requests to improve the build process!
This project is licensed under the MIT License. See LICENSE file for details.