mirror of
https://github.com/ggerganov/llama.cpp.git
synced 2025-04-14 18:46:08 +00:00

* ggml : build backends as libraries --------- Signed-off-by: Xiaodong Ye <xiaodong.ye@mthreads.com> Co-authored-by: Georgi Gerganov <ggerganov@gmail.com> Co-authored-by: R0CKSTAR <xiaodong.ye@mthreads.com>
108 lines
4.1 KiB
CMake
108 lines
4.1 KiB
CMake
if (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
|
|
(NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
|
|
CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64)$") AND
|
|
CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 11.0)
|
|
message(STATUS "Using AMX")
|
|
|
|
file(GLOB GGML_HEADERS_AMX "*.h")
|
|
list(APPEND GGML_HEADERS_AMX "../../include/ggml-amx.h")
|
|
|
|
file(GLOB GGML_SOURCES_AMX "*.cpp")
|
|
|
|
add_library(ggml-amx
|
|
${GGML_HEADERS_AMX}
|
|
${GGML_SOURCES_AMX})
|
|
|
|
target_link_libraries(ggml-amx PRIVATE ggml-base)
|
|
target_include_directories(ggml-amx PRIVATE . ..)
|
|
|
|
# this is duplicated from the CPU backend, since the AMX backend also depends on the architecture flags
|
|
# TODO: integrate AMX backend into the CPU backend
|
|
if (MSVC)
|
|
# instruction set detection for MSVC only
|
|
if (GGML_NATIVE)
|
|
# TODO: improve, should not reference files from the parent folder
|
|
include(../ggml-cpu/cmake/FindSIMD.cmake)
|
|
endif ()
|
|
if (GGML_AVX512)
|
|
list(APPEND ARCH_FLAGS /arch:AVX512)
|
|
# MSVC has no compile-time flags enabling specific
|
|
# AVX512 extensions, neither it defines the
|
|
# macros corresponding to the extensions.
|
|
# Do it manually.
|
|
if (GGML_AVX512_VBMI)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
|
|
endif()
|
|
if (GGML_AVX512_VNNI)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
|
|
endif()
|
|
if (GGML_AVX512_BF16)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512BF16__>)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512BF16__>)
|
|
endif()
|
|
if (GGML_AMX_TILE)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_TILE__>)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_TILE__>)
|
|
endif()
|
|
if (GGML_AMX_INT8)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_INT8__>)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_INT8__>)
|
|
endif()
|
|
if (GGML_AMX_BF16)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AMX_BF16__>)
|
|
add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AMX_BF16__>)
|
|
endif()
|
|
elseif (GGML_AVX2)
|
|
list(APPEND ARCH_FLAGS /arch:AVX2)
|
|
elseif (GGML_AVX)
|
|
list(APPEND ARCH_FLAGS /arch:AVX)
|
|
endif()
|
|
else()
|
|
if (GGML_NATIVE)
|
|
list(APPEND ARCH_FLAGS -march=native)
|
|
endif()
|
|
if (GGML_F16C)
|
|
list(APPEND ARCH_FLAGS -mf16c)
|
|
endif()
|
|
if (GGML_FMA)
|
|
list(APPEND ARCH_FLAGS -mfma)
|
|
endif()
|
|
if (GGML_AVX)
|
|
list(APPEND ARCH_FLAGS -mavx)
|
|
endif()
|
|
if (GGML_AVX2)
|
|
list(APPEND ARCH_FLAGS -mavx2)
|
|
endif()
|
|
if (GGML_AVX512)
|
|
list(APPEND ARCH_FLAGS -mavx512f)
|
|
list(APPEND ARCH_FLAGS -mavx512dq)
|
|
list(APPEND ARCH_FLAGS -mavx512bw)
|
|
endif()
|
|
if (GGML_AVX512_VBMI)
|
|
list(APPEND ARCH_FLAGS -mavx512vbmi)
|
|
endif()
|
|
if (GGML_AVX512_VNNI)
|
|
list(APPEND ARCH_FLAGS -mavx512vnni)
|
|
endif()
|
|
if (GGML_AVX512_BF16)
|
|
list(APPEND ARCH_FLAGS -mavx512bf16)
|
|
endif()
|
|
if (GGML_AMX_TILE)
|
|
list(APPEND ARCH_FLAGS -mamx-tile)
|
|
endif()
|
|
if (GGML_AMX_INT8)
|
|
list(APPEND ARCH_FLAGS -mamx-int8)
|
|
endif()
|
|
if (GGML_AMX_BF16)
|
|
list(APPEND ARCH_FLAGS -mamx-bf16)
|
|
endif()
|
|
endif()
|
|
|
|
target_compile_options(ggml-amx PRIVATE ${ARCH_FLAGS})
|
|
else()
|
|
set(GGML_AMX OFF PARENT_SCOPE)
|
|
message(WARNING "AMX requires x86 and gcc version > 11.0. Turning off GGML_AMX.")
|
|
endif()
|