include(FetchContent) set(THIRD_PARTY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party") # ---------------------------------------------------------------------------- # ONNX Runtime # ---------------------------------------------------------------------------- set(ONNXRUNTIME_ROOT "${THIRD_PARTY_DIR}/onnxruntime") # Windows 需要预编译的 Windows 版本,与 Linux 分开存放 if(WIN32) set(ONNXRUNTIME_LIB_PATH "${ONNXRUNTIME_ROOT}/win64/lib") set(ONNXRUNTIME_BIN_PATH "${ONNXRUNTIME_ROOT}/win64/bin") else() set(ONNXRUNTIME_LIB_PATH "${ONNXRUNTIME_ROOT}/lib") endif() find_library(ONNXRUNTIME_LIB NAMES onnxruntime onnxruntime.lib PATHS "${ONNXRUNTIME_LIB_PATH}" NO_DEFAULT_PATH ) find_path(ONNXRUNTIME_INCLUDE_DIR NAMES onnxruntime_cxx_api.h PATHS "${ONNXRUNTIME_ROOT}/include" NO_DEFAULT_PATH ) 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) # Windows 需要将 DLL 复制到输出目录 if(WIN32 AND EXISTS "${ONNXRUNTIME_BIN_PATH}") file(GLOB ONNX_DLLS "${ONNXRUNTIME_BIN_PATH}/*.dll") foreach(DLL ${ONNX_DLLS}) get_filename_component(DLL_NAME ${DLL} NAME) add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${DLL}" "$/${DLL_NAME}" COMMENT "复制 ${DLL_NAME} 到输出目录" ) endforeach() endif() else() message(WARNING "未找到 ONNX Runtime,推理功能将使用占位实现") endif() # ---------------------------------------------------------------------------- # PortAudio # ---------------------------------------------------------------------------- set(PORTAUDIO_ROOT "${THIRD_PARTY_DIR}/portaudio") # Windows 需要 MinGW 编译的版本,与 Linux 分开存放 if(WIN32) set(PORTAUDIO_LIB_PATH "${PORTAUDIO_ROOT}/lib/win64") elseif(APPLE) set(PORTAUDIO_LIB_PATH "${PORTAUDIO_ROOT}/lib/macos") else() set(PORTAUDIO_LIB_PATH "${PORTAUDIO_ROOT}/lib") endif() find_library(PORTAUDIO_LIB NAMES portaudio libportaudio PATHS "${PORTAUDIO_LIB_PATH}" NO_DEFAULT_PATH ) find_path(PORTAUDIO_INCLUDE_DIR NAMES portaudio.h PATHS "${PORTAUDIO_ROOT}/include" NO_DEFAULT_PATH ) 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")