CoolFace
Modelpublic

Felipe97/llama-cpp-compiled

sourceHugging Faceupdated 4d agoView on Hugging Face
0likes1.1kdownloads
CMakeLists.txt382 linesDownload Raw Back to tests
1llama_add_compile_flags()2 3function(llama_build source)4    set(TEST_SOURCES ${source} ${ARGN})5 6    if (DEFINED LLAMA_TEST_NAME)7        set(TEST_TARGET ${LLAMA_TEST_NAME})8    else()9        get_filename_component(TEST_TARGET ${source} NAME_WE)10    endif()11 12    add_executable(${TEST_TARGET} ${TEST_SOURCES})13    target_link_libraries(${TEST_TARGET} PRIVATE llama llama-common) # TODO: [TAG_TESTS_LLAMA_LINK]14    if (LLAMA_TESTS_INSTALL)15        install(TARGETS ${TEST_TARGET} RUNTIME)16    endif()17endfunction()18 19function(llama_test target)20    include(CMakeParseArguments)21    set(options)22    set(oneValueArgs NAME LABEL WORKING_DIRECTORY)23    set(multiValueArgs ARGS)24    cmake_parse_arguments(LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})25 26    if (NOT DEFINED LLAMA_TEST_LABEL)27        set(LLAMA_TEST_LABEL "main")28    endif()29    if (NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY)30        set(LLAMA_TEST_WORKING_DIRECTORY .)31    endif()32    if (DEFINED LLAMA_TEST_NAME)33        set(TEST_NAME ${LLAMA_TEST_NAME})34    else()35        set(TEST_NAME ${target})36    endif()37 38    set(TEST_TARGET ${target})39 40    add_test(41        NAME ${TEST_NAME}42        WORKING_DIRECTORY ${LLAMA_TEST_WORKING_DIRECTORY}43        COMMAND $<TARGET_FILE:${TEST_TARGET}>44        ${LLAMA_TEST_ARGS})45 46    set_property(TEST ${TEST_NAME} PROPERTY LABELS ${LLAMA_TEST_LABEL})47endfunction()48 49function(llama_test_cmd target)50    include(CMakeParseArguments)51    set(options)52    set(oneValueArgs NAME LABEL WORKING_DIRECTORY)53    set(multiValueArgs ARGS)54    cmake_parse_arguments(LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})55 56    if (NOT DEFINED LLAMA_TEST_LABEL)57        set(LLAMA_TEST_LABEL "main")58    endif()59    if (NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY)60        set(LLAMA_TEST_WORKING_DIRECTORY .)61    endif()62    if (DEFINED LLAMA_TEST_NAME)63        set(TEST_NAME ${LLAMA_TEST_NAME})64    else()65        set(TEST_NAME ${target})66    endif()67 68    add_test(69        NAME ${TEST_NAME}70        WORKING_DIRECTORY ${LLAMA_TEST_WORKING_DIRECTORY}71        COMMAND ${target}72        ${LLAMA_TEST_ARGS})73 74    set_property(TEST ${TEST_NAME} PROPERTY LABELS ${LLAMA_TEST_LABEL})75endfunction()76 77# Builds and runs a test source file.78# Optional args:79# - NAME: name of the executable & test target (defaults to the source file name without extension)80# - LABEL: label for the test (defaults to main)81# - ARGS: arguments to pass to the test executable82# - WORKING_DIRECTORY83function(llama_build_and_test source)84    include(CMakeParseArguments)85    set(options)86    set(oneValueArgs NAME LABEL WORKING_DIRECTORY)87    set(multiValueArgs ARGS)88    cmake_parse_arguments(LLAMA_TEST "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})89 90    set(TEST_SOURCES ${source} ${LLAMA_TEST_UNPARSED_ARGUMENTS})91 92    if (NOT DEFINED LLAMA_TEST_LABEL)93        set(LLAMA_TEST_LABEL "main")94    endif()95    if (NOT DEFINED LLAMA_TEST_WORKING_DIRECTORY)96        set(LLAMA_TEST_WORKING_DIRECTORY .)97    endif()98    if (DEFINED LLAMA_TEST_NAME)99        set(TEST_TARGET ${LLAMA_TEST_NAME})100    else()101        get_filename_component(TEST_TARGET ${source} NAME_WE)102    endif()103 104    add_executable(${TEST_TARGET} ${TEST_SOURCES})105    if (LLAMA_TESTS_INSTALL)106        install(TARGETS ${TEST_TARGET} RUNTIME)107    endif()108    target_link_libraries(${TEST_TARGET} PRIVATE llama-common)109 110    add_test(111        NAME ${TEST_TARGET}112        WORKING_DIRECTORY ${LLAMA_TEST_WORKING_DIRECTORY}113        COMMAND $<TARGET_FILE:${TEST_TARGET}>114        ${LLAMA_TEST_ARGS})115 116    set_property(TEST ${TEST_TARGET} PROPERTY LABELS ${LLAMA_TEST_LABEL})117endfunction()118 119# build test-tokenizer-0 target once and add many tests120llama_build(test-tokenizer-0.cpp)121 122llama_test(test-tokenizer-0 NAME test-tokenizer-0-bert-bge          ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-bert-bge.gguf)123llama_test(test-tokenizer-0 NAME test-tokenizer-0-command-r         ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-command-r.gguf)124llama_test(test-tokenizer-0 NAME test-tokenizer-0-deepseek-coder    ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-deepseek-coder.gguf)125llama_test(test-tokenizer-0 NAME test-tokenizer-0-deepseek-llm      ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-deepseek-llm.gguf)126llama_test(test-tokenizer-0 NAME test-tokenizer-0-falcon            ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-falcon.gguf)127llama_test(test-tokenizer-0 NAME test-tokenizer-0-gemma-4           ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gemma-4.gguf)128llama_test(test-tokenizer-0 NAME test-tokenizer-0-gpt-2             ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-2.gguf)129llama_test(test-tokenizer-0 NAME test-tokenizer-0-llama-bpe         ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf)130llama_test(test-tokenizer-0 NAME test-tokenizer-0-llama-spm         ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-spm.gguf)131llama_test(test-tokenizer-0 NAME test-tokenizer-0-mpt               ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-mpt.gguf)132llama_test(test-tokenizer-0 NAME test-tokenizer-0-phi-3             ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-phi-3.gguf)133llama_test(test-tokenizer-0 NAME test-tokenizer-0-qwen2             ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-qwen2.gguf)134llama_test(test-tokenizer-0 NAME test-tokenizer-0-qwen35            ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-qwen35.gguf)135llama_test(test-tokenizer-0 NAME test-tokenizer-0-refact            ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-refact.gguf)136llama_test(test-tokenizer-0 NAME test-tokenizer-0-starcoder         ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-starcoder.gguf)137 138if (NOT WIN32)139    llama_test_cmd(140        ${CMAKE_CURRENT_SOURCE_DIR}/test-tokenizers-repo.sh141        NAME test-tokenizers-ggml-vocabs142        WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}143        ARGS https://huggingface.co/ggml-org/vocabs ${PROJECT_SOURCE_DIR}/models/ggml-vocabs144    )145endif()146 147if (LLAMA_LLGUIDANCE)148    llama_build_and_test(test-grammar-llguidance.cpp ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf)149endif ()150 151llama_build(test-recurrent-state-rollback.cpp)152llama_build(test-save-load-state.cpp)153 154if (NOT WIN32 OR NOT BUILD_SHARED_LIBS)155    # these tests are disabled on Windows because they use internal functions not exported with LLAMA_API (when building with shared libraries)156    llama_build_and_test(test-unicode.cpp)157    llama_build_and_test(test-sampling.cpp)158    llama_build_and_test(test-reasoning-budget.cpp)159    llama_build_and_test(test-grammar-parser.cpp)160    llama_build_and_test(test-grammar-integration.cpp)161    llama_build_and_test(test-llama-grammar.cpp)162    llama_build_and_test(test-batch-alloc.cpp)163    llama_build_and_test(test-chat.cpp WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})164    target_include_directories(test-chat PRIVATE ${PROJECT_SOURCE_DIR}/tools/server)165    target_link_libraries(test-chat PRIVATE server-context)166    llama_build_and_test(test-json-schema-to-grammar.cpp)167 168    if (NOT GGML_BACKEND_DL)169        llama_build(test-quantize-stats.cpp)170    endif()171 172    llama_build(test-gbnf-validator.cpp)173 174    # build test-tokenizer-1-bpe target once and add many tests175    llama_build(test-tokenizer-1-bpe.cpp)176 177    # TODO: disabled due to slowness178    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-aquila    ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-aquila.gguf)179    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-falcon    ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-falcon.gguf)180    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-2     ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-2.gguf)181    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-gpt-neox  ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-gpt-neox.gguf)182    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-llama-bpe ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-bpe.gguf --ignore-merges)183    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-mpt       ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-mpt.gguf)184    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-refact    ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-refact.gguf)185    #llama_test(test-tokenizer-1-bpe NAME test-tokenizer-1-starcoder ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-starcoder.gguf)186 187    # build test-tokenizer-1-spm target once and add many tests188    llama_build(test-tokenizer-1-spm.cpp)189 190    llama_test(test-tokenizer-1-spm  NAME test-tokenizer-1-llama-spm ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-llama-spm.gguf)191    #llama_test(test-tokenizer-1-spm  NAME test-tokenizer-1-baichuan  ARGS ${PROJECT_SOURCE_DIR}/models/ggml-vocab-baichuan.gguf)192 193    # llama_build_and_test(test-double-float.cpp) # SLOW194 195    llama_build(test-llama-archs.cpp)196 197    set(MODEL_DIR "${CMAKE_CURRENT_BINARY_DIR}/test-models/")198    file(MAKE_DIRECTORY "${MODEL_DIR}")199 200    llama_test(201        test-llama-archs202        NAME test-generate-models203        LABEL main204        ARGS -o "${MODEL_DIR}"205    )206    set_tests_properties(test-generate-models PROPERTIES207        FIXTURES_SETUP generate-models208    )209 210    llama_test(211        test-recurrent-state-rollback212        LABEL main213        ARGS -m "${MODEL_DIR}/qwen35-dense.gguf"214    )215    set_tests_properties(test-recurrent-state-rollback PROPERTIES216        FIXTURES_REQUIRED generate-models217    )218 219    llama_test(220        test-recurrent-state-rollback221        NAME test-recurrent-state-rollback-nemotron-h222        LABEL main223        ARGS -m "${MODEL_DIR}/nemotron_h-dense.gguf"224    )225    set_tests_properties(test-recurrent-state-rollback-nemotron-h PROPERTIES226        FIXTURES_REQUIRED generate-models227    )228    llama_test(229        test-recurrent-state-rollback230        NAME test-recurrent-state-rollback-dsv4231        LABEL main232        ARGS -m "${MODEL_DIR}/deepseek4-moe.gguf"233    )234    set_tests_properties(test-recurrent-state-rollback-dsv4 PROPERTIES235        FIXTURES_REQUIRED generate-models236    )237    llama_test(238        test-recurrent-state-rollback239        NAME test-recurrent-state-rollback-kimi-k3240        LABEL main241        ARGS -m "${MODEL_DIR}/kimi-k3-moe.gguf"242    )243    set_tests_properties(test-recurrent-state-rollback-kimi-k3 PROPERTIES244        FIXTURES_REQUIRED generate-models245    )246 247    # Test state save/load functionality across all architectures, using the generated dummy models248    llama_test(249        test-save-load-state250        LABEL main251        ARGS --models "${MODEL_DIR}"252    )253    set_tests_properties(test-save-load-state PROPERTIES FIXTURES_REQUIRED generate-models)254 255    llama_build(test-fusion.cpp)256endif()257 258llama_build_and_test(test-chat-peg-parser.cpp peg-parser/simple-tokenize.cpp)259llama_build_and_test(test-jinja.cpp)260llama_test(test-jinja NAME test-jinja-py ARGS -py LABEL python)261llama_build_and_test(test-json-schema.cpp)262llama_build_and_test(test-chat-auto-parser.cpp WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})263llama_build_and_test(test-chat-template.cpp)264# debug tool for chat template differential analysis (not registered as a test, run it manually)265llama_build(test-chat-analysis.cpp)266llama_build_and_test(test-log.cpp)267llama_build_and_test(268    test-peg-parser.cpp269    peg-parser/simple-tokenize.cpp270    peg-parser/test-basic.cpp271    peg-parser/test-gbnf-generation.cpp272    peg-parser/test-json-parser.cpp273    peg-parser/test-json-serialization.cpp274    peg-parser/test-python-dict-parser.cpp275    peg-parser/test-unicode.cpp276    peg-parser/tests.h277)278 279if (NOT ${CMAKE_SYSTEM_PROCESSOR} MATCHES "s390x")280    set(MODEL_NAME "tinyllamas/stories15M-q4_0.gguf")281    set(MODEL_HASH "SHA256=66967fbece6dbe97886593fdbb73589584927e29119ec31f08090732d1861739")282else()283    set(MODEL_NAME "tinyllamas/stories15M-be.Q4_0.gguf")284    set(MODEL_HASH "SHA256=9aec857937849d976f30397e97eb1cabb53eb9dcb1ce4611ba8247fb5f44c65d")285endif()286set(MODEL_DEST "${CMAKE_BINARY_DIR}/${MODEL_NAME}")287 288add_test(NAME test-download-model COMMAND ${CMAKE_COMMAND}289    -DDEST=${MODEL_DEST}290    -DNAME=${MODEL_NAME}291    -DHASH=${MODEL_HASH}292    -P ${PROJECT_SOURCE_DIR}/cmake/download-models.cmake293)294set_tests_properties(test-download-model PROPERTIES FIXTURES_SETUP test-download-model)295 296llama_build_and_test(test-thread-safety.cpp ARGS -m "${MODEL_DEST}" -ngl 99 -p "The meaning of life is" -n 128 -c 256 -ub 32 -np 4 -t 2)297set_tests_properties(test-thread-safety PROPERTIES FIXTURES_REQUIRED test-download-model)298 299llama_build_and_test(test-arg-parser.cpp)300llama_build_and_test(test-model-resolution.cpp)301# the test serves its repos from an httplib server, and the library links it privately302target_link_libraries(test-model-resolution PRIVATE cpp-httplib)303 304if (NOT LLAMA_SANITIZE_ADDRESS AND NOT GGML_SCHED_NO_REALLOC)305  # TODO: repair known memory leaks306  llama_build_and_test(test-opt.cpp)307endif()308 309# TODO: make this test (and others) not link `libllama` as it is not needed [TAG_TESTS_LLAMA_LINK]310llama_build(test-backend-ops.cpp)311 312llama_build_and_test(test-model-load-cancel.cpp LABEL "model")313llama_build_and_test(test-autorelease.cpp       LABEL "model")314llama_build_and_test(test-backend-sampler.cpp   LABEL "model")315 316# Test for state restore with fragmented KV cache317# Requires a model, uses same args pattern as test-thread-safety318llama_build_and_test(test-state-restore-fragmented.cpp LABEL "model" ARGS -m "${MODEL_DEST}")319set_tests_properties(test-state-restore-fragmented PROPERTIES FIXTURES_REQUIRED test-download-model)320 321if (APPLE)322    llama_build(test-rset-release.cpp)323endif()324 325if (NOT GGML_BACKEND_DL AND GGML_CPU)326    # these tests use the backends directly and cannot be built with dynamic loading327    llama_build_and_test(test-barrier.cpp)328    llama_build_and_test(test-quantize-fns.cpp)329    llama_build_and_test(test-quantize-perf.cpp)330    llama_build_and_test(test-rope.cpp)331    llama_build_and_test(test-col2im-1d.cpp)332endif()333 334# libmtmd335set(LLAMA_TEST_NAME test-mtmd-c-api)336llama_build_and_test(test-mtmd-c-api.c)337target_link_libraries(${LLAMA_TEST_NAME} PRIVATE mtmd)338unset(LLAMA_TEST_NAME)339 340llama_build_and_test(test-mtmd-impl.cpp)341target_link_libraries(test-mtmd-impl PRIVATE mtmd)342 343# GGUF model data fetcher library for tests that need real model metadata344# Only compile when cpp-httplib has SSL support (CPPHTTPLIB_OPENSSL_SUPPORT)345if (TARGET cpp-httplib)346    get_target_property(_cpp_httplib_defs cpp-httplib INTERFACE_COMPILE_DEFINITIONS)347    if (_cpp_httplib_defs MATCHES "CPPHTTPLIB_OPENSSL_SUPPORT")348        add_library(gguf-model-data STATIC gguf-model-data.cpp)349        target_link_libraries(gguf-model-data PRIVATE llama-common cpp-httplib)350        target_include_directories(gguf-model-data PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})351 352        add_executable(test-gguf-model-data test-gguf-model-data.cpp)353        target_link_libraries(test-gguf-model-data PRIVATE gguf-model-data llama-common)354        llama_test(test-gguf-model-data LABEL "model")355 356        # test-quant-type-selection requires gguf-model-data for remote model metadata357        llama_build_and_test(test-quant-type-selection.cpp LABEL "model")358        target_link_libraries(test-quant-type-selection PRIVATE gguf-model-data)359        target_compile_definitions(test-quant-type-selection PRIVATE360            SNAPSHOT_DIR="${CMAKE_CURRENT_SOURCE_DIR}/snapshots")361    endif()362endif()363 364# dummy executable - not installed365get_filename_component(TEST_TARGET test-c.c NAME_WE)366add_executable(${TEST_TARGET} test-c.c)367target_link_libraries(${TEST_TARGET} PRIVATE llama)368 369if (NOT LLAMA_USE_SYSTEM_GGML)370    # Needs non-public ggml-impl.h371    llama_build_and_test(test-gguf.cpp)372 373    # Needs non-public ggml{,-backend}-impl.h374    llama_build_and_test(test-alloc.cpp)375endif()376 377llama_build(test-export-graph-ops.cpp)378if (TARGET gguf-model-data)379    target_link_libraries(test-export-graph-ops PRIVATE gguf-model-data)380    target_compile_definitions(test-export-graph-ops PRIVATE LLAMA_HF_FETCH)381endif()382