diff --git a/CMakeLists.txt b/CMakeLists.txt index b906194..a37ce46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,69 +31,10 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}) include(FetchContent) set(FETCHCONTENT_QUIET OFF) -# ONNX Runtime (pre-built) - https://github.com/microsoft/onnxruntime/releases -set(ONNXRUNTIME_VERSION "1.23.2") +find_package(onnxruntime REQUIRED) -if(CMAKE_SYSTEM_NAME STREQUAL "Linux") - if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64") - set(ONNXRUNTIME_ARCH "x64") - elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") - set(ONNXRUNTIME_ARCH "aarch64") - endif() - set(ONNXRUNTIME_URL "https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/onnxruntime-linux-${ONNXRUNTIME_ARCH}-${ONNXRUNTIME_VERSION}.tgz") -elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(ONNXRUNTIME_URL "https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/onnxruntime-osx-universal2-${ONNXRUNTIME_VERSION}.tgz") -elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(ONNXRUNTIME_URL "https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/onnxruntime-win-x64-${ONNXRUNTIME_VERSION}.zip") -endif() - -FetchContent_Declare(onnxruntime - URL ${ONNXRUNTIME_URL} - DOWNLOAD_EXTRACT_TIMESTAMP TRUE -) -FetchContent_MakeAvailable(onnxruntime) - -set(ONNXRUNTIME_ROOT ${onnxruntime_SOURCE_DIR}) -set(ONNXRUNTIME_INCLUDE_DIR ${ONNXRUNTIME_ROOT}/include) -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - set(ONNXRUNTIME_LIB ${ONNXRUNTIME_ROOT}/lib/onnxruntime.lib) -elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(ONNXRUNTIME_LIB ${ONNXRUNTIME_ROOT}/lib/libonnxruntime.dylib) -else() - set(ONNXRUNTIME_LIB ${ONNXRUNTIME_ROOT}/lib/libonnxruntime.so) -endif() - -# SentencePiece (static library only) - https://github.com/google/sentencepiece/releases -set(SPM_ENABLE_SHARED OFF CACHE BOOL "" FORCE) -set(SPM_ENABLE_TCMALLOC OFF CACHE BOOL "" FORCE) -set(SPM_PROTOBUF_PROVIDER "internal" CACHE STRING "" FORCE) -set(SPM_ABSL_PROVIDER "internal" CACHE STRING "" FORCE) -set(SPM_ENABLE_NFKC_COMPILE OFF CACHE BOOL "" FORCE) - -# Patch SentencePiece for GCC 14 compatibility and CMake deprecation warning -file(WRITE ${CMAKE_BINARY_DIR}/patch_sentencepiece.cmake " -file(READ \"\${SOURCE_DIR}/src/sentencepiece_processor.h\" CONTENT) -if(NOT CONTENT MATCHES \"#include \") - string(REPLACE \"#include \" \"#include \\n#include \" CONTENT \"\${CONTENT}\") - file(WRITE \"\${SOURCE_DIR}/src/sentencepiece_processor.h\" \"\${CONTENT}\") - message(STATUS \"Patched sentencepiece_processor.h for GCC 14 compatibility\") -endif() -file(READ \"\${SOURCE_DIR}/CMakeLists.txt\" CMLCONTENT) -string(REGEX REPLACE \"cmake_minimum_required\\\\(VERSION [0-9.]+\\\\)\" \"cmake_minimum_required(VERSION 3.14)\" CMLCONTENT \"\${CMLCONTENT}\") -file(WRITE \"\${SOURCE_DIR}/CMakeLists.txt\" \"\${CMLCONTENT}\") -") - -FetchContent_Declare(sentencepiece - GIT_REPOSITORY https://github.com/google/sentencepiece.git - GIT_TAG v0.2.1 - GIT_SHALLOW TRUE - PATCH_COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR= -P ${CMAKE_BINARY_DIR}/patch_sentencepiece.cmake - EXCLUDE_FROM_ALL -) -FetchContent_MakeAvailable(sentencepiece) -target_compile_options(sentencepiece-static PRIVATE -w) - -set(SENTENCEPIECE_INCLUDE_DIRS "${sentencepiece_SOURCE_DIR}/src") +find_package(PkgConfig REQUIRED) +pkg_check_modules(SENTENCEPIECE REQUIRED sentencepiece) # dr_libs (header-only) - https://github.com/mackron/dr_libs FetchContent_Declare(dr_libs @@ -119,8 +60,8 @@ target_include_directories(pocket-tts PRIVATE ) target_link_libraries(pocket-tts PRIVATE - ${ONNXRUNTIME_LIB} - sentencepiece-static + onnxruntime::onnxruntime + sentencepiece ) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") @@ -129,18 +70,6 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") target_link_libraries(pocket-tts PRIVATE ws2_32) endif() -# Copy ONNX runtime shared library next to outputs -if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - add_custom_command(TARGET pocket-tts POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll - $ - ) -else() - add_custom_command(TARGET pocket-tts POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ONNXRUNTIME_LIB} $ - ) -endif() # Shared library (for FFI from Deno/Python) # Build with: cmake -B .build -DBUILD_SHARED_LIB=ON @@ -158,10 +87,10 @@ if(BUILD_SHARED_LIB) # Link against the unversioned .so directly and override the SONAME dependency # so it looks for libonnxruntime.so (what we ship) not libonnxruntime.so.1 target_link_libraries(pocket-tts-lib PRIVATE - -l:libonnxruntime.so - sentencepiece-static + onnxruntime::onnxruntime + sentencepiece ) - target_link_directories(pocket-tts-lib PRIVATE ${ONNXRUNTIME_ROOT}/lib) + target_link_directories(pocket-tts-lib PRIVATE onnxruntime::onxxruntime) target_include_directories(pocket-tts-lib PRIVATE ${ONNXRUNTIME_INCLUDE_DIR} @@ -175,24 +104,6 @@ if(BUILD_SHARED_LIB) target_link_libraries(pocket-tts-lib PRIVATE ws2_32) endif() - if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - add_custom_command(TARGET pocket-tts-lib POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll - $ - ) - else() - add_custom_command(TARGET pocket-tts-lib POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${ONNXRUNTIME_LIB} $ - ) - find_program(PATCHELF patchelf) - if(PATCHELF) - add_custom_command(TARGET pocket-tts-lib POST_BUILD - COMMAND ${PATCHELF} --replace-needed libonnxruntime.so.1 libonnxruntime.so $ - COMMENT "Patching libonnxruntime SONAME dependency" - ) - endif() - endif() endif() # =============================================================================