1cmake_minimum_required(VERSION 3.31.6)
2
3project("ai-chat" VERSION 1.0.0 LANGUAGES C CXX)
4
5set(CMAKE_C_STANDARD 11)
6set(CMAKE_C_STANDARD_REQUIRED true)
7
8set(CMAKE_CXX_STANDARD 17)
9set(CMAKE_CXX_STANDARD_REQUIRED true)
10
11set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "" FORCE)
12set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "" FORCE)
13
14# --------------------------------------------------------------------------
15# AI Chat library
16# --------------------------------------------------------------------------
17
18if(DEFINED ANDROID_ABI)
19 message(STATUS "Detected Android ABI: ${ANDROID_ABI}")
20 if(ANDROID_ABI STREQUAL "arm64-v8a")
21 set(GGML_SYSTEM_ARCH "ARM")
22 set(GGML_CPU_KLEIDIAI ON)
23 set(GGML_OPENMP ON)
24 elseif(ANDROID_ABI STREQUAL "x86_64")
25 set(GGML_SYSTEM_ARCH "x86")
26 set(GGML_CPU_KLEIDIAI OFF)
27 set(GGML_OPENMP OFF)
28 else()
29 message(FATAL_ERROR "Unsupported ABI: ${ANDROID_ABI}")
30 endif()
31endif()
32
33set(LLAMA_SRC ${CMAKE_CURRENT_LIST_DIR}/../../../../../../)
34add_subdirectory(${LLAMA_SRC} build-llama)
35
36add_library(${CMAKE_PROJECT_NAME} SHARED
37 ai_chat.cpp)
38
39target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
40 GGML_SYSTEM_ARCH=${GGML_SYSTEM_ARCH}
41 GGML_CPU_KLEIDIAI=$<BOOL:${GGML_CPU_KLEIDIAI}>
42 GGML_OPENMP=$<BOOL:${GGML_OPENMP}>
43)
44
45target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE
46 ${LLAMA_SRC}
47 ${LLAMA_SRC}/common
48 ${LLAMA_SRC}/include
49 ${LLAMA_SRC}/ggml/include
50 ${LLAMA_SRC}/ggml/src)
51
52target_link_libraries(${CMAKE_PROJECT_NAME}
53 llama
54 common
55 android
56 log)