@@ -11,8 +11,11 @@ set(CMAKE_C_STANDARD 11)
1111# -----------------------------
1212set (LLAMA_DIR ${CMAKE_CURRENT_SOURCE_DIR} /llama.cpp)
1313
14+ set (LLAMA_BACKEND "AUTO" CACHE STRING "llama.cpp backend: AUTO, CPU, GPU, CUDA" )
15+ set_property (CACHE LLAMA_BACKEND PROPERTY STRINGS AUTO CPU GPU CUDA )
16+
1417# -----------------------------
15- # FORCE CPU-only static builds
18+ # FORCE static builds
1619# -----------------------------
1720# Disable all shared libraries globally
1821set (BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE )
@@ -34,16 +37,72 @@ set(GGML_BUILD_SHARED OFF CACHE BOOL "" FORCE)
3437set (GGML_BUILD_TESTS OFF CACHE BOOL "" FORCE )
3538set (GGML_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE )
3639
37- # CPU-only flags
40+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
41+
42+ # -------------------------------
43+ # Define backend options
44+ # -------------------------------
45+ set (LLAMA_BACKEND "AUTO" CACHE STRING "Select llama.cpp backend: AUTO, CPU, GPU, CUDA" )
46+ set_property (CACHE LLAMA_BACKEND PROPERTY STRINGS AUTO CPU GPU CUDA )
47+
48+ #
49+ # sudo apt install nvidia-open cuda-toolkit
50+ #
51+
52+ # -------------------------------
53+ # Disable all accelerators by default
54+ # -------------------------------
3855set (GGML_OPENMP OFF CACHE BOOL "" FORCE )
3956set (GGML_CUDA OFF CACHE BOOL "" FORCE )
4057set (GGML_METAL OFF CACHE BOOL "" FORCE )
4158set (GGML_OPENCL OFF CACHE BOOL "" FORCE )
4259set (GGML_KOMPUTE OFF CACHE BOOL "" FORCE )
4360set (GGML_SYCL OFF CACHE BOOL "" FORCE )
4461set (GGML_ACCELERATE OFF CACHE BOOL "" FORCE )
45- set (GGML_NATIVE ON CACHE BOOL "" FORCE )
46- set (CMAKE_POSITION_INDEPENDENT_CODE ON )
62+ set (GGML_NATIVE OFF CACHE BOOL "" FORCE ) # default off
63+
64+ # -------------------------------
65+ # Configure backends based on LLAMA_BACKEND
66+ # -------------------------------
67+ include (CheckLanguage )
68+
69+ if (LLAMA_BACKEND STREQUAL "CPU" )
70+ message (STATUS "llama.cpp backend: CPU-only" )
71+ set (GGML_NATIVE ON CACHE BOOL "" FORCE ) # enable CPU SIMD optimizations
72+
73+ elseif (LLAMA_BACKEND STREQUAL "GPU" )
74+ message (STATUS "llama.cpp backend: GPU (non-CUDA)" )
75+ set (GGML_OPENMP ON CACHE BOOL "" FORCE ) # parallel CPU fallback
76+ # GPU non-CUDA options can be added here in the future
77+
78+ elseif (LLAMA_BACKEND STREQUAL "CUDA" )
79+ message (STATUS "llama.cpp backend: CUDA" )
80+
81+ check_language (CUDA )
82+ if (CMAKE_CUDA_COMPILER)
83+ enable_language (CUDA )
84+ set (GGML_CUDA ON CACHE BOOL "" FORCE )
85+ else ()
86+ message (FATAL_ERROR "CUDA backend requested but nvcc not found" )
87+ endif ()
88+
89+ elseif (LLAMA_BACKEND STREQUAL "AUTO" )
90+ message (STATUS "llama.cpp backend: AUTO" )
91+
92+ check_language (CUDA )
93+ if (CMAKE_CUDA_COMPILER)
94+ enable_language (CUDA )
95+ set (GGML_CUDA ON CACHE BOOL "" FORCE )
96+ message (STATUS "CUDA detected – enabling GGML_CUDA" )
97+ else ()
98+ set (GGML_OPENMP ON CACHE BOOL "" FORCE )
99+ set (GGML_NATIVE ON CACHE BOOL "" FORCE )
100+ message (STATUS "CUDA not found – using CPU/OpenMP" )
101+ endif ()
102+
103+ else ()
104+ message (FATAL_ERROR "Invalid LLAMA_BACKEND value: ${LLAMA_BACKEND} " )
105+ endif ()
47106
48107# -----------------------------
49108# Add llama.cpp subdirectories
@@ -129,7 +188,7 @@ if (ANDROID)
129188 ../include/hashmap.cpp
130189 ../include/apiexec.cpp
131190 )
132-
191+
133192 # Optional: set the SONAME / versioning if you need it
134193 set_target_properties (llm_android PROPERTIES
135194 OUTPUT_NAME "libllm"
0 commit comments