Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/scripts/build_openssl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ get_android_toolchain() {
local api_level=$2

case $arch in
android-arm64)
android-arm64|android-arm64-vulkan)
export ANDROID_ARCH="aarch64"
export ANDROID_EABI="aarch64-linux-android"
export OPENSSL_ARCH="android-arm64"
Expand Down Expand Up @@ -157,7 +157,7 @@ main() {
mkdir -p $WORK_DIR $INSTALL_DIR/$arch

case $arch in
android-arm64)
android-arm64|android-arm64-vulkan)
build_openssl_android $arch
;;
android-x64)
Expand Down
26 changes: 25 additions & 1 deletion .github/workflows/build_library.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ jobs:
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list
sudo apt-get update -y
sudo apt-get install -y build-essential vulkan-sdk

- id: copy_vulkan_linux
if: contains(matrix.arch, 'vulkan')
name: Copy Vulcan
run: |
cp /lib/x86_64-linux-gnu/libvulkan.so.1 build/libs/

- id: setup_cuda_linux
Expand Down Expand Up @@ -540,6 +545,8 @@ jobs:
ABI: arm64-v8a
- arch: android-x64
ABI: x86_64
- arch: android-arm64-vulkan
ABI: arm64-v8a

steps:
- id: setup_libs_linux
Expand All @@ -561,6 +568,23 @@ jobs:
echo "CMAKE_VARS=-DARCHITECTURE=${{ matrix.arch }} -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${{ github.workspace }}/build/libs -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${{ github.workspace }}/build/libs -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${{ github.workspace }}/build/libs ${{ matrix.cmake_vars }}" >> $GITHUB_ENV
shell: bash

- id: setup_vulkan_linux
if: contains(matrix.arch, 'vulkan')
name: Dependencies Vulcan
run: |
wget -qO - https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list
sudo apt-get update -y
sudo apt-get install -y build-essential vulkan-sdk

- id: setup_vulcan_android
if: contains(matrix.arch, 'vulkan')
name: Install Vulkan headers
run: |
git submodule add https://github.com/KhronosGroup/Vulkan-Headers.git third_party/Vulkan-Headers
cd third_party/Vulkan-Headers
git checkout v1.3.275


- id: cpu-cores
name: Get number of CPU cores
Expand All @@ -577,7 +601,7 @@ jobs:
export LD_LIBRARY_PATH=""
export NDK=`ls -d /usr/local/lib/android/sdk/ndk/27.*`
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-23 -DANDROID_ABI=${{ matrix.ABI }} ${{ env.CMAKE_VARS }}
cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-29 -DANDROID_ABI=${{ matrix.ABI }} ${{ env.CMAKE_VARS }}
cmake --build . --config Release -j ${{ steps.cpu-cores.outputs.count }}


Expand Down
15 changes: 14 additions & 1 deletion .github/workflows_template/build_library_steps.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ jobs:
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list https://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list
sudo apt-get update -y
sudo apt-get install -y build-essential vulkan-sdk

- name: Copy Vulcan
id: copy_vulkan_linux
if: contains(matrix.arch, 'vulkan')
run: |
cp /lib/x86_64-linux-gnu/libvulkan.so.1 build/libs/

- uses: Jimver/cuda-toolkit@v0.2.15
Expand Down Expand Up @@ -242,13 +247,21 @@ jobs:

################################ Android ################################

- name: Install Vulkan headers
id: setup_vulcan_android
if: contains(matrix.arch, 'vulkan')
run: |
git submodule add https://github.com/KhronosGroup/Vulkan-Headers.git third_party/Vulkan-Headers
cd third_party/Vulkan-Headers
git checkout v1.3.275

- name: Build
id: cmake_build_android
run: |
export LD_LIBRARY_PATH=""
export NDK=`ls -d /usr/local/lib/android/sdk/ndk/27.*`
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-23 -DANDROID_ABI=${{ matrix.ABI }} ${{ env.CMAKE_VARS }}
cmake .. -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-29 -DANDROID_ABI=${{ matrix.ABI }} ${{ env.CMAKE_VARS }}
cmake --build . --config Release -j ${{ steps.cpu-cores.outputs.count }}

################################ iOS ################################
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows_template/build_library_template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ jobs:
@@checkout@@
@@preparation@@
@@setup_vulkan_linux@@
@@copy_vulkan_linux@@
@@setup_cuda_linux@@
@@link_cuda_linux@@

Expand Down Expand Up @@ -146,11 +147,15 @@ jobs:
ABI: arm64-v8a
- arch: android-x64
ABI: x86_64
- arch: android-arm64-vulkan
ABI: arm64-v8a

steps:
@@setup_libs_linux@@
@@checkout@@
@@preparation@@
@@setup_vulkan_linux@@
@@setup_vulcan_android@@

@@cpu-cores@@
@@build_openssl@@
Expand Down
36 changes: 36 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,42 @@ endif()

set(LLAMA_CPP_ROOT ${CMAKE_SOURCE_DIR}/third_party/llama.cpp)

