Team Ai
Apppublic

KBaba7/llama.cpp

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
CMakeLists.txt358 linesDownload Raw Back to src
1include(CheckCXXCompilerFlag)2 3add_compile_definitions(GGML_SCHED_MAX_COPIES=${GGML_SCHED_MAX_COPIES})4 5# enable libstdc++ assertions for debug builds6if (CMAKE_SYSTEM_NAME MATCHES "Linux")7    add_compile_definitions($<$<CONFIG:Debug>:_GLIBCXX_ASSERTIONS>)8endif()9 10if (NOT MSVC)11    if (GGML_SANITIZE_THREAD)12        add_compile_options(-fsanitize=thread)13        link_libraries     (-fsanitize=thread)14    endif()15 16    if (GGML_SANITIZE_ADDRESS)17        add_compile_options(-fsanitize=address -fno-omit-frame-pointer)18        link_libraries     (-fsanitize=address)19    endif()20 21    if (GGML_SANITIZE_UNDEFINED)22        add_compile_options(-fsanitize=undefined)23        link_libraries     (-fsanitize=undefined)24    endif()25endif()26 27function(ggml_get_flags CCID CCVER)28    set(C_FLAGS "")29    set(CXX_FLAGS "")30 31    if (CCID MATCHES "Clang")32        set(C_FLAGS   -Wunreachable-code-break -Wunreachable-code-return)33        set(CXX_FLAGS -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes -Wextra-semi)34 35        if (36            (CCID STREQUAL "Clang"      AND CCVER VERSION_GREATER_EQUAL 3.8.0) OR37            (CCID STREQUAL "AppleClang" AND CCVER VERSION_GREATER_EQUAL 7.3.0)38        )39            list(APPEND C_FLAGS -Wdouble-promotion)40        endif()41    elseif (CCID STREQUAL "GNU")42        set(C_FLAGS   -Wdouble-promotion)43        set(CXX_FLAGS -Wno-array-bounds)44 45        if (CCVER VERSION_GREATER_EQUAL 8.1.0)46            list(APPEND CXX_FLAGS -Wextra-semi)47        endif()48    endif()49 50    set(GF_C_FLAGS   ${C_FLAGS}   PARENT_SCOPE)51    set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)52endfunction()53 54if (GGML_FATAL_WARNINGS)55    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")56        list(APPEND C_FLAGS   -Werror)57        list(APPEND CXX_FLAGS -Werror)58    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")59        add_compile_options(/WX)60    endif()61endif()62 63if (GGML_ALL_WARNINGS)64    if (NOT MSVC)65        list(APPEND WARNING_FLAGS -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function)66        list(APPEND C_FLAGS       -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes67                                  -Werror=implicit-int -Werror=implicit-function-declaration)68        list(APPEND CXX_FLAGS     -Wmissing-declarations -Wmissing-noreturn)69 70        list(APPEND C_FLAGS   ${WARNING_FLAGS})71        list(APPEND CXX_FLAGS ${WARNING_FLAGS})72 73        ggml_get_flags(${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})74 75        add_compile_options("$<$<COMPILE_LANGUAGE:C>:${C_FLAGS};${GF_C_FLAGS}>"76                            "$<$<COMPILE_LANGUAGE:CXX>:${CXX_FLAGS};${GF_CXX_FLAGS}>")77    else()78        # todo : msvc79        set(C_FLAGS   "")80        set(CXX_FLAGS "")81    endif()82endif()83 84if (GGML_LTO)85    include(CheckIPOSupported)86    check_ipo_supported(RESULT result OUTPUT output)87    if (result)88        set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)89    else()90        message(WARNING "IPO is not supported: ${output}")91    endif()92endif()93 94if (GGML_CCACHE)95    find_program(GGML_CCACHE_FOUND ccache)96    find_program(GGML_SCCACHE_FOUND sccache)97 98    if (GGML_CCACHE_FOUND OR GGML_SCCACHE_FOUND)99        if(GGML_CCACHE_FOUND)100            set(GGML_CCACHE_VARIANT ccache)101        else()102            set(GGML_CCACHE_VARIANT sccache)103        endif()104        # TODO: should not be set globally105        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${GGML_CCACHE_VARIANT}")106        set(ENV{CCACHE_SLOPPINESS} time_macros)107        message(STATUS "${GGML_CCACHE_VARIANT} found, compilation results will be cached. Disable with GGML_CCACHE=OFF.")108    else()109        message(STATUS "Warning: ccache not found - consider installing it for faster compilation or disable this warning with GGML_CCACHE=OFF")110    endif ()111endif()112 113# this version of Apple ld64 is buggy114execute_process(115    COMMAND ${CMAKE_C_COMPILER} ${CMAKE_EXE_LINKER_FLAGS} -Wl,-v116    ERROR_VARIABLE output117    OUTPUT_QUIET118)119 120if (output MATCHES "dyld-1015\.7")121    add_compile_definitions(HAVE_BUGGY_APPLE_LINKER)122endif()123 124# architecture specific125# TODO: probably these flags need to be tweaked on some architectures126#       feel free to update the Makefile for your architecture and send a pull request or issue127message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")128if (MSVC)129    string(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" CMAKE_GENERATOR_PLATFORM_LWR)130    message(STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}")131else ()132    set(CMAKE_GENERATOR_PLATFORM_LWR "")133endif ()134 135if (NOT MSVC)136    if (GGML_STATIC)137        add_link_options(-static)138        if (MINGW)139            add_link_options(-static-libgcc -static-libstdc++)140        endif()141    endif()142    if (GGML_GPROF)143        add_compile_options(-pg)144    endif()145endif()146 147if (MINGW)148    # Target Windows 8 for PrefetchVirtualMemory149    add_compile_definitions(_WIN32_WINNT=${GGML_WIN_VER})150endif()151 152#153# POSIX conformance154#155 156# clock_gettime came in POSIX.1b (1993)157# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional158# posix_memalign came in POSIX.1-2001 / SUSv3159# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)160 161# Somehow in OpenBSD whenever POSIX conformance is specified162# some string functions rely on locale_t availability,163# which was introduced in POSIX.1-2008, forcing us to go higher164if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")165    add_compile_definitions(_XOPEN_SOURCE=700)166else()167    add_compile_definitions(_XOPEN_SOURCE=600)168endif()169 170# Data types, macros and functions related to controlling CPU affinity and171# some memory allocation are available on Linux through GNU extensions in libc172if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Android")173    add_compile_definitions(_GNU_SOURCE)174endif()175 176# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,177# and on macOS its availability depends on enabling Darwin extensions178# similarly on DragonFly, enabling BSD extensions is necessary179if (180    CMAKE_SYSTEM_NAME MATCHES "Darwin" OR181    CMAKE_SYSTEM_NAME MATCHES "iOS"    OR182    CMAKE_SYSTEM_NAME MATCHES "tvOS"   OR183    CMAKE_SYSTEM_NAME MATCHES "DragonFly"184)185    add_compile_definitions(_DARWIN_C_SOURCE)186endif()187 188# alloca is a non-standard interface that is not visible on BSDs when189# POSIX conformance is specified, but not all of them provide a clean way190# to enable it in such cases191if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")192    add_compile_definitions(__BSD_VISIBLE)193endif()194if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")195    add_compile_definitions(_NETBSD_SOURCE)196endif()197if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")198    add_compile_definitions(_BSD_SOURCE)199endif()200 201if (WIN32)202    add_compile_definitions(_CRT_SECURE_NO_WARNINGS)203endif()204 205# ggml206 207if (GGML_BACKEND_DL AND NOT BUILD_SHARED_LIBS)208    message(FATAL_ERROR "GGML_BACKEND_DL requires BUILD_SHARED_LIBS")209endif()210 211add_library(ggml-base212            ../include/ggml.h213            ../include/ggml-alloc.h214            ../include/ggml-backend.h215            ../include/ggml-cpp.h216            ../include/ggml-opt.h217            ../include/gguf.h218            ggml.c219            ggml-alloc.c220            ggml-backend.cpp221            ggml-opt.cpp222            ggml-threading.cpp223            ggml-threading.h224            ggml-quants.c225            ggml-quants.h226            gguf.cpp)227 228target_include_directories(ggml-base PRIVATE .)229 230add_library(ggml231            ggml-backend-reg.cpp)232 233target_link_libraries(ggml PUBLIC ggml-base)234 235if (CMAKE_SYSTEM_NAME MATCHES "Linux")236    target_link_libraries(ggml PRIVATE dl)237endif()238 239function(ggml_add_backend_library backend)240    if (GGML_BACKEND_DL)241        add_library(${backend} MODULE ${ARGN})242        # write the shared library to the output directory243        set_target_properties(${backend} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})244        target_compile_definitions(${backend} PRIVATE GGML_BACKEND_DL)245        add_dependencies(ggml ${backend})246    else()247        add_library(${backend} ${ARGN})248        target_link_libraries(ggml PUBLIC ${backend})249        install(TARGETS ${backend} LIBRARY)250    endif()251 252    target_link_libraries(${backend} PRIVATE ggml-base)253    target_include_directories(${backend} PRIVATE ..)254 255    if (${BUILD_SHARED_LIBS})256        target_compile_definitions(${backend} PRIVATE GGML_BACKEND_BUILD)257        target_compile_definitions(${backend} PUBLIC  GGML_BACKEND_SHARED)258    endif()259 260    if(NOT GGML_AVAILABLE_BACKENDS)261        set(GGML_AVAILABLE_BACKENDS "${backend}"262            CACHE INTERNAL "List of backends for cmake package")263    else()264        list(FIND GGML_AVAILABLE_BACKENDS "${backend}" has_backend)265        if(has_backend EQUAL -1)266            set(GGML_AVAILABLE_BACKENDS "${GGML_AVAILABLE_BACKENDS};${backend}"267                CACHE INTERNAL "List of backends for cmake package")268        endif()269    endif()270endfunction()271 272function(ggml_add_backend backend)273    string(TOUPPER "GGML_${backend}" backend_id)274    if (${backend_id})275        string(TOLOWER "ggml-${backend}" backend_target)276        add_subdirectory(${backend_target})277        message(STATUS "Including ${backend} backend")278        if (NOT GGML_BACKEND_DL)279            string(TOUPPER "GGML_USE_${backend}" backend_use)280            target_compile_definitions(ggml PUBLIC ${backend_use})281        endif()282    endif()283endfunction()284 285function(ggml_add_cpu_backend_variant tag_name)286    set(GGML_CPU_TAG_NAME ${tag_name})287    # other: OPENMP LLAMAFILE CPU_HBM288    foreach (feat NATIVE289                  AVX AVX2 AVX_VNNI FMA F16C290                  AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16291                  AMX_TILE AMX_INT8 AMX_BF16)292        set(GGML_${feat} OFF)293    endforeach()294 295    foreach (feat ${ARGN})296        set(GGML_${feat} ON)297    endforeach()298 299    ggml_add_cpu_backend_variant_impl(${tag_name})300endfunction()301 302ggml_add_backend(CPU)303 304if (GGML_CPU_ALL_VARIANTS)305    if (NOT GGML_BACKEND_DL)306        message(FATAL_ERROR "GGML_CPU_ALL_VARIANTS requires GGML_BACKEND_DL")307    endif()308    ggml_add_cpu_backend_variant(sandybridge    AVX)309    ggml_add_cpu_backend_variant(haswell        AVX F16C AVX2 FMA)310    ggml_add_cpu_backend_variant(skylakex       AVX F16C AVX2 FMA AVX512)311    ggml_add_cpu_backend_variant(icelake        AVX F16C AVX2 FMA AVX512 AVX512_VBMI AVX512_VNNI)312    ggml_add_cpu_backend_variant(alderlake      AVX F16C AVX2 FMA AVX_VNNI)313    if (NOT MSVC)314        # MSVC doesn't support AMX315        ggml_add_cpu_backend_variant(sapphirerapids AVX F16C AVX2 FMA AVX512 AVX512_VBMI AVX512_VNNI AVX512_BF16 AMX_TILE AMX_INT8)316    endif()317elseif (GGML_CPU)318    ggml_add_cpu_backend_variant_impl("")319endif()320 321ggml_add_backend(BLAS)322ggml_add_backend(CANN)323ggml_add_backend(CUDA)324ggml_add_backend(HIP)325ggml_add_backend(Kompute)326ggml_add_backend(METAL)327ggml_add_backend(MUSA)328ggml_add_backend(RPC)329ggml_add_backend(SYCL)330ggml_add_backend(Vulkan)331ggml_add_backend(OpenCL)332 333foreach (target ggml-base ggml)334    target_include_directories(${target} PUBLIC    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include> $<INSTALL_INTERFACE:include>)335    target_compile_features   (${target} PRIVATE c_std_11 cxx_std_17) # don't bump336endforeach()337 338target_link_libraries(ggml-base PRIVATE Threads::Threads)339 340find_library(MATH_LIBRARY m)341if (MATH_LIBRARY)342    if (NOT WIN32 OR NOT DEFINED ENV{ONEAPI_ROOT})343        target_link_libraries(ggml-base PRIVATE m)344    endif()345endif()346 347if (CMAKE_SYSTEM_NAME MATCHES "Android")348    target_link_libraries(ggml-base PRIVATE dl)349endif()350 351if (BUILD_SHARED_LIBS)352    foreach (target ggml-base ggml)353        set_target_properties(${target} PROPERTIES POSITION_INDEPENDENT_CODE ON)354        target_compile_definitions(${target} PRIVATE GGML_BUILD)355        target_compile_definitions(${target} PUBLIC  GGML_SHARED)356    endforeach()357endif()358