@@ -126,25 +126,36 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
126126                )
127127                if  (NOT  ARM_MCPU_RESULT)
128128                    string (REGEX  MATCH "-mcpu=[^ ']+"  ARM_MCPU_FLAG "${ARM_MCPU} " )
129+                     string (REGEX  MATCH "-march=[^ ']+"  ARM_MARCH_FLAG "${ARM_MCPU} " )
130+ 
131+                     # on some old GCC we need to read -march= 
132+                     if  (ARM_MARCH_FLAG AND  NOT  "${ARM_MARCH_FLAG} "  STREQUAL  "-march=native" )
133+                         set (ARM_NATIVE_FLAG "${ARM_MARCH_FLAG} " )
134+                     elseif (ARM_MCPU_FLAG AND  NOT  "${ARM_MCPU_FLAG} "  STREQUAL  "-mcpu=native" )
135+                         set (ARM_NATIVE_FLAG "${ARM_MCPU_FLAG} " )
136+                     endif ()
129137                endif ()
130-                 if  ("${ARM_MCPU_FLAG} "  STREQUAL  "" )
131-                     set (ARM_MCPU_FLAG -mcpu=native)
132-                     message (STATUS  "ARM -mcpu not found, -mcpu=native will be used" )
138+ 
139+                 if  ("${ARM_NATIVE_FLAG} "  STREQUAL  "" )
140+                     set (ARM_NATIVE_FLAG -mcpu=native)
141+                     message (WARNING "ARM -march/-mcpu not found, -mcpu=native will be used" )
142+                 else ()
143+                     message (STATUS  "ARM detected flags: ${ARM_NATIVE_FLAG} " )
133144                endif ()
134145
135146                include (CheckCXXSourceRuns)
136147
137148                function (check_arm_feature tag code)
138149                    set (CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS} )
139-                     set (CMAKE_REQUIRED_FLAGS "${ARM_MCPU_FLAG } +${tag} " )
150+                     set (CMAKE_REQUIRED_FLAGS "${ARM_NATIVE_FLAG } +${tag} " )
140151                    check_cxx_source_runs("${code} "  GGML_MACHINE_SUPPORTS_${tag} )
141152                    if  (GGML_MACHINE_SUPPORTS_${tag} )
142-                         set (ARM_MCPU_FLAG_FIX  "${ARM_MCPU_FLAG_FIX } +${tag} "  PARENT_SCOPE)
153+                         set (ARM_NATIVE_FLAG_FIX  "${ARM_NATIVE_FLAG_FIX } +${tag} "  PARENT_SCOPE)
143154                    else ()
144-                         set (CMAKE_REQUIRED_FLAGS "${ARM_MCPU_FLAG } +no${tag} " )
155+                         set (CMAKE_REQUIRED_FLAGS "${ARM_NATIVE_FLAG } +no${tag} " )
145156                        check_cxx_source_compiles("int main() { return 0; }"  GGML_MACHINE_SUPPORTS_no${tag} )
146157                        if  (GGML_MACHINE_SUPPORTS_no${tag} )
147-                             set (ARM_MCPU_FLAG_FIX  "${ARM_MCPU_FLAG_FIX } +no${tag} "  PARENT_SCOPE)
158+                             set (ARM_NATIVE_FLAG_FIX  "${ARM_NATIVE_FLAG_FIX } +no${tag} "  PARENT_SCOPE)
148159                        endif ()
149160                    endif ()
150161                    set (CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE} )
@@ -155,7 +166,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
155166                check_arm_feature(sve     "#include <arm_sve.h>\n int main()  { svfloat32_t _a, _b; volatile svfloat32_t _c = svadd_f32_z(svptrue_b8(), _a, _b); return 0; }" )
156167                check_arm_feature(sme     "#include <arm_sme.h>\n __arm_locally_streaming int main() { __asm__ volatile(\" smstart; smstop;\" ); return 0; }" )
157168
158-                 list (APPEND  ARCH_FLAGS "${ARM_MCPU_FLAG }${ARM_MCPU_FLAG_FIX } " )
169+                 list (APPEND  ARCH_FLAGS "${ARM_NATIVE_FLAG }${ARM_NATIVE_FLAG_FIX } " )
159170            else ()
160171                if  (GGML_CPU_ARM_ARCH)
161172                    list (APPEND  ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH} )
0 commit comments