mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +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 | ||||
|             ggml_add_cpu_backend_variant(sapphirerapids SSE42 AVX F16C AVX2 BMI2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8) | ||||
|         endif() | ||||
|     elseif(GGML_SYSTEM_ARCH STREQUAL "ARM" AND CMAKE_SYSTEM_NAME MATCHES "Linux") | ||||
|         # Many of these features are optional so we build versions with popular | ||||
|         # combinations and name the backends based on the version they were | ||||
|         # first released with | ||||
|         ggml_add_cpu_backend_variant(armv8.0_1) | ||||
|         ggml_add_cpu_backend_variant(armv8.2_1    DOTPROD) | ||||
|         ggml_add_cpu_backend_variant(armv8.2_2    DOTPROD FP16_VECTOR_ARITHMETIC) | ||||
|         ggml_add_cpu_backend_variant(armv8.2_3    DOTPROD FP16_VECTOR_ARITHMETIC SVE) | ||||
|         ggml_add_cpu_backend_variant(armv8.6_1    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) | ||||
|         ggml_add_cpu_backend_variant(armv8.6_2    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) | ||||
|         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(GGML_SYSTEM_ARCH STREQUAL "ARM") | ||||
|         if (CMAKE_SYSTEM_NAME MATCHES "Linux") | ||||
|             # Many of these features are optional so we build versions with popular | ||||
|             # combinations and name the backends based on the version they were | ||||
|             # first released with | ||||
|             ggml_add_cpu_backend_variant(armv8.0_1) | ||||
|             ggml_add_cpu_backend_variant(armv8.2_1    DOTPROD) | ||||
|             ggml_add_cpu_backend_variant(armv8.2_2    DOTPROD FP16_VECTOR_ARITHMETIC) | ||||
|             ggml_add_cpu_backend_variant(armv8.2_3    DOTPROD FP16_VECTOR_ARITHMETIC SVE) | ||||
|             ggml_add_cpu_backend_variant(armv8.6_1    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8) | ||||
|             ggml_add_cpu_backend_variant(armv8.6_2    DOTPROD FP16_VECTOR_ARITHMETIC SVE MATMUL_INT8 SVE2) | ||||
|             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() | ||||
|         message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS not yet supported with ${GGML_SYSTEM_ARCH} on ${CMAKE_SYSTEM_NAME}") | ||||
|     endif() | ||||
|   | ||||
| @@ -158,48 +158,45 @@ function(ggml_add_cpu_backend_variant_impl tag_name) | ||||
|                 if (GGML_CPU_ARM_ARCH) | ||||
|                     list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH}) | ||||
|                 elseif(GGML_CPU_ALL_VARIANTS) | ||||
|                     if (CMAKE_SYSTEM_NAME MATCHES "Linux") | ||||
|                         # Begin with the lowest baseline | ||||
|                         set(ARM_MCPU "armv8-a") | ||||
|                         set(ARCH_TAGS "") | ||||
|                         set(ARCH_DEFINITIONS "") | ||||
|                     # Begin with the lowest baseline | ||||
|                     set(ARM_MCPU "armv8-a") | ||||
|                     set(ARCH_TAGS "") | ||||
|                     set(ARCH_DEFINITIONS "") | ||||
|  | ||||
|                         # When a feature is selected, bump the MCPU to the first | ||||
|                         # version that supported it | ||||
|                         if (GGML_INTERNAL_DOTPROD) | ||||
|                             set(ARM_MCPU "armv8.2-a") | ||||
|                             set(ARCH_TAGS "${ARCH_TAGS}+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}) | ||||
|                     # When a feature is selected, bump the MCPU to the first | ||||
|                     # version that supported it | ||||
|                     if (GGML_INTERNAL_DOTPROD) | ||||
|                         set(ARM_MCPU "armv8.2-a") | ||||
|                         set(ARCH_TAGS "${ARCH_TAGS}+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() | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Charles Xu
					Charles Xu