@@ -154,53 +154,51 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
154154 check_arm_feature(sme "#include <arm_sme.h>\n __arm_locally_streaming int main() { __asm__ volatile(\" smstart; smstop;\" ); return 0; }" )
155155
156156 list (APPEND ARCH_FLAGS "${ARM_MCPU_FLAG}${ARM_MCPU_FLAG_FIX} " )
157- else ()
158- if (GGML_CPU_ARM_ARCH)
159- list (APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH} )
160- elseif (GGML_CPU_ALL_VARIANTS)
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_NOSVE)
194- set (ARCH_TAGS "${ARCH_TAGS} +nosve" )
195- endif ()
196- if (GGML_INTERNAL_SME)
197- set (ARM_MCPU "armv9.2-a" )
198- set (ARCH_TAGS "${ARCH_TAGS} +sme" )
199- list (APPEND ARCH_DEFINITIONS GGML_USE_SME)
200- endif ()
201- list (APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS} " )
202- ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS} )
157+ elseif (GGML_CPU_ARM_ARCH)
158+ list (APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH} )
159+ elseif (GGML_CPU_ALL_VARIANTS)
160+ # Begin with the lowest baseline
161+ set (ARM_MCPU "armv8-a" )
162+ set (ARCH_TAGS "" )
163+ set (ARCH_DEFINITIONS "" )
164+
165+ # When a feature is selected, bump the MCPU to the first
166+ # version that supported it
167+ if (GGML_INTERNAL_DOTPROD)
168+ set (ARM_MCPU "armv8.2-a" )
169+ set (ARCH_TAGS "${ARCH_TAGS} +dotprod" )
170+ list (APPEND ARCH_DEFINITIONS GGML_USE_DOTPROD)
171+ endif ()
172+ if (GGML_INTERNAL_FP16_VECTOR_ARITHMETIC)
173+ set (ARM_MCPU "armv8.2-a" )
174+ set (ARCH_TAGS "${ARCH_TAGS} +fp16" )
175+ list (APPEND ARCH_DEFINITIONS GGML_USE_FP16_VECTOR_ARITHMETIC)
176+ endif ()
177+ if (GGML_INTERNAL_SVE)
178+ set (ARM_MCPU "armv8.2-a" )
179+ set (ARCH_TAGS "${ARCH_TAGS} +sve" )
180+ list (APPEND ARCH_DEFINITIONS GGML_USE_SVE)
181+ endif ()
182+ if (GGML_INTERNAL_MATMUL_INT8)
183+ set (ARM_MCPU "armv8.6-a" )
184+ set (ARCH_TAGS "${ARCH_TAGS} +i8mm" )
185+ list (APPEND ARCH_DEFINITIONS GGML_USE_MATMUL_INT8)
186+ endif ()
187+ if (GGML_INTERNAL_SVE2)
188+ set (ARM_MCPU "armv8.6-a" )
189+ set (ARCH_TAGS "${ARCH_TAGS} +sve2" )
190+ list (APPEND ARCH_DEFINITIONS GGML_USE_SVE2)
191+ endif ()
192+ if (GGML_INTERNAL_NOSVE)
193+ set (ARCH_TAGS "${ARCH_TAGS} +nosve" )
194+ endif ()
195+ if (GGML_INTERNAL_SME)
196+ set (ARM_MCPU "armv9.2-a" )
197+ set (ARCH_TAGS "${ARCH_TAGS} +sme" )
198+ list (APPEND ARCH_DEFINITIONS GGML_USE_SME)
203199 endif ()
200+ list (APPEND ARCH_FLAGS "-march=${ARM_MCPU}${ARCH_TAGS} " )
201+ ggml_add_cpu_backend_features(${GGML_CPU_NAME} arm ${ARCH_DEFINITIONS} )
204202 endif ()
205203
206204 # show enabled features
0 commit comments