char-fork/llama.cpp

git clone https://git.t4t.associates/char-fork/llama.cpp

Daniel Beveniuscmake : remove precompiled headers (#28892)f3a184b15

char/aliceai-t5-moe
4.9 KiB186 linesraw
1find_package(Threads REQUIRED)
2
3llama_add_compile_flags()
4
5#
6# llama-common-base
7#
8
9# Build info header
10
11if(EXISTS "${PROJECT_SOURCE_DIR}/.git")
12    set(GIT_DIR "${PROJECT_SOURCE_DIR}/.git")
13
14    # Is git submodule
15    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 below
28        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-common
52#
53
54set(TARGET llama-common)
55
56include(parsers/sources.cmake)
57
58add_library(${TARGET}
59    ${LLAMA_CHAT_PARSERS_SOURCES}
60    arg.cpp
61    arg.h
62    base64.hpp
63    chat-auto-parser-generator.cpp
64    chat-auto-parser-helpers.cpp
65    chat-auto-parser.h
66    chat-diff-analyzer.cpp
67    chat-peg-parser.cpp
68    chat-peg-parser.h
69    chat.cpp
70    chat.h
71    common.cpp
72    common.h
73    console.cpp
74    console.h
75    debug.cpp
76    debug.h
77    download.cpp
78    download.h
79    fit.cpp
80    fit.h
81    hf-cache.cpp
82    hf-cache.h
83    http.h
84    imatrix-loader.cpp
85    imatrix-loader.h
86    json-schema-to-grammar.cpp
87    json-schema.cpp
88    json-schema.h
89    json.cpp
90    json.h
91    llguidance.cpp
92    log.cpp
93    log.h
94    ngram-cache.cpp
95    ngram-cache.h
96    ngram-map.cpp
97    ngram-map.h
98    ngram-mod.cpp
99    ngram-mod.h
100    peg-parser.cpp
101    peg-parser.h
102    preset.cpp
103    preset.h
104    reasoning-budget.cpp
105    reasoning-budget.h
106    sampling.cpp
107    sampling.h
108    speculative.cpp
109    speculative.h
110    subproc.cpp
111    subproc.h
112    trie.cpp
113    trie.h
114    unicode.cpp
115    unicode.h
116    jinja/lexer.cpp
117    jinja/lexer.h
118    jinja/parser.cpp
119    jinja/parser.h
120    jinja/runtime.cpp
121    jinja/runtime.h
122    jinja/value.cpp
123    jinja/value.h
124    jinja/string.cpp
125    jinja/string.h
126    jinja/caps.cpp
127    jinja/caps.h
128    )
129
130set_target_properties(${TARGET} PROPERTIES
131    VERSION ${LLAMA_VERSION_BASE}
132    SOVERSION ${LLAMA_VERSION_MAJOR}
133    MACHO_CURRENT_VERSION 0 # keep macOS linker from seeing oversized version number
134)
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 future
148    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_ext
161        GIT_REPOSITORY https://github.com/guidance-ai/llguidance
162        # v1.0.1:
163        GIT_TAG d795912fedc7d393de740177ea9ea761e7905774
164        PREFIX ${CMAKE_BINARY_DIR}/llguidance
165        SOURCE_DIR ${LLGUIDANCE_SRC}
166        BUILD_IN_SOURCE TRUE
167        CONFIGURE_COMMAND ""
168        BUILD_COMMAND cargo build --release --package llguidance
169        INSTALL_COMMAND ""
170        BUILD_BYPRODUCTS ${LLGUIDANCE_PATH}/${LLGUIDANCE_LIB_NAME} ${LLGUIDANCE_PATH}/llguidance.h
171        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)