77 lines
3.1 KiB
CMake
77 lines
3.1 KiB
CMake
# cmark-gfm: markdown -> block structure (pkg-config; no CMake config
|
|
# package is installed).
|
|
pkg_check_modules(CMARK_GFM REQUIRED IMPORTED_TARGET libcmark-gfm)
|
|
|
|
# tree-sitter runtime for code block highlighting (grammars are
|
|
# dlopen()'d at runtime and optional).
|
|
pkg_check_modules(TREE_SITTER REQUIRED IMPORTED_TARGET tree-sitter)
|
|
|
|
# JKQTMathText (JKQtPlotter) for LaTeX rendering. The config files live
|
|
# in a shared JKQTPlotter6 directory, not one named after the package.
|
|
find_path(JKQTPlotter6_CMAKE_DIR
|
|
NAMES JKQTMathText6Config.cmake
|
|
HINTS /usr/lib/cmake/JKQTPlotter6 /usr/local/lib/cmake/JKQTPlotter6
|
|
DOC "Directory containing the JKQtPlotter cmake package files")
|
|
find_package(JKQTMathText6 REQUIRED PATHS "${JKQTPlotter6_CMAKE_DIR}")
|
|
|
|
# Embed the vendored highlight queries as C++ string literals.
|
|
set(HIGHLIGHT_QUERY_LANGS c cpp python javascript typescript bash json rust go yaml toml sql)
|
|
set(HIGHLIGHT_QUERIES_HPP "${CMAKE_CURRENT_BINARY_DIR}/highlight-queries.hpp")
|
|
set(_hl_header "#pragma once\n\n// Vendored tree-sitter highlight queries (MIT; see the per-file\n// source headers in the highlight-queries/ directory).\nnamespace ZShell::llm::hq {\n")
|
|
foreach(_hl_lang IN LISTS HIGHLIGHT_QUERY_LANGS)
|
|
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/highlight-queries/${_hl_lang}.scm" _hl_src)
|
|
string(APPEND _hl_header "inline constexpr const char* ${_hl_lang} = R\"ZSQUERY(${_hl_src})ZSQUERY\";\n")
|
|
endforeach()
|
|
string(APPEND _hl_header "}\n")
|
|
file(WRITE "${HIGHLIGHT_QUERIES_HPP}" "${_hl_header}")
|
|
|
|
# Embed the vendored Latin Modern fonts (GUST Font License; provenance
|
|
# in fonts/latinmodern/GUST-FONT-LICENSE.txt) as byte arrays.
|
|
set(LM_FONTS
|
|
lmroman10-regular
|
|
lmroman10-italic
|
|
lmroman10-bold
|
|
lmroman10-bolditalic
|
|
latinmodern-math)
|
|
set(LM_FONTS_HPP "${CMAKE_CURRENT_BINARY_DIR}/latinmodern-fonts.hpp")
|
|
set(_lm_header "#pragma once\n\n// Vendored Latin Modern fonts (GUST Font License; see\n// fonts/latinmodern/GUST-FONT-LICENSE.txt).\nnamespace ZShell::llm::lmfont {\n")
|
|
foreach(_lm_font IN LISTS LM_FONTS)
|
|
string(REPLACE "-" "_" _lm_sym "${_lm_font}")
|
|
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/fonts/latinmodern/${_lm_font}.otf" _lm_hex HEX)
|
|
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," _lm_bytes "${_lm_hex}")
|
|
string(APPEND _lm_header "inline const unsigned char ${_lm_sym}[] = { ${_lm_bytes} };\n")
|
|
endforeach()
|
|
string(APPEND _lm_header "}\n")
|
|
file(WRITE "${LM_FONTS_HPP}" "${_lm_header}")
|
|
|
|
qml_module(ZShell-llm
|
|
URI ZShell.Llm
|
|
SOURCES
|
|
chat.hpp chat.cpp
|
|
chatstore.hpp chatstore.cpp
|
|
codehighlighter.hpp codehighlighter.cpp
|
|
generation.hpp generation.cpp
|
|
llmclient.hpp llmclient.cpp
|
|
markdownblock.hpp
|
|
markdownparser.hpp markdownparser.cpp
|
|
mathtext.hpp mathtext.cpp
|
|
message.hpp message.cpp
|
|
messagemodel.hpp messagemodel.cpp
|
|
segment.hpp segment.cpp
|
|
session.hpp session.cpp
|
|
tool.hpp tool.cpp
|
|
webfetchtool.hpp webfetchtool.cpp
|
|
LIBRARIES
|
|
Qt::Network
|
|
Qt::Sql
|
|
Qt::Gui
|
|
Qt::Widgets
|
|
ZShell-config
|
|
JKQTPlotter::JKQTMathText
|
|
PkgConfig::CMARK_GFM
|
|
PkgConfig::TREE_SITTER
|
|
)
|
|
|
|
target_include_directories(ZShell-llm PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
|
target_include_directories(ZShell-llm PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../Config)
|