--- libpiper/CMakeLists.txt.orig 2026-09-04 16:40:50 UTC +++ libpiper/CMakeLists.txt 2026-09-04 16:40:50 UTC @@ -5,138 +5,15 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -include(ExternalProject) +# ---- espeak-ng (system) ---- -# Install location for espeak-ng -set(ESPEAKNG_BUILD_DIR ${CMAKE_BINARY_DIR}/espeak_ng) -set(ESPEAKNG_INSTALL_DIR ${CMAKE_BINARY_DIR}/espeak_ng-install) +find_package(PkgConfig REQUIRED) +pkg_check_modules(ESPEAKNG REQUIRED IMPORTED_TARGET espeak-ng) -# ucd-tools is built (not installed) by espeak-ng, so we reference its static -# library directly from the build tree. Multi-config generators (e.g. Visual -# Studio) place the output in a per-config subdirectory whose name is only -# known at build time, so resolve it with a $ generator expression. -# Single-config generators (Unix Makefiles, Ninja) write directly into the -# build directory with no subdirectory. -get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(IS_MULTI_CONFIG) - set(UCD_CONFIG_SUBDIR "$/") -else() - set(UCD_CONFIG_SUBDIR "") -endif() +# ---- onnxruntime (system) ---- -set(UCD_TOOLS_DIR ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools) +find_package(onnxruntime REQUIRED) -if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - # MSVC emits .lib files (espeak-ng is re-exported from piper.dll) - set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/espeak-ng.lib) - set(UCD_STATIC_LIB ${UCD_TOOLS_DIR}/${UCD_CONFIG_SUBDIR}ucd.lib) -else() - set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/libespeak-ng.a) - set(UCD_STATIC_LIB ${UCD_TOOLS_DIR}/${UCD_CONFIG_SUBDIR}libucd.a) -endif() - -ExternalProject_Add(espeak_ng_external - GIT_REPOSITORY https://github.com/espeak-ng/espeak-ng.git - GIT_TAG 212928b394a96e8fd2096616bfd54e17845c48f6 # 2025-Mar-22 - PREFIX ${ESPEAKNG_BUILD_DIR} - CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX=${ESPEAKNG_INSTALL_DIR} - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS:BOOL=OFF - -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON - -DUSE_ASYNC:BOOL=OFF - -DUSE_MBROLA:BOOL=OFF - -DUSE_LIBSONIC:BOOL=OFF - -DUSE_LIBPCAUDIO:BOOL=OFF - -DUSE_KLATT:BOOL=OFF - -DUSE_SPEECHPLAYER:BOOL=OFF - -DEXTRA_cmn:BOOL=ON - -DEXTRA_ru:BOOL=ON - # Need to explicitly add ucd include directory for CI - "-DCMAKE_C_FLAGS=-D_FILE_OFFSET_BITS=64 -I${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external/src/ucd-tools/src/include" - "-DCMAKE_CXX_FLAGS=-D_FILE_OFFSET_BITS=64 -I${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external/src/ucd-tools/src/include" - BUILD_BYPRODUCTS - ${ESPEAKNG_STATIC_LIB} - ${UCD_STATIC_LIB} - UPDATE_DISCONNECTED TRUE -) - -include_directories( - ${ESPEAKNG_INSTALL_DIR}/include -) - -# ---- onnxruntime --- - -find_package(onnxruntime QUIET) - -# Look for onnxruntime files in /lib -if(NOT TARGET onnxruntime::onnxruntime AND NOT DEFINED ONNXRUNTIME_DIR) - if(NOT DEFINED ONNXRUNTIME_VERSION) - set(ONNXRUNTIME_VERSION "1.22.0") - endif() - - if(WIN32) - # Windows x86-64 - set(ONNXRUNTIME_PREFIX "onnxruntime-win-x64-${ONNXRUNTIME_VERSION}") - set(ONNXRUNTIME_EXT "zip") - elseif (APPLE) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) - # MacOS x86-64 - set(ONNXRUNTIME_PREFIX "onnxruntime-osx-x86_64-${ONNXRUNTIME_VERSION}") - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) - # MacOS Apple Silicon - set(ONNXRUNTIME_PREFIX "onnxruntime-osx-arm64-${ONNXRUNTIME_VERSION}") - else() - message(FATAL_ERROR "Unsupported architecture for onnxruntime") - endif() - - set(ONNXRUNTIME_EXT "tgz") - else() - if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64) - # Linux x86-64 - set(ONNXRUNTIME_PREFIX "onnxruntime-linux-x64-${ONNXRUNTIME_VERSION}") - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64) - # Linux ARM 64-bit - set(ONNXRUNTIME_PREFIX "onnxruntime-linux-aarch64-${ONNXRUNTIME_VERSION}") - elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l) - # Linux ARM 32-bit - set(ONNXRUNTIME_PREFIX "onnxruntime-linux-arm32-${ONNXRUNTIME_VERSION}") - set(ONNXRUNTIME_URL "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/onnxruntime-linux-arm32-${ONNXRUNTIME_VERSION}.tgz") - else() - message(FATAL_ERROR "Unsupported architecture for onnxruntime") - endif() - - set(ONNXRUNTIME_EXT "tgz") - endif() - - if(NOT DEFINED ONNXRUNTIME_URL) - set(ONNXRUNTIME_URL "https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/${ONNXRUNTIME_PREFIX}.${ONNXRUNTIME_EXT}") - endif() - - set(ONNXRUNTIME_FILENAME "${ONNXRUNTIME_PREFIX}.${ONNXRUNTIME_EXT}") - set(ONNXRUNTIME_DIR "${CMAKE_CURRENT_LIST_DIR}/lib/${ONNXRUNTIME_PREFIX}") - - if(NOT EXISTS "${ONNXRUNTIME_DIR}") - if(NOT EXISTS "download/${ONNXRUNTIME_FILENAME}") - # Download onnxruntime release - message("Downloading ${ONNXRUNTIME_URL}") - file(DOWNLOAD "${ONNXRUNTIME_URL}" "download/${ONNXRUNTIME_FILENAME}") - endif() - - # Extract .zip or .tgz to a directory like lib/onnxruntime-linux-x64-1.22.0/ - file(ARCHIVE_EXTRACT INPUT "download/${ONNXRUNTIME_FILENAME}" DESTINATION "${CMAKE_CURRENT_LIST_DIR}/lib") - endif() -endif() - -if(DEFINED ONNXRUNTIME_DIR) - find_library(ONNXRUNTIME_LIB NAMES onnxruntime PATHS ${ONNXRUNTIME_DIR}/lib REQUIRED) - add_library(onnxruntime::onnxruntime UNKNOWN IMPORTED) - set_target_properties(onnxruntime::onnxruntime PROPERTIES - IMPORTED_LOCATION ${ONNXRUNTIME_LIB} - INTERFACE_INCLUDE_DIRECTORIES ${ONNXRUNTIME_DIR}/include - ) -endif() - # ---- linting ---- include(ClangTidy.cmake) # ---- libpiper --- @@ -147,14 +24,11 @@ ) enable_clang_tidy(piper) -add_dependencies(piper espeak_ng_external) target_include_directories(piper PUBLIC - ${ESPEAKNG_INSTALL_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_link_libraries(piper - ${ESPEAKNG_STATIC_LIB} - ${UCD_STATIC_LIB} + PkgConfig::ESPEAKNG onnxruntime::onnxruntime ) @@ -169,6 +43,11 @@ if(PIPER_VERSION) message(STATUS "Parsed Piper Version: ${PIPER_VERSION}") target_compile_definitions(piper PRIVATE PIPER_VERSION="${PIPER_VERSION}") + + string(REGEX MATCH "^([0-9]+)" PIPER_SOVERSION "${PIPER_VERSION}") + set_target_properties(piper PROPERTIES + VERSION ${PIPER_VERSION} + SOVERSION ${PIPER_SOVERSION}) else() message(WARNING "Could not parse version from setup.py") endif() @@ -190,23 +69,6 @@ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) -if(DEFINED ONNXRUNTIME_DIR) - install( - DIRECTORY ${ONNXRUNTIME_DIR}/lib/ - DESTINATION ${CMAKE_INSTALL_LIBDIR} - PATTERN "cmake" EXCLUDE - PATTERN "pkgconfig" EXCLUDE - ) -endif() - -# Copy espeak-ng-data -set(ESPEAKNG_DATA_SRC ${CMAKE_BINARY_DIR}/espeak_ng-install/share/espeak-ng-data) - -install( - DIRECTORY ${ESPEAKNG_DATA_SRC} - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} -) - # ---------------- # Testing # ----------------