@@ -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