mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-29 08:41:22 +00:00 
			
		
		
		
	ggml: Add Android support for GGML_CPU_ALL_VARIANTS (#14206)
This commit is contained in:
		| @@ -311,18 +311,28 @@ if (GGML_CPU_ALL_VARIANTS) | |||||||
|             # MSVC doesn't support AMX |             # MSVC doesn't support AMX | ||||||
|             ggml_add_cpu_backend_variant(sapphirerapids SSE42 AVX F16C AVX2 BMI2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8) |             ggml_add_cpu_backend_variant(sapphirerapids SSE42 AVX F16C AVX2 BMI2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8) | ||||||
|         endif() |         endif() | ||||||
|     elseif(GGML_SYSTEM_ARCH STREQUAL "ARM" AND CMAKE_SYSTEM_NAME MATCHES "Linux") |     elseif(GGML_SYSTEM_ARCH STREQUAL "ARM") | ||||||
|         # Many of these features are optional so we build versions with popular |         if (CMAKE_SYSTEM_NAME MATCHES "Linux") | ||||||
|         # combinations and name the backends based on the version they were |             # Many of these features are optional so we build versions with popular | ||||||
|         # first released with |             # combinations and name the backends based on the version they were | ||||||
|         ggml_add_cpu_backend_variant(armv8.0_1) |             # first released with | ||||||
|         ggml_add_cpu_backend_variant(armv8.2_1    DOTPROD) |             ggml_add_cpu_backend_variant(armv8.0_1) | ||||||
|         ggml_add_cpu_backend_variant(armv8.2_2    DOTPROD FP16_VECTOR_ARITHMETIC) |             ggml_add_cpu_backend_variant(armv8.2_1    DOTPROD) | ||||||
|         ggml_add_cpu_backend_variant(armv8.2_3    DOTPROD FP16_VECTOR_ARITHMETIC SVE) |             ggml_add_cpu_backend_variant(armv8.2_2    DOTPROD FP16_VECTOR_ARITHMETIC) | ||||||
|         ggml_add_cpu_backend_variant(armv8.6_1    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) |             ggml_add_cpu_backend_variant(armv8.2_3    DOTPROD FP16_VECTOR_ARITHMETIC SVE) | ||||||
|         ggml_add_cpu_backend_variant(armv8.6_2    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) |             ggml_add_cpu_backend_variant(armv8.6_1    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) | ||||||
|         ggml_add_cpu_backend_variant(armv9.2_1    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME) |             ggml_add_cpu_backend_variant(armv8.6_2    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) | ||||||
|         ggml_add_cpu_backend_variant(armv9.2_2    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME) |             ggml_add_cpu_backend_variant(armv9.2_1    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SME) | ||||||
|  |             ggml_add_cpu_backend_variant(armv9.2_2    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2 SME) | ||||||
|  |         elseif (CMAKE_SYSTEM_NAME MATCHES "Android") | ||||||
|  |             # Android-specific backends with SoC-compatible feature sets | ||||||
|  |             ggml_add_cpu_backend_variant(android_armv8.0_1) | ||||||
|  |             ggml_add_cpu_backend_variant(android_armv8.2_1    DOTPROD) | ||||||
|  |             ggml_add_cpu_backend_variant(android_armv8.2_2    DOTPROD FP16_VECTOR_ARITHMETIC) | ||||||
|  |             ggml_add_cpu_backend_variant(android_armv8.6_1    DOTPROD FP16_VECTOR_ARITHMETIC MATMUL_INT8) | ||||||
|  |         else() | ||||||
|  |             message(FATAL_ERROR "Unsupported ARM target OS: ${CMAKE_SYSTEM_NAME}") | ||||||
|  |         endif() | ||||||
|     else() |     else() | ||||||
|         message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") |         message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") | ||||||
|     endif() |     endif() | ||||||
|   | |||||||
| @@ -158,48 +158,45 @@ function(ggml_add_cpu_backend_variant_impl tag_name) | |||||||
|                 if (GGML_CPU_ARM_ARCH) |                 if (GGML_CPU_ARM_ARCH) | ||||||
|                     list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH}) |                     list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH}) | ||||||
|                 elseif(GGML_CPU_ALL_VARIANTS) |                 elseif(GGML_CPU_ALL_VARIANTS) | ||||||
|                     if (CMAKE_SYSTEM_NAME MATCHES "Linux") |                     # Begin with the lowest baseline | ||||||
|                         # Begin with the lowest baseline |                     set(ARM_MCPU "armv8-a") | ||||||
|                         set(ARM_MCPU "armv8-a") |                     set(ARCH_TAGS "") | ||||||
|                         set(ARCH_TAGS "") |                     set(ARCH_DEFINITIONS "") | ||||||
|                         set(ARCH_DEFINITIONS "") |  | ||||||
|  |  | ||||||
|                         # When a feature is selected, bump the MCPU to the first |                     # When a feature is selected, bump the MCPU to the first | ||||||
|                         # version that supported it |                     # version that supported it | ||||||
|                         if (GGML_INTERNAL_DOTPROD) |                     if (GGML_INTERNAL_DOTPROD) | ||||||
|                             set(ARM_MCPU "armv8.2-a") |                         set(ARM_MCPU "armv8.2-a") | ||||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+dotprod") |                         set(ARCH_TAGS "${ARCH_TAGS}+dotprod") | ||||||
|                             list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD) |                         list(APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD) | ||||||
|                         endif() |  | ||||||
|                         if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC) |  | ||||||
|                             set(ARM_MCPU "armv8.2-a") |  | ||||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+fp16") |  | ||||||
|                             list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC) |  | ||||||
|                         endif() |  | ||||||
|                         if (GGML_INTERNAL_SVE) |  | ||||||
|                             set(ARM_MCPU "armv8.2-a") |  | ||||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+sve") |  | ||||||
|                             list(APPEND ARCH_DEFINITIONS GGML_USE_SVE) |  | ||||||
|                         endif() |  | ||||||
|                         if (GGML_INTERNAL_MATMUL_INT8) |  | ||||||
|                             set(ARM_MCPU "armv8.6-a") |  | ||||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+i8mm") |  | ||||||
|                             list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8) |  | ||||||
|                         endif() |  | ||||||
|                         if (GGML_INTERNAL_SVE2) |  | ||||||
|                             set(ARM_MCPU "armv8.6-a") |  | ||||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+sve2") |  | ||||||
|                             list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2) |  | ||||||
|                         endif() |  | ||||||
|                         if (GGML_INTERNAL_SME) |  | ||||||
|                             set(ARM_MCPU "armv9.2-a") |  | ||||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+sme") |  | ||||||
|                             list(APPEND ARCH_DEFINITIONS GGML_USE_SME) |  | ||||||
|                         endif() |  | ||||||
|  |  | ||||||
|                         list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}") |  | ||||||
|                         ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) |  | ||||||
|                     endif() |                     endif() | ||||||
|  |                     if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC) | ||||||
|  |                         set(ARM_MCPU "armv8.2-a") | ||||||
|  |                         set(ARCH_TAGS "${ARCH_TAGS}+fp16") | ||||||
|  |                         list(APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC) | ||||||
|  |                     endif() | ||||||
|  |                     if (GGML_INTERNAL_SVE) | ||||||
|  |                         set(ARM_MCPU "armv8.2-a") | ||||||
|  |                         set(ARCH_TAGS "${ARCH_TAGS}+sve") | ||||||
|  |                         list(APPEND ARCH_DEFINITIONS GGML_USE_SVE) | ||||||
|  |                     endif() | ||||||
|  |                     if (GGML_INTERNAL_MATMUL_INT8) | ||||||
|  |                         set(ARM_MCPU "armv8.6-a") | ||||||
|  |                         set(ARCH_TAGS "${ARCH_TAGS}+i8mm") | ||||||
|  |                         list(APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8) | ||||||
|  |                     endif() | ||||||
|  |                     if (GGML_INTERNAL_SVE2) | ||||||
|  |                         set(ARM_MCPU "armv8.6-a") | ||||||
|  |                         set(ARCH_TAGS "${ARCH_TAGS}+sve2") | ||||||
|  |                         list(APPEND ARCH_DEFINITIONS GGML_USE_SVE2) | ||||||
|  |                     endif() | ||||||
|  |                     if (GGML_INTERNAL_SME) | ||||||
|  |                         set(ARM_MCPU "armv9.2-a") | ||||||
|  |                         set(ARCH_TAGS "${ARCH_TAGS}+sme") | ||||||
|  |                         list(APPEND ARCH_DEFINITIONS GGML_USE_SME) | ||||||
|  |                     endif() | ||||||
|  |                     list(APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS}") | ||||||
|  |                     ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS}) | ||||||
|                 endif() |                 endif() | ||||||
|             endif() |             endif() | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Charles Xu
					Charles Xu