Felipe97/llama-cpp-compiled
01.1k
1find_package(Threads REQUIRED)2 3llama_add_compile_flags()4 5#6# llama-common-base7#8 9# Build info header10 11if(EXISTS "${PROJECT_SOURCE_DIR}/.git")12 set(GIT_DIR "${PROJECT_SOURCE_DIR}/.git")13 14 # Is git submodule15 if(NOT IS_DIRECTORY "${GIT_DIR}")16 file(READ ${GIT_DIR} REAL_GIT_DIR_LINK)17 string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK})18 string(FIND "${REAL_GIT_DIR}" "/" SLASH_POS)19 if (SLASH_POS EQUAL 0)20 set(GIT_DIR "${REAL_GIT_DIR}")21 else()22 set(GIT_DIR "${PROJECT_SOURCE_DIR}/${REAL_GIT_DIR}")23 endif()24 endif()25 26 if(EXISTS "${GIT_DIR}/index")27 # For build-info.cpp below28 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${GIT_DIR}/index")29 else()30 message(WARNING "Git index not found in git repository.")31 endif()32else()33 message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.")34endif()35 36set(TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in")37set(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/build-info.cpp")38 39configure_file(${TEMPLATE_FILE} ${OUTPUT_FILE})40 41set(TARGET llama-common-base)42add_library(${TARGET} STATIC ${OUTPUT_FILE})43 44target_include_directories(${TARGET} PUBLIC .)45 46if (BUILD_SHARED_LIBS)47 set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)48endif()49 50#51# llama-common52#53 54set(TARGET llama-common)55 56include(parsers/sources.cmake)57 58add_library(${TARGET}59 ${LLAMA_CHAT_PARSERS_SOURCES}60 arg.cpp61 arg.h62 base64.hpp63 chat-auto-parser-generator.cpp64 chat-auto-parser-helpers.cpp65 chat-auto-parser.h66 chat-diff-analyzer.cpp67 chat-peg-parser.cpp68 chat-peg-parser.h69 chat.cpp70 chat.h71 common.cpp72 common.h73 console.cpp74 console.h75 debug.cpp76 debug.h77 download.cpp78 download.h79 fit.cpp80 fit.h81 hf-cache.cpp82 hf-cache.h83 http.h84 imatrix-loader.cpp85 imatrix-loader.h86 json-schema-to-grammar.cpp87 json-schema.cpp88 json-schema.h89 json.cpp90 json.h91 llguidance.cpp92 log.cpp93 log.h94 ngram-cache.cpp95 ngram-cache.h96 ngram-map.cpp97 ngram-map.h98 ngram-mod.cpp99 ngram-mod.h100 peg-parser.cpp101 peg-parser.h102 preset.cpp103 preset.h104 reasoning-budget.cpp105 reasoning-budget.h106 sampling.cpp107 sampling.h108 speculative.cpp109 speculative.h110 subproc.cpp111 subproc.h112 trie.cpp113 trie.h114 unicode.cpp115 unicode.h116 jinja/lexer.cpp117 jinja/lexer.h118 jinja/parser.cpp119 jinja/parser.h120 jinja/runtime.cpp121 jinja/runtime.h122 jinja/value.cpp123 jinja/value.h124 jinja/string.cpp125 jinja/string.h126 jinja/caps.cpp127 jinja/caps.h128 )129 130set_target_properties(${TARGET} PROPERTIES131 VERSION ${LLAMA_VERSION_BASE}132 SOVERSION ${LLAMA_VERSION_MAJOR}133 MACHO_CURRENT_VERSION 0 # keep macOS linker from seeing oversized version number134)135 136target_include_directories(${TARGET} PUBLIC .)137target_link_libraries (${TARGET} PUBLIC vendor::nlohmann vendor::sheredom)138target_compile_features (${TARGET} PUBLIC cxx_std_17)139 140if (LLAMA_SUBPROCESS)141 target_compile_definitions(${TARGET} PUBLIC LLAMA_SUBPROCESS)142endif()143 144if (BUILD_SHARED_LIBS)145 set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)146 147 # TODO: make fine-grained exports in the future148 set_target_properties(${TARGET} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)149endif()150 151target_link_libraries(${TARGET} PUBLIC llama-common-base)152target_link_libraries(${TARGET} PRIVATE cpp-httplib)153 154if (LLAMA_LLGUIDANCE)155 include(ExternalProject)156 set(LLGUIDANCE_SRC ${CMAKE_BINARY_DIR}/llguidance/source)157 set(LLGUIDANCE_PATH ${LLGUIDANCE_SRC}/target/release)158 set(LLGUIDANCE_LIB_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}llguidance${CMAKE_STATIC_LIBRARY_SUFFIX}")159 160 ExternalProject_Add(llguidance_ext161 GIT_REPOSITORY https://github.com/guidance-ai/llguidance162 # v1.0.1:163 GIT_TAG d795912fedc7d393de740177ea9ea761e7905774164 PREFIX ${CMAKE_BINARY_DIR}/llguidance165 SOURCE_DIR ${LLGUIDANCE_SRC}166 BUILD_IN_SOURCE TRUE167 CONFIGURE_COMMAND ""168 BUILD_COMMAND cargo build --release --package llguidance169 INSTALL_COMMAND ""170 BUILD_BYPRODUCTS ${LLGUIDANCE_PATH}/${LLGUIDANCE_LIB_NAME} ${LLGUIDANCE_PATH}/llguidance.h171 UPDATE_COMMAND ""172 )173 target_compile_definitions(${TARGET} PUBLIC LLAMA_USE_LLGUIDANCE)174 175 add_library(llguidance STATIC IMPORTED)176 set_target_properties(llguidance PROPERTIES IMPORTED_LOCATION ${LLGUIDANCE_PATH}/${LLGUIDANCE_LIB_NAME})177 add_dependencies(llguidance llguidance_ext)178 179 target_include_directories(${TARGET} PRIVATE ${LLGUIDANCE_PATH})180 target_link_libraries(${TARGET} PRIVATE llguidance)181 if (WIN32)182 target_link_libraries(${TARGET} PRIVATE ws2_32 userenv ntdll bcrypt)183 endif()184endif()185 186target_link_libraries(${TARGET} PUBLIC llama Threads::Threads)187 