# 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()
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 "")
-
- # 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})
+ # 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})
endif()
endif()