@@ -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>\n int 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>\n int 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