From 46dc565a4a755ffede2d686a85113d41b7c5afd5 Mon Sep 17 00:00:00 2001 From: AsbjornOlling Date: Wed, 18 Dec 2024 17:31:54 +0100 Subject: [PATCH 1/3] build.rs updated to support android --- llama-cpp-sys-2/build.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/llama-cpp-sys-2/build.rs b/llama-cpp-sys-2/build.rs index f5473769..8ade7a55 100644 --- a/llama-cpp-sys-2/build.rs +++ b/llama-cpp-sys-2/build.rs @@ -230,6 +230,25 @@ fn main() { config.static_crt(static_crt); } + if target.contains("android") && target.contains("aarch64") { + // build flags for android taken from this doc + // https://github.com/ggerganov/llama.cpp/blob/master/docs/android.md + let android_ndk = env::var("ANDROID_NDK") + .expect("Please install Android NDK and ensure that ANDROID_NDK env variable is set"); + config.define("LLAMA_CURL", "OFF"); + config.define( + "CMAKE_TOOLCHAIN_FILE", + format!("{android_ndk}/build/cmake/android.toolchain.cmake"), + ); + config.define("ANDROID_ABI", "arm64-v8a"); + config.define("ANDROID_PLATFORM", "android-28"); + config.define("CMAKE_SYSTEM_PROCESSOR", "arm64"); + config.define("CMAKE_C_FLAGS", "-march=armv8.7a"); + config.define("CMAKE_CXX_FLAGS", "-march=armv8.7a"); + config.define("GGML_OPENMP", "OFF"); + config.define("GGML_LLAMAFILE", "OFF"); + } + if cfg!(feature = "vulkan") { config.define("GGML_VULKAN", "ON"); if cfg!(windows) { From 3103336eaf905671024cb37cf6a85213be4f64dc Mon Sep 17 00:00:00 2001 From: AsbjornOlling Date: Wed, 18 Dec 2024 18:23:07 +0100 Subject: [PATCH 2/3] use different type in dry sampler when building for android --- llama-cpp-2/src/sampling.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/llama-cpp-2/src/sampling.rs b/llama-cpp-2/src/sampling.rs index 69a8554f..e3237074 100644 --- a/llama-cpp-2/src/sampling.rs +++ b/llama-cpp-2/src/sampling.rs @@ -20,6 +20,15 @@ impl Debug for LlamaSampler { } } +// this is needed for the dry sampler to typecheck on android +// ...because what is normally an i8, is an u8 +#[cfg(target_os = "android")] +type CChar = u8; + +#[cfg(not(target_os = "android"))] +type CChar = i8; + + impl LlamaSampler { /// Sample and accept a token from the idx-th output of the last evaluation #[must_use] @@ -254,7 +263,7 @@ impl LlamaSampler { .into_iter() .map(|s| CString::new(s.as_ref()).unwrap()) .collect(); - let mut seq_breaker_pointers: Vec<*const i8> = + let mut seq_breaker_pointers: Vec<*const CChar> = seq_breakers.iter().map(|s| s.as_ptr()).collect(); let sampler = unsafe { From 55059ad42ce90f3c3f9070f982984b8d496bfc10 Mon Sep 17 00:00:00 2001 From: AsbjornOlling Date: Thu, 19 Dec 2024 12:11:15 +0100 Subject: [PATCH 3/3] remove unnecessary LLAMA_CURL excemption --- llama-cpp-sys-2/build.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/llama-cpp-sys-2/build.rs b/llama-cpp-sys-2/build.rs index 8ade7a55..ed57895d 100644 --- a/llama-cpp-sys-2/build.rs +++ b/llama-cpp-sys-2/build.rs @@ -235,7 +235,6 @@ fn main() { // https://github.com/ggerganov/llama.cpp/blob/master/docs/android.md let android_ndk = env::var("ANDROID_NDK") .expect("Please install Android NDK and ensure that ANDROID_NDK env variable is set"); - config.define("LLAMA_CURL", "OFF"); config.define( "CMAKE_TOOLCHAIN_FILE", format!("{android_ndk}/build/cmake/android.toolchain.cmake"),