Skip to content

Commit 806755f

Browse files
committed
ggml: allow -march=native on generic ARM platforms
Signed-off-by: Adrien Gallouët <[email protected]>
1 parent 92f77a6 commit 806755f

File tree

1 file changed

+37
-23
lines changed

1 file changed

+37
-23
lines changed

ggml/src/ggml-cpu/CMakeLists.txt

+37-23
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)