if(ARCHITECTURE MATCHES "android" AND ARCHITECTURE MATCHES "vulkan")
# Derive triple from ANDROID_ABI
if(ANDROID_ABI STREQUAL "arm64-v8a")
set(ANDROID_ARCH_TRIPLE "aarch64-linux-android")
elseif(ANDROID_ABI STREQUAL "armeabi-v7a")
set(ANDROID_ARCH_TRIPLE "arm-linux-androideabi")
elseif(ANDROID_ABI STREQUAL "x86_64")
set(ANDROID_ARCH_TRIPLE "x86_64-linux-android")
elseif(ANDROID_ABI STREQUAL "x86")
set(ANDROID_ARCH_TRIPLE "i686-linux-android")
else()
message(FATAL_ERROR "Unknown ANDROID_ABI: ${ANDROID_ABI}")
endif()

message(STATUS "ANDROID_ABI=${ANDROID_ABI}")
message(STATUS "ANDROID_ARCH_TRIPLE=${ANDROID_ARCH_TRIPLE}")
message(STATUS "CMAKE_SYSROOT=${CMAKE_SYSROOT}")

string(REGEX REPLACE "android-" "" ANDROID_API_LEVEL "${ANDROID_PLATFORM}")
set(Vulkan_LIBRARY "${CMAKE_SYSROOT}/usr/lib/${ANDROID_ARCH_TRIPLE}/${ANDROID_API_LEVEL}/libvulkan.so")
set(Vulkan_FOUND TRUE)
set(Vulkan_VERSION "1.3.275")
set(Vulkan_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/third_party/Vulkan-Headers/include")

if(NOT EXISTS "${Vulkan_LIBRARY}")
message(FATAL_ERROR "Vulkan stub not found at: ${Vulkan_LIBRARY}")
endif()

find_program(Vulkan_GLSLC_EXECUTABLE
NAMES glslc
PATHS "/usr/bin" "/usr/local/bin"
NO_CMAKE_SYSTEM_PATH)
set(Vulkan_GLSLC_EXECUTABLE "${Vulkan_GLSLC_EXECUTABLE}" CACHE FILEPATH "" FORCE)
endif()


function(LLAMALIB_COMPILE_DEFS NAME)
add_compile_definitions(${NAME} PRIVATE UNDREAMAI_EXPORTS)
target_include_directories(${NAME} PRIVATE "${CMAKE_SOURCE_DIR}/include")
Expand Down
3 changes: 3 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ add_library(
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_link_options(${LLAMALIB_ARCHITECTURE_LIBRARY} PRIVATE -Wl,--no-undefined)
endif()
if(ARCHITECTURE MATCHES "android" AND ARCHITECTURE MATCHES "vulkan")
target_link_libraries(${LLAMALIB_ARCHITECTURE_LIBRARY} PRIVATE "${Vulkan_LIBRARY}")
endif()
LLAMALIB_COMPILE_DEFS(${LLAMALIB_ARCHITECTURE_LIBRARY})
target_include_directories(${LLAMALIB_ARCHITECTURE_LIBRARY} PRIVATE "${LLAMA_CPP_ROOT}/src" "${LLAMA_CPP_ROOT}/ggml/include" "${LLAMA_CPP_ROOT}/tools/server" "${LLAMA_CPP_ROOT}/tools/mtmd" "${LLAMA_CPP_ROOT}/common")
target_link_libraries(${LLAMALIB_ARCHITECTURE_LIBRARY} PRIVATE common mtmd)
Expand Down
9 changes: 6 additions & 3 deletions third_party/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ elseif(ARCHITECTURE MATCHES "avx2")
# Nothing to define
elseif(ARCHITECTURE MATCHES "avx")
SET(GGML_AVX2 OFF)
elseif(ARCHITECTURE MATCHES "vulkan")
SET(GGML_VULKAN ON)
elseif(ARCHITECTURE MATCHES "tinyblas")
SET(GGML_CUDA ON)
set(GGML_CUDA_FA OFF)
Expand Down Expand Up @@ -63,6 +61,11 @@ elseif(ARCHITECTURE MATCHES "android")
else()
add_compile_options("-march=x86-64")
endif()
if(ARCHITECTURE MATCHES "vulkan")
SET(GGML_VULKAN ON)
endif()
elseif(ARCHITECTURE MATCHES "vulkan")
SET(GGML_VULKAN ON)
elseif(ARCHITECTURE MATCHES "ios" OR ARCHITECTURE MATCHES "visionos")
SET(GGML_METAL_EMBED_LIBRARY ON)
elseif(ARCHITECTURE STREQUAL "")
Expand Down Expand Up @@ -167,4 +170,4 @@ if(ARCHITECTURE MATCHES "tinyblas")
target_compile_definitions(${target} PUBLIC GGML_USE_TINYBLAS GGML_CUDA_NO_FA GGML_CUDA_NO_IQUANTS)
endif()
endforeach()
endif()
endif()