impress_voice_input/cmake/dependencies.cmake
impressionyang 8c2e787a25 feat: 添加 Windows 交叉编译支持与 ONNX Runtime MinGW 兼容方案
- 新增 C API shim (ort_api_shim.h) 解决 MinGW 与 ONNX Runtime 的 SAL 注解/_stdcall 兼容性问题
- 新增轻量级 C++ 包装器 (ort_minimal) 替代 onnxruntime_cxx_api.h
- cmake/dependencies.cmake 支持 Windows/ Linux 平台自动识别依赖路径
- 修复音频采集 paNonInterleaved bug(指针被误解析为 float 导致 RMS=inf)
- 修复 Windows 热键和 UI 相关代码
- 添加 MinGW 交叉编译工具链配置

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 11:50:16 +08:00

112 lines
4.2 KiB
CMake
Raw Permalink 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.

include(FetchContent)
set(THIRD_PARTY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party")
# ============================================================================
# ONNX Runtime
# ============================================================================
if(WIN32)
# Windows 版本onnxruntime.dll
set(ONNXRUNTIME_ROOT "${THIRD_PARTY_DIR}/onnxruntime-win-x64")
if(NOT EXISTS "${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll")
# 回退到旧目录名
set(ONNXRUNTIME_ROOT "${THIRD_PARTY_DIR}/onnxruntime")
endif()
# 直接用 DLL 路径MinGW 可直接链接 DLL
if(EXISTS "${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll")
set(ONNXRUNTIME_LIB "${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll")
set(ONNXRUNTIME_DLL "${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll")
set(ONNXRUNTIME_INCLUDE_DIR "${ONNXRUNTIME_ROOT}/include")
endif()
if(NOT ONNXRUNTIME_INCLUDE_DIR)
set(ONNXRUNTIME_INCLUDE_DIR "${ONNXRUNTIME_ROOT}/include")
endif()
else()
# Linux 版本libonnxruntime.so
set(ONNXRUNTIME_ROOT "${THIRD_PARTY_DIR}/onnxruntime")
find_library(ONNXRUNTIME_LIB
NAMES onnxruntime
PATHS "${ONNXRUNTIME_ROOT}/lib"
NO_DEFAULT_PATH
)
find_path(ONNXRUNTIME_INCLUDE_DIR
NAMES onnxruntime_cxx_api.h
PATHS "${ONNXRUNTIME_ROOT}/include"
NO_DEFAULT_PATH
)
endif()
if(ONNXRUNTIME_LIB AND ONNXRUNTIME_INCLUDE_DIR)
set(ONNXRUNTIME_LIBRARIES ${ONNXRUNTIME_LIB})
set(ONNXRUNTIME_INCLUDE_DIRS ${ONNXRUNTIME_INCLUDE_DIR})
message(STATUS "找到 ONNX Runtime: ${ONNXRUNTIME_LIB}")
add_compile_definitions(HAVE_ONNXRUNTIME)
else()
message(WARNING "未找到 ONNX Runtime推理功能将使用占位实现")
endif()
# ============================================================================
# PortAudio
# ============================================================================
set(PORTAUDIO_ROOT "${THIRD_PARTY_DIR}/portaudio")
if(WIN32)
# Windows 版本libportaudio.dll 在 bin/ 目录
if(EXISTS "${PORTAUDIO_ROOT}/bin/libportaudio.dll")
set(PORTAUDIO_LIB "${PORTAUDIO_ROOT}/bin/libportaudio.dll")
set(PORTAUDIO_DLL "${PORTAUDIO_ROOT}/bin/libportaudio.dll")
endif()
if(EXISTS "${PORTAUDIO_ROOT}/include/portaudio.h")
set(PORTAUDIO_INCLUDE_DIR "${PORTAUDIO_ROOT}/include")
endif()
else()
# Linux 版本:优先使用构建好的本地库
find_library(PORTAUDIO_LIB
NAMES portaudio libportaudio
PATHS "${PORTAUDIO_ROOT}/lib" /usr/lib64 /usr/lib /usr/local/lib
NO_DEFAULT_PATH
)
find_path(PORTAUDIO_INCLUDE_DIR
NAMES portaudio.h
PATHS "${PORTAUDIO_ROOT}/include" /usr/include /usr/include/portaudio /usr/local/include
NO_DEFAULT_PATH
)
# 回退:通过 pkg-config 查找
if(NOT PORTAUDIO_LIB OR NOT PORTAUDIO_INCLUDE_DIR)
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PORTAUDIO_PC portaudio-2.0 QUIET)
if(PORTAUDIO_PC_FOUND)
set(PORTAUDIO_LIBRARIES ${PORTAUDIO_PC_LIBRARIES})
set(PORTAUDIO_INCLUDE_DIRS ${PORTAUDIO_PC_INCLUDE_DIRS})
endif()
endif()
endif()
endif()
if(PORTAUDIO_LIB AND PORTAUDIO_INCLUDE_DIR)
set(PORTAUDIO_LIBRARIES ${PORTAUDIO_LIB})
set(PORTAUDIO_INCLUDE_DIRS ${PORTAUDIO_INCLUDE_DIR})
message(STATUS "找到 PortAudio: ${PORTAUDIO_LIB}")
add_compile_definitions(HAVE_PORTAUDIO)
else()
message(WARNING "未找到 PortAudio音频采集功能将使用占位实现")
endif()
# ============================================================================
# dr_libs (header-only)
# ============================================================================
set(DR_LIBS_INCLUDE_DIR "${THIRD_PARTY_DIR}/dr_libs")
if(EXISTS "${DR_LIBS_INCLUDE_DIR}/dr_wav.h")
message(STATUS "找到 dr_libs: ${DR_LIBS_INCLUDE_DIR}")
add_compile_definitions(HAVE_DR_LIBS)
else()
message(WARNING "未找到 dr_libs 头文件")
endif()
# ============================================================================
# nlohmann/json (header-only)
# ============================================================================
set(NLOHMANN_JSON_INCLUDE_DIR "${THIRD_PARTY_DIR}/nlohmann_json")