Skip to content

Commit 3ba0d84

Browse files
authored
ggml: Add Android support for GGML_CPU_ALL_VARIANTS (#14206)
1 parent 0bf49eb commit 3ba0d84

File tree

2 files changed

+60
-53
lines changed

2 files changed

+60
-53
lines changed

ggml/src/CMakeLists.txt

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -311,18 +311,28 @@ if (GGML_CPU_ALL_VARIANTS)
311311
# MSVC doesn't support AMX
312312
ggml_add_cpu_backend_variant(sapphirerapids SSE42 AVX F16C AVX2 BMI2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8)
313313
endif()
314-
elseif(GGML_SYSTEM_ARCH STREQUAL "ARM" AND CMAKE_SYSTEM_NAME MATCHES "Linux")
315-
# Many of these features are optional so we build versions with popular
316-
# combinations and name the backends based on the version they were
317-
# first released with
318-
ggml_add_cpu_backend_variant(armv8.0_1)
319-
ggml_add_cpu_backend_variant(armv8.2_1 DOTPROD)
320-
ggml_add_cpu_backend_variant(armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC)
321-
ggml_add_cpu_backend_variant(armv8.2_3 DOTPROD FP16_VECTOR_ARITHMETIC SVE)
322-
ggml_add_cpu_backend_variant(armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8)
323-
ggml_add_cpu_backend_variant(armv8.6_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2)
324-
ggml_add_cpu_backend_variant(armv9.2_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME)
325-
ggml_add_cpu_backend_variant(armv9.2_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME)
314+
elseif(GGML_SYSTEM_ARCH STREQUAL "ARM")
315+
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
316+
# Many of these features are optional so we build versions with popular
317+
# combinations and name the backends based on the version they were
318+
# first released with
319+
ggml_add_cpu_backend_variant(armv8.0_1)
320+
ggml_add_cpu_backend_variant(armv8.2_1 DOTPROD)
321+
ggml_add_cpu_backend_variant(armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC)
322+
ggml_add_cpu_backend_variant(armv8.2_3 DOTPROD FP16_VECTOR_ARITHMETIC SVE)
323+
ggml_add_cpu_backend_variant(armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8)
324+
ggml_add_cpu_backend_variant(armv8.6_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2)
325+
ggml_add_cpu_backend_variant(armv9.2_1 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME)
326+
ggml_add_cpu_backend_variant(armv9.2_2 DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME)
327+
elseif (CMAKE_SYSTEM_NAME MATCHES "Android")
328+
# Android-specific backends with SoC-compatible feature sets
329+
ggml_add_cpu_backend_variant(android_armv8.0_1)
330+
ggml_add_cpu_backend_variant(android_armv8.2_1 DOTPROD)
331+
ggml_add_cpu_backend_variant(android_armv8.2_2 DOTPROD FP16_VECTOR_ARITHMETIC)
332+
ggml_add_cpu_backend_variant(android_armv8.6_1 DOTPROD FP16_VECTOR_ARITHMETIC MATMUL_INT8)
333+
else()
334+
message(FATAL_ERROR "Unsupported ARM target OS: ${CMAKE_SYSTEM_NAME}")
335+
endif()
326336
else()
327337
message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}")
328338
endif()

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -158,48 +158,45 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
158158
if (GGML_CPU_ARM_ARCH)
159159
list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH})
160160
elseif(GGML_CPU_ALL_VARIANTS)
161-
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
162-
# Begin with the lowest baseline
163-
set(ARM_MCPU "armv8-a")
164-
set(ARCH_TAGS "")
165-
set(ARCH_DEFINITIONS "")
166-
167-
# When a feature is selected, bump the MCPU to the first
168-
# version that supported it
169-
if (GGML_INTERNAL_DOTPROD)
170-
set(ARM_MCPU "armv8.2-a")
171-
set(ARCH_TAGS "${ARCH_TAGS}+dotprod")
172-
list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD)
173-
endif()
174-
if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC)
175-
set(ARM_MCPU "armv8.2-a")
176-
set(ARCH_TAGS "${ARCH_TAGS}+fp16")
177-
list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC)
178-
endif()
179-
if (GGML_INTERNAL_SVE)
180-
set(ARM_MCPU "armv8.2-a")
181-
set(ARCH_TAGS "${ARCH_TAGS}+sve")
182-
list(APPEND ARCH_DEFINITIONS GGML_USE_SVE)
183-
endif()
184-
if (GGML_INTERNAL_MATMUL_INT8)
185-
set(ARM_MCPU "armv8.6-a")
186-
set(ARCH_TAGS "${ARCH_TAGS}+i8mm")
187-
list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8)
188-
endif()
189-
if (GGML_INTERNAL_SVE2)
190-
set(ARM_MCPU "armv8.6-a")
191-
set(ARCH_TAGS "${ARCH_TAGS}+sve2")
192-
list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2)
193-
endif()
194-
if (GGML_INTERNAL_SME)
195-
set(ARM_MCPU "armv9.2-a")
196-
set(ARCH_TAGS "${ARCH_TAGS}+sme")
197-
list(APPEND ARCH_DEFINITIONS GGML_USE_SME)
198-
endif()
199-
200-
list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}")
201-
ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS})
161+
# Begin with the lowest baseline
162+
set(ARM_MCPU "armv8-a")
163+
set(ARCH_TAGS "")
164+
set(ARCH_DEFINITIONS "")
165+
166+
# When a feature is selected, bump the MCPU to the first
167+
# version that supported it
168+
if (GGML_INTERNAL_DOTPROD)
169+
set(ARM_MCPU "armv8.2-a")
170+
set(ARCH_TAGS "${ARCH_TAGS}+dotprod")
171+
list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD)
172+
endif()
173+
if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC)
174+
set(ARM_MCPU "armv8.2-a")
175+
set(ARCH_TAGS "${ARCH_TAGS}+fp16")
176+
list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC)
177+
endif()
178+
if (GGML_INTERNAL_SVE)
179+
set(ARM_MCPU "armv8.2-a")
180+
set(ARCH_TAGS "${ARCH_TAGS}+sve")
181+
list(APPEND ARCH_DEFINITIONS GGML_USE_SVE)
182+
endif()
183+
if (GGML_INTERNAL_MATMUL_INT8)
184+
set(ARM_MCPU "armv8.6-a")
185+
set(ARCH_TAGS "${ARCH_TAGS}+i8mm")
186+
list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8)
187+
endif()
188+
if (GGML_INTERNAL_SVE2)
189+
set(ARM_MCPU "armv8.6-a")
190+
set(ARCH_TAGS "${ARCH_TAGS}+sve2")
191+
list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2)
192+
endif()
193+
if (GGML_INTERNAL_SME)
194+
set(ARM_MCPU "armv9.2-a")
195+
set(ARCH_TAGS "${ARCH_TAGS}+sme")
196+
list(APPEND ARCH_DEFINITIONS GGML_USE_SME)
202197
endif()
198+
list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}")
199+
ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS})
203200
endif()
204201
endif()
205202

0 commit comments

Comments
 (0)