`vendor/MetasequoiaImeEngine` submodule 改为 `engine/` 目录,导入的是 product-lock.json 原本钉住的提交 c810d201,逐文件核对过 blob,因此这是一次 搬迁而不是引擎升级。引擎自己的嵌套 submodule(googlepinyinime-rev、utfcpp、 miniaudio)按各自 gitlink 一并展开,来源与提交见 engine/UPSTREAM.md。 Windows 专门化裁掉了不属于本产品的部分:whisper.cpp 与本地推理 provider、 macOS 示例宿主、整个 dictionary/ 建库流水线、上游 CI 与 release-please 配置。 词库仍按 product-lock.json 在构建时取发布产物。 引擎不再进 product-lock.json:没有 gitlink 就没有可比对的东西,锁里写一个上游 commit 等于宣称这棵树仍等于上游,而第一个 Windows 专门化改动落地时这句话就假了。 verify-contracts / verify-checkout 随之移除,verify-published 保留。 CI 与工具链:引擎源码并入根 scripts/format.sh(删掉引擎自己的那份,避免两套排除 列表分叉);引擎 voice.yml 里的 silero_vad.onnx 摘要校验移到本仓 lock job; engine-bump-triage 工作流与其测试删除;gitsubmodule 的 dependabot 频率由 daily 改为 monthly。 README、README.en、AGENTS.md、CONTRIBUTING、docs/product-release.md 及各子目录 文档同步说明新的位置与边界。
59 lines
2.9 KiB
CMake
59 lines
2.9 KiB
CMake
cmake_minimum_required(VERSION 3.25)
|
|
project(MetasequoiaImeVoice LANGUAGES C CXX)
|
|
if(APPLE)
|
|
enable_language(OBJC OBJCXX)
|
|
endif()
|
|
if(PROJECT_IS_TOP_LEVEL)
|
|
include(CTest)
|
|
endif()
|
|
option(MSIME_VOICE_CAPTURE "Build the cross-platform miniaudio capture adapter" ON)
|
|
option(MSIME_VOICE_WINDOWS_APP "Build the imported standalone Windows host" OFF)
|
|
find_package(CURL REQUIRED)
|
|
find_package(nlohmann_json CONFIG REQUIRED)
|
|
find_package(Threads REQUIRED)
|
|
add_library(MetasequoiaImeVoice STATIC src/vad.cpp src/cloud_stt_worker.cpp src/text_polisher.cpp src/http_client.cpp src/provider_protocol.cpp)
|
|
add_library(MetasequoiaIme::Voice ALIAS MetasequoiaImeVoice)
|
|
target_compile_features(MetasequoiaImeVoice PUBLIC cxx_std_17)
|
|
target_include_directories(MetasequoiaImeVoice PUBLIC include include/msime/voice)
|
|
target_link_libraries(MetasequoiaImeVoice PRIVATE CURL::libcurl nlohmann_json::nlohmann_json PUBLIC Threads::Threads)
|
|
if(MSVC)
|
|
target_compile_options(MetasequoiaImeVoice PRIVATE /W4 /utf-8)
|
|
else()
|
|
target_compile_options(MetasequoiaImeVoice PRIVATE -Wall -Wextra -Wpedantic)
|
|
endif()
|
|
if(MSIME_VOICE_CAPTURE)
|
|
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/miniaudio/miniaudio.h")
|
|
message(FATAL_ERROR "engine/voice/third_party/miniaudio is vendored in-tree; a missing miniaudio.h means an incomplete checkout")
|
|
endif()
|
|
add_library(MetasequoiaImeVoiceCapture STATIC src/audio_capture.cpp)
|
|
add_library(MetasequoiaIme::VoiceCapture ALIAS MetasequoiaImeVoiceCapture)
|
|
target_compile_features(MetasequoiaImeVoiceCapture PUBLIC cxx_std_17)
|
|
target_include_directories(MetasequoiaImeVoiceCapture PUBLIC include include/msime/voice PRIVATE third_party/miniaudio)
|
|
target_link_libraries(MetasequoiaImeVoiceCapture PUBLIC Threads::Threads PRIVATE ${CMAKE_DL_LIBS})
|
|
if(APPLE)
|
|
target_link_libraries(MetasequoiaImeVoiceCapture PRIVATE "-framework CoreFoundation" "-framework CoreAudio" "-framework AudioToolbox")
|
|
elseif(WIN32)
|
|
target_link_libraries(MetasequoiaImeVoiceCapture PRIVATE ole32)
|
|
else()
|
|
target_link_libraries(MetasequoiaImeVoiceCapture PRIVATE m)
|
|
endif()
|
|
endif()
|
|
if(BUILD_TESTING)
|
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
add_executable(test_voice tests/test_voice.cpp)
|
|
target_link_libraries(test_voice PRIVATE MetasequoiaIme::Voice)
|
|
if(MSVC)
|
|
target_compile_options(test_voice PRIVATE /utf-8)
|
|
endif()
|
|
add_test(NAME voice_audio_contract COMMAND test_voice)
|
|
add_test(NAME voice_http_contract COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_http.py $<TARGET_FILE:test_voice>)
|
|
if(MSIME_VOICE_CAPTURE)
|
|
add_executable(test_voice_capture tests/test_capture.cpp)
|
|
target_link_libraries(test_voice_capture PRIVATE MetasequoiaIme::VoiceCapture)
|
|
add_test(NAME voice_capture_lifetime COMMAND test_voice_capture)
|
|
endif()
|
|
endif()
|
|
if(MSIME_VOICE_WINDOWS_APP)
|
|
add_subdirectory(platforms/windows)
|
|
endif()
|