@@ -151,30 +151,44 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
151151                endif  ()
152152            endif  ()
153153        else ()
154-             check_cxx_compiler_flag(-mfp16-format=ieee COMPILER_SUPPORTS_FP16_FORMAT_I3E)
155-             if  (NOT  "${COMPILER_SUPPORTS_FP16_FORMAT_I3E} "  STREQUAL  "" )
156-                 list (APPEND  ARCH_FLAGS -mfp16-format=ieee)
157-             endif ()
158-             if  (${CMAKE_SYSTEM_PROCESSOR}  MATCHES  "armv6" )
159-                 # Raspberry Pi 1, Zero 
160-                 list (APPEND  ARCH_FLAGS -mfpu=neon-fp-armv8 -mno-unaligned-access)
161-             endif ()
162-             if  (${CMAKE_SYSTEM_PROCESSOR}  MATCHES  "armv7" )
163-                 if  ("${CMAKE_SYSTEM_NAME} "  STREQUAL  "Android" )
164-                     # Android armeabi-v7a 
165-                     list (APPEND  ARCH_FLAGS -mfpu=neon-vfpv4 -mno-unaligned-access -funsafe-math-optimizations)
166-                 else ()
167-                     # Raspberry Pi 2 
168-                     list (APPEND  ARCH_FLAGS -mfpu=neon-fp-armv8 -mno-unaligned-access -funsafe-math-optimizations)
154+             if  (GGML_NATIVE)
155+                 set (USER_PROVIDED_MARCH FALSE )
156+                 foreach (flag_var IN ITEMS CMAKE_C_FLAGS CMAKE_CXX_FLAGS  CMAKE_REQUIRED_FLAGS)
157+                     if  ("${${flag_var} }"  MATCHES  "-march=[a-zA-Z0-9+._-]+" )
158+                         set (USER_PROVIDED_MARCH TRUE )
159+                         break ()
160+                     endif ()
161+                 endforeach ()
162+ 
163+                 if  (NOT  USER_PROVIDED_MARCH)
164+                     list (APPEND  ARCH_FLAGS "-march=native" )
165+                 endif ()
166+             else ()
167+                 check_cxx_compiler_flag(-mfp16-format=ieee COMPILER_SUPPORTS_FP16_FORMAT_I3E)
168+                 if  (NOT  "${COMPILER_SUPPORTS_FP16_FORMAT_I3E} "  STREQUAL  "" )
169+                     list (APPEND  ARCH_FLAGS -mfp16-format=ieee)
170+                 endif ()
171+                 if  (${CMAKE_SYSTEM_PROCESSOR}  MATCHES  "armv6" )
172+                     # Raspberry Pi 1, Zero 
173+                     list (APPEND  ARCH_FLAGS -mfpu=neon-fp-armv8 -mno-unaligned-access)
174+                 endif ()
175+                 if  (${CMAKE_SYSTEM_PROCESSOR}  MATCHES  "armv7" )
176+                     if  ("${CMAKE_SYSTEM_NAME} "  STREQUAL  "Android" )
177+                         # Android armeabi-v7a 
178+                         list (APPEND  ARCH_FLAGS -mfpu=neon-vfpv4 -mno-unaligned-access -funsafe-math-optimizations)
179+                     else ()
180+                         # Raspberry Pi 2 
181+                         list (APPEND  ARCH_FLAGS -mfpu=neon-fp-armv8 -mno-unaligned-access -funsafe-math-optimizations)
182+                     endif ()
183+                 endif ()
184+                 if  (${CMAKE_SYSTEM_PROCESSOR}  MATCHES  "armv8" )
185+                     # Android arm64-v8a 
186+                     # Raspberry Pi 3, 4, Zero 2 (32-bit) 
187+                     list (APPEND  ARCH_FLAGS -mno-unaligned-access)
188+                 endif ()
189+                 if  (GGML_SVE)
190+                     list (APPEND  ARCH_FLAGS -march=armv8.6-a+sve)
169191                endif ()
170-             endif ()
171-             if  (${CMAKE_SYSTEM_PROCESSOR}  MATCHES  "armv8" )
172-                 # Android arm64-v8a 
173-                 # Raspberry Pi 3, 4, Zero 2 (32-bit) 
174-                 list (APPEND  ARCH_FLAGS -mno-unaligned-access)
175-             endif ()
176-             if  (GGML_SVE)
177-                 list (APPEND  ARCH_FLAGS -march=armv8.6-a+sve)
178192            endif ()
179193        endif ()
180194    elseif  (CMAKE_OSX_ARCHITECTURES STREQUAL  "x86_64"  OR  CMAKE_GENERATOR_PLATFORM_LWR MATCHES  "^(x86_64|i686|amd64|x64|win32)$"  OR 
0 commit comments