2024-06-26 18:33:02 +03:00
find_package ( Threads REQUIRED )
2023-11-02 02:50:16 -04:00
2024-11-26 14:18:08 +02:00
llama_add_compile_flags ()
2026-04-17 11:11:46 +03:00
#
# llama-common-base
#
2023-11-02 02:50:16 -04:00
# Build info header
2025-06-11 19:04:23 +02:00
if ( EXISTS "${PROJECT_SOURCE_DIR}/.git" )
set ( GIT_DIR "${PROJECT_SOURCE_DIR}/.git" )
2023-11-02 02:50:16 -04:00
# Is git submodule
if ( NOT IS_DIRECTORY "${GIT_DIR}" )
file ( READ ${ GIT_DIR } REAL_GIT_DIR_LINK )
string ( REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${ REAL_GIT_DIR_LINK } )
2023-11-30 17:23:08 -05:00
string ( FIND "${REAL_GIT_DIR}" "/" SLASH_POS )
if ( SLASH_POS EQUAL 0 )
set ( GIT_DIR "${REAL_GIT_DIR}" )
else ()
2025-06-11 19:04:23 +02:00
set ( GIT_DIR "${PROJECT_SOURCE_DIR}/${REAL_GIT_DIR}" )
2023-11-30 17:23:08 -05:00
endif ()
2023-11-02 02:50:16 -04:00
endif ()
2024-03-05 05:26:55 +11:00
if ( EXISTS "${GIT_DIR}/index" )
2025-06-13 06:51:34 +00:00
# For build-info.cpp below
set_property ( DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${GIT_DIR}/index" )
2024-03-05 05:26:55 +11:00
else ()
message ( WARNING "Git index not found in git repository." )
endif ()
2023-11-02 02:50:16 -04:00
else ()
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." )
endif ()
2025-06-13 06:51:34 +00:00
set ( TEMPLATE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in" )
set ( OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/build-info.cpp" )
2026-04-17 11:11:46 +03:00
2025-06-13 06:51:34 +00:00
configure_file ( ${ TEMPLATE_FILE } ${ OUTPUT_FILE } )
2026-04-17 11:11:46 +03:00
set ( TARGET llama-common-base )
add_library ( ${ TARGET } STATIC ${ OUTPUT_FILE } )
target_include_directories ( ${ TARGET } PUBLIC . )
2023-11-02 02:50:16 -04:00
if ( BUILD_SHARED_LIBS )
set_target_properties ( ${ TARGET } PROPERTIES POSITION_INDEPENDENT_CODE ON )
endif ()
2026-04-17 11:11:46 +03:00
#
# llama-common
#
2023-08-21 23:07:43 +03:00
2026-04-17 11:11:46 +03:00
set ( TARGET llama-common )
add_library ( ${ TARGET }
2024-09-09 23:36:09 +02:00
arg.cpp
2024-09-15 20:46:12 +03:00
arg.h
base64.hpp
2026-03-06 21:01:00 +01:00
chat-auto-parser-generator.cpp
chat-auto-parser-helpers.cpp
chat-auto-parser.h
chat-diff-analyzer.cpp
2025-12-03 04:45:32 -06:00
chat-peg-parser.cpp
chat-peg-parser.h
2025-05-30 16:25:45 +03:00
chat.cpp
chat.h
2024-09-15 20:46:12 +03:00
common.cpp
common.h
2023-08-21 23:07:43 +03:00
console.cpp
2024-09-15 20:46:12 +03:00
console.h
2026-01-14 20:29:35 +01:00
debug.cpp
debug.h
2025-11-07 11:23:34 +01:00
download.cpp
download.h
2026-04-21 09:54:36 +03:00
fit.cpp
fit.h
2026-03-24 07:30:33 +01:00
hf-cache.cpp
hf-cache.h
2025-10-01 19:22:18 +02:00
http.h
2026-06-04 11:45:40 -04:00
imatrix-loader.cpp
imatrix-loader.h
2025-05-30 16:25:45 +03:00
json-schema-to-grammar.cpp
2025-02-01 23:55:32 -08:00
llguidance.cpp
2024-09-15 20:46:12 +03:00
log.cpp
log.h
2024-03-23 01:24:36 +01:00
ngram-cache.cpp
2024-09-15 20:46:12 +03:00
ngram-cache.h
2026-01-28 18:42:42 +01:00
ngram-map.cpp
ngram-map.h
2026-01-30 18:21:48 +02:00
ngram-mod.cpp
ngram-mod.h
2025-12-03 04:45:32 -06:00
peg-parser.cpp
peg-parser.h
2025-12-10 22:18:21 +01:00
preset.cpp
preset.h
2026-03-11 10:26:12 +01:00
reasoning-budget.cpp
reasoning-budget.h
2024-09-15 20:46:12 +03:00
sampling.cpp
sampling.h
2024-11-25 09:58:41 +02:00
speculative.cpp
speculative.h
2026-07-26 20:54:25 +02:00
subproc.cpp
subproc.h
2026-07-25 04:58:09 -05:00
trie.cpp
trie.h
2025-12-03 04:45:32 -06:00
unicode.cpp
unicode.h
2026-01-16 11:22:06 +01:00
jinja/lexer.cpp
jinja/lexer.h
jinja/parser.cpp
jinja/parser.h
jinja/runtime.cpp
jinja/runtime.h
jinja/value.cpp
jinja/value.h
jinja/string.cpp
jinja/string.h
jinja/caps.cpp
jinja/caps.h
2023-08-21 23:07:43 +03:00
)
2026-04-17 11:11:46 +03:00
set_target_properties ( ${ TARGET } PROPERTIES
VERSION ${ LLAMA_INSTALL_VERSION }
SOVERSION 0
MACHO_CURRENT_VERSION 0 # keep macOS linker from seeing oversized version number
)
2025-12-20 21:43:21 -06:00
target_include_directories ( ${ TARGET } PUBLIC . ../vendor )
target_compile_features ( ${ TARGET } PUBLIC cxx_std_17 )
2026-07-26 20:54:25 +02:00
if ( LLAMA_SUBPROCESS )
target_compile_definitions ( ${ TARGET } PUBLIC LLAMA_SUBPROCESS )
endif ()
2023-08-21 23:07:43 +03:00
if ( BUILD_SHARED_LIBS )
set_target_properties ( ${ TARGET } PROPERTIES POSITION_INDEPENDENT_CODE ON )
2026-04-17 11:11:46 +03:00
# TODO: make fine-grained exports in the future
set_target_properties ( ${ TARGET } PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON )
2023-08-21 23:07:43 +03:00
endif ()
2026-04-17 11:11:46 +03:00
target_link_libraries ( ${ TARGET } PUBLIC llama-common-base )
target_link_libraries ( ${ TARGET } PRIVATE cpp-httplib )
2025-09-27 11:12:46 +02:00
2025-02-01 23:55:32 -08:00
if ( LLAMA_LLGUIDANCE )
include ( ExternalProject )
set ( LLGUIDANCE_SRC ${ CMAKE_BINARY_DIR } /llguidance/source )
set ( LLGUIDANCE_PATH ${ LLGUIDANCE_SRC } /target/release )
2026-02-17 08:36:45 +01:00
set ( LLGUIDANCE_LIB_NAME "${CMAKE_STATIC_LIBRARY_PREFIX}llguidance${CMAKE_STATIC_LIBRARY_SUFFIX}" )
2025-02-14 12:46:08 -08:00
2025-02-01 23:55:32 -08:00
ExternalProject_Add ( llguidance_ext
GIT_REPOSITORY https://github.com/guidance-ai/llguidance
2025-07-10 13:19:37 +08:00
# v1.0.1:
GIT_TAG d795912fedc7d393de740177ea9ea761e7905774
2025-02-01 23:55:32 -08:00
PREFIX ${ CMAKE_BINARY_DIR } /llguidance
SOURCE_DIR ${ LLGUIDANCE_SRC }
BUILD_IN_SOURCE TRUE
CONFIGURE_COMMAND ""
2025-07-10 13:19:13 +08:00
BUILD_COMMAND cargo build --release --package llguidance
2025-02-01 23:55:32 -08:00
INSTALL_COMMAND ""
2025-02-14 12:46:08 -08:00
BUILD_BYPRODUCTS ${ LLGUIDANCE_PATH } / ${ LLGUIDANCE_LIB_NAME } ${ LLGUIDANCE_PATH } /llguidance.h
2025-02-01 23:55:32 -08:00
UPDATE_COMMAND ""
)
target_compile_definitions ( ${ TARGET } PUBLIC LLAMA_USE_LLGUIDANCE )
add_library ( llguidance STATIC IMPORTED )
2025-02-14 12:46:08 -08:00
set_target_properties ( llguidance PROPERTIES IMPORTED_LOCATION ${ LLGUIDANCE_PATH } / ${ LLGUIDANCE_LIB_NAME } )
2025-02-01 23:55:32 -08:00
add_dependencies ( llguidance llguidance_ext )
target_include_directories ( ${ TARGET } PRIVATE ${ LLGUIDANCE_PATH } )
2026-02-17 08:36:45 +01:00
target_link_libraries ( ${ TARGET } PRIVATE llguidance )
if ( WIN32 )
target_link_libraries ( ${ TARGET } PRIVATE ws2_32 userenv ntdll bcrypt )
endif ()
endif ()
2025-02-01 23:55:32 -08:00
2026-02-17 08:36:45 +01:00
target_link_libraries ( ${ TARGET } PUBLIC llama Threads::Threads )