Skip to content

Commit 25669aa

Browse files
authored
ggml-cpu: cmake add arm64 cpu feature check for macos (#10487)
* ggml-cpu: cmake add arm64 cpu feature check for macos * use vmmlaq_s32 for compile option i8mm check
1 parent 84e1c33 commit 25669aa

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

ggml/src/ggml-cpu/CMakeLists.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,39 @@ if (CMAKE_OSX_ARCHITECTURES STREQUAL "arm64" OR
9696
endif ()
9797

9898
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_PREV})
99+
elseif (APPLE)
100+
if (GGML_NATIVE)
101+
set(USER_PROVIDED_MARCH FALSE)
102+
foreach(flag_var IN ITEMS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_REQUIRED_FLAGS)
103+
if ("${${flag_var}}" MATCHES "-march=[a-zA-Z0-9+._-]+")
104+
set(USER_PROVIDED_MARCH TRUE)
105+
break()
106+
endif()
107+
endforeach()
108+
109+
if (NOT USER_PROVIDED_MARCH)
110+
set(MARCH_FLAGS "-march=armv8.2a")
111+
112+
check_cxx_source_compiles("#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vdotq_s32(_s, _a, _b); return 0; }" GGML_COMPILER_SUPPORT_DOTPROD)
113+
if (GGML_COMPILER_SUPPORT_DOTPROD)
114+
set(MARCH_FLAGS "${MARCH_FLAGS}+dotprod")
115+
add_compile_definitions(__ARM_FEATURE_DOTPROD)
116+
endif ()
117+
118+
set(TEST_I8MM_FLAGS "-march=armv8.2a+i8mm")
119+
120+
set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
121+
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${TEST_I8MM_FLAGS}")
122+
check_cxx_source_compiles("#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vmmlaq_s32(_s, _a, _b); return 0; }" GGML_COMPILER_SUPPORT_MATMUL_INT8)
123+
if (GGML_COMPILER_SUPPORT_MATMUL_INT8)
124+
set(MARCH_FLAGS "${MARCH_FLAGS}+i8mm")
125+
add_compile_definitions(__ARM_FEATURE_MATMUL_INT8)
126+
endif ()
127+
set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
128+
129+
list(APPEND ARCH_FLAGS "${MARCH_FLAGS}")
130+
endif ()
131+
endif ()
99132
else()
100133
check_cxx_compiler_flag(-mfp16-format=ieee COMPILER_SUPPORTS_FP16_FORMAT_I3E)
101134
if (NOT "${COMPILER_SUPPORTS_FP16_FORMAT_I3E}" STREQUAL "")

0 commit comments

Comments
 (0)