diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml
index faf796c82..ccddd65bc 100644
--- a/.github/workflows/compile.yml
+++ b/.github/workflows/compile.yml
@@ -51,12 +51,12 @@ jobs:
- uses: actions/upload-artifact@v4
with:
path: ./build/libllama.so
- name: llama-bin-linux-${{ matrix.build }}-x64.so
+ name: llama-bin-linux-${{ matrix.build }}-x64
- name: Upload Llava
uses: actions/upload-artifact@v4
with:
path: ./build/examples/llava/libllava_shared.so
- name: llava-bin-linux-${{ matrix.build }}-x64.so
+ name: llava-bin-linux-${{ matrix.build }}-x64
compile-windows:
name: Compile (Windows)
@@ -92,13 +92,13 @@ jobs:
uses: actions/upload-artifact@v4
with:
path: .\build\bin\Release\llama.dll
- name: llama-bin-win-${{ matrix.build }}-x64.dll
+ name: llama-bin-win-${{ matrix.build }}-x64
- name: Upload Llava
uses: actions/upload-artifact@v4
with:
path: .\build\bin\Release\llava_shared.dll
- name: llava-bin-win-${{ matrix.build }}-x64.dll
+ name: llava-bin-win-${{ matrix.build }}-x64
compile-clblast:
name: Compile (clblast) - ${{ matrix.os }}
@@ -175,14 +175,14 @@ jobs:
path: |
.\build\bin\Release\llama.dll
.\build\bin\Release\clblast.dll
- name: llama-bin-win-clblast-x64.dll
+ name: llama-bin-win-clblast-x64
- name: Upload llava artifacts (Windows)
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/upload-artifact@v4
with:
path: |
.\build\bin\Release\llava_shared.dll
- name: llava-bin-win-clblast-x64.dll
+ name: llava-bin-win-clblast-x64
- name: Upload artifacts (linux)
if: ${{ matrix.os == 'ubuntu-22.04' }}
uses: actions/upload-artifact@v4
@@ -190,14 +190,14 @@ jobs:
path: |
./build/libllama.so
# ./build/libclblast.so
- name: llama-bin-linux-clblast-x64.so
+ name: llama-bin-linux-clblast-x64
- name: Upload llava artifacts (linux)
if: ${{ matrix.os == 'ubuntu-22.04' }}
uses: actions/upload-artifact@v4
with:
path: |
./build/examples/llava/libllava_shared.so
- name: llava-bin-linux-clblast-x64.so
+ name: llava-bin-linux-clblast-x64
compile-cublas:
@@ -247,25 +247,25 @@ jobs:
uses: actions/upload-artifact@v4
with:
path: .\build\bin\Release\llama.dll
- name: llama-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll
+ name: llama-bin-win-cublas-cu${{ matrix.cuda }}-x64
- name: Upload llava artifacts (Windows)
if: ${{ matrix.os == 'windows-latest' }}
uses: actions/upload-artifact@v4
with:
path: .\build\bin\Release\llava_shared.dll
- name: llava-bin-win-cublas-cu${{ matrix.cuda }}-x64.dll
+ name: llava-bin-win-cublas-cu${{ matrix.cuda }}-x64
- name: Upload artifacts (Linux)
if: ${{ matrix.os == 'ubuntu-20.04' }}
uses: actions/upload-artifact@v4
with:
path: ./build/libllama.so
- name: llama-bin-linux-cublas-cu${{ matrix.cuda }}-x64.so
+ name: llama-bin-linux-cublas-cu${{ matrix.cuda }}-x64
- name: Upload llava artifacts (Linux)
if: ${{ matrix.os == 'ubuntu-20.04' }}
uses: actions/upload-artifact@v4
with:
path: ./build/examples/llava/libllava_shared.so
- name: llava-bin-linux-cublas-cu${{ matrix.cuda }}-x64.so
+ name: llava-bin-linux-cublas-cu${{ matrix.cuda }}-x64
compile-macos:
@@ -300,18 +300,63 @@ jobs:
uses: actions/upload-artifact@v4
with:
path: ./build/libllama.dylib
- name: llama-bin-osx-${{ matrix.build }}.dylib
+ name: llama-bin-osx-${{ matrix.build }}
- name: Upload Llava
uses: actions/upload-artifact@v4
with:
path: ./build/examples/llava/libllava_shared.dylib
- name: llava-bin-osx-${{ matrix.build }}.dylib
+ name: llava-bin-osx-${{ matrix.build }}
- name: Upload Metal
if: ${{ matrix.build != 'x64' }}
uses: actions/upload-artifact@v4
with:
path: ./build/bin/ggml-metal.metal
- name: ggml-metal.metal
+ name: ggml-metal
+
+ compile-android:
+ name: Compile (Android)
+ strategy:
+ fail-fast: true
+ matrix:
+ include:
+ - build: 'x86'
+ defines: '-DANDROID_ABI=x86'
+ - build: 'x86_64'
+ defines: '-DANDROID_ABI=x86_64'
+ - build: 'arm64-v8a'
+ defines: '-DANDROID_ABI=arm64-v8a'
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ repository: ggerganov/llama.cpp
+ fetch-depth: 0
+ ref: '${{ github.event.inputs.llama_cpp_commit }}'
+ - uses: nttld/setup-ndk@v1
+ id: setup-ndk
+ with:
+ ndk-version: r26d
+ add-to-path: false
+ - name: Build
+ id: cmake_build
+ env:
+ CMAKE_FLAGS: '-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup-ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-23'
+ run: |
+ mkdir build
+ cd build
+ cmake .. ${{ env.COMMON_DEFINE }} ${{ env.CMAKE_FLAGS }} ${{ matrix.defines }}
+ cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS}
+ - name: Upload Llama
+ uses: actions/upload-artifact@v4
+ with:
+ path: ./build/libllama.so
+ name: llama-bin-android-${{ matrix.build }}
+ - name: Upload Llava
+ uses: actions/upload-artifact@v4
+ with:
+ path: ./build/examples/llava/libllava_shared.so
+ name: llava-bin-android-${{ matrix.build }}
+
build-deps:
runs-on: ubuntu-latest
@@ -321,6 +366,7 @@ jobs:
"compile-linux",
"compile-macos",
"compile-windows",
+ "compile-android",
"compile-cublas",
"compile-clblast"
]
@@ -333,57 +379,65 @@ jobs:
- name: Rearrange Files
run: |
# Make all directories at once
- mkdir --parents deps/{avx,avx2,avx512,osx-arm64,osx-x64,cu11.7.1,cu12.1.0,clblast}
+ mkdir --parents deps/{avx,avx2,avx512,osx-arm64,osx-x64,android-x86,android-x86_64,android-arm64-v8a,cu11.7.1,cu12.1.0,clblast}
- cp artifacts/llama-bin-linux-noavx-x64.so/libllama.so deps/libllama.so
- cp artifacts/llama-bin-linux-avx-x64.so/libllama.so deps/avx/libllama.so
- cp artifacts/llama-bin-linux-avx2-x64.so/libllama.so deps/avx2/libllama.so
- cp artifacts/llama-bin-linux-avx512-x64.so/libllama.so deps/avx512/libllama.so
+ cp artifacts/llama-bin-linux-noavx-x64/libllama.so deps/libllama.so
+ cp artifacts/llama-bin-linux-avx-x64/libllama.so deps/avx/libllama.so
+ cp artifacts/llama-bin-linux-avx2-x64/libllama.so deps/avx2/libllama.so
+ cp artifacts/llama-bin-linux-avx512-x64/libllama.so deps/avx512/libllama.so
- cp artifacts/llama-bin-win-noavx-x64.dll/llama.dll deps/llama.dll
- cp artifacts/llama-bin-win-avx-x64.dll/llama.dll deps/avx/llama.dll
- cp artifacts/llama-bin-win-avx2-x64.dll/llama.dll deps/avx2/llama.dll
- cp artifacts/llama-bin-win-avx512-x64.dll/llama.dll deps/avx512/llama.dll
+ cp artifacts/llama-bin-win-noavx-x64/llama.dll deps/llama.dll
+ cp artifacts/llama-bin-win-avx-x64/llama.dll deps/avx/llama.dll
+ cp artifacts/llama-bin-win-avx2-x64/llama.dll deps/avx2/llama.dll
+ cp artifacts/llama-bin-win-avx512-x64/llama.dll deps/avx512/llama.dll
- cp artifacts/llava-bin-linux-noavx-x64.so/libllava_shared.so deps/libllava_shared.so
- cp artifacts/llava-bin-linux-avx-x64.so/libllava_shared.so deps/avx/libllava_shared.so
- cp artifacts/llava-bin-linux-avx2-x64.so/libllava_shared.so deps/avx2/libllava_shared.so
- cp artifacts/llava-bin-linux-avx512-x64.so/libllava_shared.so deps/avx512/libllava_shared.so
+ cp artifacts/llava-bin-linux-noavx-x64/libllava_shared.so deps/libllava_shared.so
+ cp artifacts/llava-bin-linux-avx-x64/libllava_shared.so deps/avx/libllava_shared.so
+ cp artifacts/llava-bin-linux-avx2-x64/libllava_shared.so deps/avx2/libllava_shared.so
+ cp artifacts/llava-bin-linux-avx512-x64/libllava_shared.so deps/avx512/libllava_shared.so
- cp artifacts/llama-bin-win-noavx-x64.dll/llama.dll deps/libllama.dll
- cp artifacts/llama-bin-win-avx-x64.dll/llama.dll deps/avx/libllama.dll
- cp artifacts/llama-bin-win-avx2-x64.dll/llama.dll deps/avx2/libllama.dll
- cp artifacts/llama-bin-win-avx512-x64.dll/llama.dll deps/avx512/libllama.dll
+ cp artifacts/llama-bin-win-noavx-x64/llama.dll deps/libllama.dll
+ cp artifacts/llama-bin-win-avx-x64/llama.dll deps/avx/libllama.dll
+ cp artifacts/llama-bin-win-avx2-x64/llama.dll deps/avx2/libllama.dll
+ cp artifacts/llama-bin-win-avx512-x64/llama.dll deps/avx512/libllama.dll
- cp artifacts/llava-bin-win-noavx-x64.dll/llava_shared.dll deps/llava_shared.dll
- cp artifacts/llava-bin-win-avx-x64.dll/llava_shared.dll deps/avx/llava_shared.dll
- cp artifacts/llava-bin-win-avx2-x64.dll/llava_shared.dll deps/avx2/llava_shared.dll
- cp artifacts/llava-bin-win-avx512-x64.dll/llava_shared.dll deps/avx512/llava_shared.dll
+ cp artifacts/llava-bin-win-noavx-x64/llava_shared.dll deps/llava_shared.dll
+ cp artifacts/llava-bin-win-avx-x64/llava_shared.dll deps/avx/llava_shared.dll
+ cp artifacts/llava-bin-win-avx2-x64/llava_shared.dll deps/avx2/llava_shared.dll
+ cp artifacts/llava-bin-win-avx512-x64/llava_shared.dll deps/avx512/llava_shared.dll
- cp artifacts/llama-bin-osx-arm64.dylib/libllama.dylib deps/osx-arm64/libllama.dylib
- cp artifacts/llava-bin-osx-arm64.dylib/libllava_shared.dylib deps/osx-arm64/libllava_shared.dylib
- cp artifacts/ggml-metal.metal/ggml-metal.metal deps/osx-arm64/ggml-metal.metal
- cp artifacts/llama-bin-osx-x64.dylib/libllama.dylib deps/osx-x64/libllama.dylib
- cp artifacts/llava-bin-osx-x64.dylib/libllava_shared.dylib deps/osx-x64/libllava_shared.dylib
+ cp artifacts/llama-bin-osx-arm64/libllama.dylib deps/osx-arm64/libllama.dylib
+ cp artifacts/llava-bin-osx-arm64/libllava_shared.dylib deps/osx-arm64/libllava_shared.dylib
+ cp artifacts/ggml-metal/ggml-metal.metal deps/osx-arm64/ggml-metal.metal
+ cp artifacts/llama-bin-osx-x64/libllama.dylib deps/osx-x64/libllama.dylib
+ cp artifacts/llava-bin-osx-x64/libllava_shared.dylib deps/osx-x64/libllava_shared.dylib
- cp artifacts/llama-bin-win-cublas-cu11.7.1-x64.dll/llama.dll deps/cu11.7.1/llama.dll
- cp artifacts/llava-bin-win-cublas-cu11.7.1-x64.dll/llava_shared.dll deps/cu11.7.1/llava_shared.dll
+ cp artifacts/llama-bin-win-cublas-cu11.7.1-x64/llama.dll deps/cu11.7.1/llama.dll
+ cp artifacts/llava-bin-win-cublas-cu11.7.1-x64/llava_shared.dll deps/cu11.7.1/llava_shared.dll
- cp artifacts/llama-bin-linux-cublas-cu11.7.1-x64.so/libllama.so deps/cu11.7.1/libllama.so
- cp artifacts/llava-bin-linux-cublas-cu11.7.1-x64.so/libllava_shared.so deps/cu11.7.1/libllava_shared.so
+ cp artifacts/llama-bin-linux-cublas-cu11.7.1-x64/libllama.so deps/cu11.7.1/libllama.so
+ cp artifacts/llava-bin-linux-cublas-cu11.7.1-x64/libllava_shared.so deps/cu11.7.1/libllava_shared.so
- cp artifacts/llama-bin-win-cublas-cu12.1.0-x64.dll/llama.dll deps/cu12.1.0/llama.dll
- cp artifacts/llava-bin-win-cublas-cu12.1.0-x64.dll/llava_shared.dll deps/cu12.1.0/llava_shared.dll
+ cp artifacts/llama-bin-win-cublas-cu12.1.0-x64/llama.dll deps/cu12.1.0/llama.dll
+ cp artifacts/llava-bin-win-cublas-cu12.1.0-x64/llava_shared.dll deps/cu12.1.0/llava_shared.dll
- cp artifacts/llama-bin-linux-cublas-cu12.1.0-x64.so/libllama.so deps/cu12.1.0/libllama.so
- cp artifacts/llava-bin-linux-cublas-cu12.1.0-x64.so/libllava_shared.so deps/cu12.1.0/libllava_shared.so
+ cp artifacts/llama-bin-linux-cublas-cu12.1.0-x64/libllama.so deps/cu12.1.0/libllama.so
+ cp artifacts/llava-bin-linux-cublas-cu12.1.0-x64/libllava_shared.so deps/cu12.1.0/libllava_shared.so
- cp artifacts/llama-bin-win-clblast-x64.dll/{llama,clblast}.dll deps/clblast/
- cp artifacts/llava-bin-win-clblast-x64.dll/llava_shared.dll deps/clblast/llava_shared.dll
- cp artifacts/llama-bin-linux-clblast-x64.so/libllama.so deps/clblast/
- cp artifacts/llava-bin-linux-clblast-x64.so/libllava_shared.so deps/clblast/libllava_shared.so
+ cp artifacts/llama-bin-win-clblast-x64/{llama,clblast}.dll deps/clblast/
+ cp artifacts/llava-bin-win-clblast-x64/llava_shared.dll deps/clblast/llava_shared.dll
+ cp artifacts/llama-bin-linux-clblast-x64/libllama.so deps/clblast/
+ cp artifacts/llava-bin-linux-clblast-x64/libllava_shared.so deps/clblast/libllava_shared.so
+
+ cp artifacts/llama-bin-android-x86/libllama.so deps/android-x86/libllama.so
+ cp artifacts/llava-bin-android-x86/libllava_shared.so deps/android-x86/libllava_shared.so
+ cp artifacts/llama-bin-android-x86_64/libllama.so deps/android-x86_64/libllama.so
+ cp artifacts/llava-bin-android-x86_64/libllava_shared.so deps/android-x86_64/libllava_shared.so
+
+ cp artifacts/llama-bin-android-arm64-v8a/libllama.so deps/android-arm64-v8a/libllama.so
+ cp artifacts/llava-bin-android-arm64-v8a/libllava_shared.so deps/android-arm64-v8a/libllava_shared.so
- name: Upload artifacts
uses: actions/upload-artifact@v4
diff --git a/LLama/LLamaSharp.Runtime.targets b/LLama/LLamaSharp.Runtime.targets
index fa7a018c1..764d772bc 100644
--- a/LLama/LLamaSharp.Runtime.targets
+++ b/LLama/LLamaSharp.Runtime.targets
@@ -2,133 +2,17 @@
true
-
-
- PreserveNewest
- runtimes/win-x64/native/noavx/llama.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/avx/llama.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/avx2/llama.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/avx512/llama.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/cuda11/llama.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/cuda12/llama.dll
-
+
+
+ libllama.so
+ arm64-v8a
+
-
- PreserveNewest
- runtimes/linux-x64/native/noavx/libllama.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/avx/libllama.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/avx2/libllama.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/avx512/libllama.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/cuda11/libllama.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/cuda12/libllama.so
-
-
-
- PreserveNewest
- runtimes/osx-arm64/native/libllama.dylib
-
-
- PreserveNewest
- runtimes/osx-arm64/native/ggml-metal.metal
-
-
-
- PreserveNewest
- runtimes/osx-x64/native/libllama.dylib
-
-
-
- PreserveNewest
- runtimes/win-x64/native/noavx/llava_shared.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/avx/llava_shared.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/avx2/llava_shared.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/avx512/llava_shared.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/cuda11/llava_shared.dll
-
-
- PreserveNewest
- runtimes/win-x64/native/cuda12/llava_shared.dll
-
-
-
-
- PreserveNewest
- runtimes/linux-x64/native/noavx/libllava_shared.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/avx/libllava_shared.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/avx2/libllava_shared.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/avx512/libllava_shared.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/cuda11/libllava_shared.so
-
-
- PreserveNewest
- runtimes/linux-x64/native/cuda12/libllava_shared.so
-
-
-
- PreserveNewest
- runtimes/osx-arm64/native/libllava_shared.dylib
-
-
-
- PreserveNewest
- runtimes/osx-x64/native/libllava_shared.dylib
-
-
-
+
+ libllava_shared.so
+ arm64-v8a
+
+
\ No newline at end of file
diff --git a/LLama/Native/NativeApi.Load.cs b/LLama/Native/NativeApi.Load.cs
index f1bd765e4..7c32c41ed 100644
--- a/LLama/Native/NativeApi.Load.cs
+++ b/LLama/Native/NativeApi.Load.cs
@@ -1,4 +1,4 @@
-using LLama.Exceptions;
+using LLama.Exceptions;
using System;
using System.IO;
using System.Runtime.InteropServices;
@@ -57,6 +57,11 @@ private static void SetDllImportResolver()
// NativeLibrary is not available on older runtimes. We'll have to depend on
// the normal runtime dll resolution there.
#if NET5_0_OR_GREATER
+
+ // We don't need special dll resolution on Android
+ if (OperatingSystem.IsAndroid())
+ return;
+
NativeLibrary.SetDllImportResolver(typeof(NativeApi).Assembly, (name, _, _) =>
{
if (name == "llama")
diff --git a/LLama/runtimes/build/LLamaSharp.Backend.Android.nuspec b/LLama/runtimes/build/LLamaSharp.Backend.Android.nuspec
new file mode 100644
index 000000000..1e77784f1
--- /dev/null
+++ b/LLama/runtimes/build/LLamaSharp.Backend.Android.nuspec
@@ -0,0 +1,32 @@
+
+
+
+ LLamaSharp.Backend.Android
+ $version$
+ LLamaSharp.Backend.Android - Android Backend for LLamaSharp
+ llama.cpp Authors
+ false
+ MIT
+ icon512.png
+ https://github.com/SciSharp/LLamaSharp
+ LLamaSharp.Backend.Android is a backend for LLamaSharp to use with Android.
+
+ Copyright 2023 The llama.cpp Authors. All rights reserved.
+ LLamaSharp LLama LLM GPT AI ChatBot SciSharp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec b/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec
index 5c439e14b..a120613fd 100644
--- a/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec
+++ b/LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec
@@ -44,7 +44,7 @@
-
+