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)