Skip to content

Commit

Permalink
ggml: fix arm build with gcc (ggerganov#10895)
Browse files Browse the repository at this point in the history
Signed-off-by: Adrien Gallouët <[email protected]>
  • Loading branch information
angt authored Dec 19, 2024
1 parent 2fffc52 commit a3c33b1
Showing 1 changed file with 21 additions and 8 deletions.
29 changes: 21 additions & 8 deletions ggml/src/ggml-cpu/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,32 +88,45 @@ function(ggml_add_cpu_backend_variant_impl tag_name)
endif()

if (GGML_NATIVE)
list(APPEND ARCH_FLAGS -mcpu=native)

set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})

# -mcpu=native does not always enable all the features in some compilers,
# so we check for them manually and enable them if available

execute_process(
COMMAND ${CMAKE_C_COMPILER} -mcpu=native -E -v -
INPUT_FILE "/dev/null"
OUTPUT_QUIET
ERROR_VARIABLE ARM_MCPU
RESULT_VARIABLE ARM_MCPU_RESULT
)
if (NOT ARM_MCPU_RESULT)
string(REGEX MATCH "-mcpu=[^ ']+" ARM_MCPU_FLAG "${ARM_MCPU}")
endif()
if ("${ARM_MCPU_FLAG}" STREQUAL "")
set(ARM_MCPU_FLAG -mcpu=native)
message(STATUS "ARM -mcpu not found, -mcpu=native will be used")
endif()

set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
include(CheckCXXSourceRuns)

set(CMAKE_REQUIRED_FLAGS "${ARCH_FLAGS}+dotprod")
set(CMAKE_REQUIRED_FLAGS "${ARM_MCPU_FLAG}+dotprod")
check_cxx_source_runs(
"#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vdotq_s32(_s, _a, _b); return 0; }"
GGML_COMPILER_SUPPORT_DOTPROD)
if (GGML_COMPILER_SUPPORT_DOTPROD)
set(ARCH_FLAGS "${ARCH_FLAGS}+dotprod")
set(ARM_MCPU_FLAG_FIX "${ARM_MCPU_FLAG_FIX}+dotprod")
endif()

set(CMAKE_REQUIRED_FLAGS "${ARCH_FLAGS}+i8mm")
set(CMAKE_REQUIRED_FLAGS "${ARM_MCPU_FLAG}+i8mm")
check_cxx_source_runs(
"#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vmmlaq_s32(_s, _a, _b); return 0; }"
GGML_COMPILER_SUPPORT_I8MM)
if (GGML_COMPILER_SUPPORT_I8MM)
set(ARCH_FLAGS "${ARCH_FLAGS}+i8mm")
set(ARM_MCPU_FLAG_FIX "${ARM_MCPU_FLAG_FIX}+i8mm")
endif()

set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
list(APPEND ARCH_FLAGS "${ARM_MCPU_FLAG}${ARM_MCPU_FLAG_FIX}")

else()
if (GGML_CPU_ARM_ARCH)
Expand Down

0 comments on commit a3c33b1

Please sign in to comment.