Files
live-caption/CMakeLists.txt
T
blumia 21d68e2294 feat(stream): add incremental streaming decode with 8s slice reuse
Add native streaming ASR: 8s-aligned audio slices are cached in the KV
cache, only new audio is encoded, and the previous text is fed back as
an assistant prefix with token rollback. Text matches offline results.
Streaming keeps each step within the 2s budget for segments up to 20s.

新增原生流式解码:8s 对齐的音频切片存入 KV 复用,只编码新音频,并把
上一轮文本作为 assistant 前缀回喂(带 token 回滚)。转写结果与离线
一致;20s 以内的段落每步计算都在 2s 预算内。
2026-10-12 13:01:26 +08:00

86 lines
2.9 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 3.24)
project(live-caption LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()
# ---------------------------------------------------------------------------
# llama.cpp / libmtmd 的搜索路径
#
# Debian/Deepin 把 llama 的 CMake config 放在非标准目录 cmake-private/,
# 而 pkg-config 的 llama.pc 又漏了 -lmtmd。所以这里把两个路径都塞进搜索前缀,
# 并单独用 find_library 找 mtmd。
# ---------------------------------------------------------------------------
foreach(_p
/usr/lib/x86_64-linux-gnu/llama
/usr/lib/x86_64-linux-gnu/llama/cmake-private
/usr/lib/x86_64-linux-gnu/llama/pkgconfig)
if(EXISTS "${_p}")
list(APPEND CMAKE_PREFIX_PATH "${_p}")
set(ENV{PKG_CONFIG_PATH} "${_p}:$ENV{PKG_CONFIG_PATH}")
endif()
endforeach()
find_package(Qt6 REQUIRED COMPONENTS Core)
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
pkg_check_modules(SAMPLERATE REQUIRED IMPORTED_TARGET samplerate)
pkg_check_modules(PULSE REQUIRED IMPORTED_TARGET libpulse)
# --- llama:优先系统 pkg-config,其次 CMake config,最后 FetchContent 兜底 ---
pkg_check_modules(LLAMA QUIET IMPORTED_TARGET llama)
if(LLAMA_FOUND)
set(LC_LLAMA_TARGET PkgConfig::LLAMA)
message(STATUS "llama: 使用系统 pkg-config (${LLAMA_VERSION})")
else()
message(STATUS "llama: 系统未找到,改用 FetchContent 拉取固定版本")
include(FetchContent)
set(FETCHCONTENT_TRY_FIND_PACKAGE_MODE ALWAYS) # 先 find_package,失败再拉源码
FetchContent_Declare(llama
GIT_REPOSITORY https://github.com/ggml-org/llama.cpp.git
GIT_TAG b9951
FIND_PACKAGE_ARGS NAMES llama CONFIG)
set(LLAMA_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_SERVER OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(llama)
set(LC_LLAMA_TARGET llama)
endif()
# --- mtmd:llama.pc 里没有,单独找 ---
find_library(LC_MTMD_LIB NAMES mtmd
HINTS /usr/lib/x86_64-linux-gnu/llama)
if(NOT LC_MTMD_LIB)
message(FATAL_ERROR "找不到 libmtmd(应随 libllama0 一起安装)")
endif()
message(STATUS "mtmd: ${LC_MTMD_LIB}")
# ---------------------------------------------------------------------------
add_executable(live-caption-cli
src/main.cpp
src/transcript.cpp
src/qwen3asr.cpp
src/streamingasr.cpp
src/audio.cpp
)
target_include_directories(live-caption-cli PRIVATE src)
target_link_libraries(live-caption-cli PRIVATE
Qt6::Core
Threads::Threads
PkgConfig::SAMPLERATE
PkgConfig::PULSE
${LC_LLAMA_TARGET}
${LC_MTMD_LIB}
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(live-caption-cli PRIVATE -Wall -Wextra -Wno-unused-parameter)
endif()