@@ -151,30 +151,44 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
151
151
endif ()
152
152
endif ()
153
153
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)
169
191
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)
178
192
endif ()
179
193
endif ()
180
194
elseif (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
0 commit comments