Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
204 lines
6.7 KiB
Diff
204 lines
6.7 KiB
Diff
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index 2db7493..675c64b 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -4,93 +4,133 @@
|
|
cmake_minimum_required(VERSION 3.26)
|
|
project(piper LANGUAGES C CXX)
|
|
|
|
+set(UCD_STATIC_LIB "" CACHE FILEPATH "Path to libucd.a if built with system espeak-ng")
|
|
+
|
|
include(ExternalProject)
|
|
|
|
# scikit-build-core will forward Python_* variables
|
|
find_package(Python COMPONENTS Development.Module Development.SABIModule REQUIRED)
|
|
|
|
-# Install location for espeak-ng
|
|
-set(ESPEAKNG_BUILD_DIR ${CMAKE_BINARY_DIR}/espeak_ng)
|
|
-set(ESPEAKNG_INSTALL_DIR ${CMAKE_BINARY_DIR}/espeak_ng-install)
|
|
+# Try to find espeak-ng using pkg-config, if available
|
|
+find_package(PkgConfig QUIET)
|
|
|
|
-if(WIN32)
|
|
- # Special handling for Windows
|
|
- set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/espeak-ng.lib)
|
|
- set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/ucd.lib)
|
|
-else()
|
|
- set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/libespeak-ng.a)
|
|
- set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/libucd.a)
|
|
+if (PKG_CONFIG_FOUND)
|
|
+ pkg_check_modules(ESPEAKNG QUIET espeak-ng)
|
|
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}
|
|
- -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"
|
|
- BUILD_BYPRODUCTS
|
|
- ${ESPEAKNG_STATIC_LIB}
|
|
- ${UCD_STATIC_LIB}
|
|
- UPDATE_DISCONNECTED TRUE
|
|
-)
|
|
-
|
|
-include_directories(
|
|
- ${ESPEAKNG_INSTALL_DIR}/include
|
|
-)
|
|
-
|
|
# espeak bridge
|
|
add_library(espeakbridge MODULE
|
|
src/piper/espeakbridge.c
|
|
)
|
|
|
|
-add_dependencies(espeakbridge espeak_ng_external)
|
|
-target_link_libraries(espeakbridge
|
|
- ${ESPEAKNG_STATIC_LIB}
|
|
- ${UCD_STATIC_LIB}
|
|
+# scikit-build-core forwards this
|
|
+target_link_libraries(espeakbridge PRIVATE
|
|
Python::SABIModule
|
|
)
|
|
-target_include_directories(espeakbridge PRIVATE
|
|
- ${ESPEAKNG_INSTALL_DIR}/include
|
|
-)
|
|
|
|
-if(WIN32)
|
|
- # Fix dll thunk issue (__imp_SYMBOL not found)
|
|
- target_compile_definitions(espeakbridge PRIVATE LIBESPEAK_NG_EXPORT)
|
|
|
|
- # Fix .dll suffix
|
|
+if (ESPEAKNG_FOUND)
|
|
+ message(STATUS "Found system espeak-ng via pkg-config")
|
|
+
|
|
+ target_include_directories(espeakbridge PRIVATE
|
|
+ ${ESPEAKNG_INCLUDE_DIRS}
|
|
+ )
|
|
+ target_link_directories(espeakbridge PRIVATE
|
|
+ ${ESPEAKNG_LIBRARY_DIRS}
|
|
+ )
|
|
+ target_link_libraries(espeakbridge PRIVATE
|
|
+ ${ESPEAKNG_LIBRARIES}
|
|
+ ${UCD_STATIC_LIB}
|
|
+ )
|
|
+
|
|
set_target_properties(espeakbridge PROPERTIES
|
|
PREFIX ""
|
|
- SUFFIX ".pyd"
|
|
)
|
|
+
|
|
+ install(TARGETS espeakbridge
|
|
+ LIBRARY DESTINATION .
|
|
+ RUNTIME DESTINATION .
|
|
+ )
|
|
+
|
|
else()
|
|
- set_target_properties(espeakbridge PROPERTIES
|
|
- PREFIX ""
|
|
+ # Install location for espeak-ng
|
|
+ set(ESPEAKNG_BUILD_DIR ${CMAKE_BINARY_DIR}/espeak_ng)
|
|
+ set(ESPEAKNG_INSTALL_DIR ${CMAKE_BINARY_DIR}/espeak_ng-install)
|
|
+
|
|
+ if(WIN32)
|
|
+ # Special handling for Windows
|
|
+ set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/espeak-ng.lib)
|
|
+ set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/ucd.lib)
|
|
+ else()
|
|
+ set(ESPEAKNG_STATIC_LIB ${ESPEAKNG_INSTALL_DIR}/lib/libespeak-ng.a)
|
|
+ set(UCD_STATIC_LIB ${ESPEAKNG_BUILD_DIR}/src/espeak_ng_external-build/src/ucd-tools/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}
|
|
+ -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"
|
|
+ BUILD_BYPRODUCTS
|
|
+ ${ESPEAKNG_STATIC_LIB}
|
|
+ ${UCD_STATIC_LIB}
|
|
+ UPDATE_DISCONNECTED TRUE
|
|
)
|
|
-endif()
|
|
|
|
-install(TARGETS espeakbridge
|
|
- LIBRARY DESTINATION .
|
|
- RUNTIME DESTINATION .
|
|
-)
|
|
+ include_directories(
|
|
+ ${ESPEAKNG_INSTALL_DIR}/include
|
|
+ )
|
|
+
|
|
+ add_dependencies(espeakbridge espeak_ng_external)
|
|
+ target_link_libraries(espeakbridge
|
|
+ ${ESPEAKNG_STATIC_LIB}
|
|
+ ${UCD_STATIC_LIB}
|
|
+ Python::SABIModule
|
|
+ )
|
|
+ target_include_directories(espeakbridge PRIVATE
|
|
+ ${ESPEAKNG_INSTALL_DIR}/include
|
|
+ )
|
|
|
|
-# Copy espeak-ng-data
|
|
-set(DATA_SRC ${CMAKE_BINARY_DIR}/espeak_ng-install/share/espeak-ng-data)
|
|
-set(DATA_DST ${CMAKE_CURRENT_SOURCE_DIR}/src/piper/espeak-ng-data)
|
|
+ if(WIN32)
|
|
+ # Fix dll thunk issue (__imp_SYMBOL not found)
|
|
+ target_compile_definitions(espeakbridge PRIVATE LIBESPEAK_NG_EXPORT)
|
|
|
|
-add_custom_target(copy_espeak_ng_data ALL
|
|
- COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_SRC} ${DATA_DST}
|
|
- DEPENDS espeak_ng_external
|
|
- COMMENT "Copying espeak-ng-data after espeak-ng external project builds"
|
|
-)
|
|
+ # Fix .dll suffix
|
|
+ set_target_properties(espeakbridge PROPERTIES
|
|
+ PREFIX ""
|
|
+ SUFFIX ".pyd"
|
|
+ )
|
|
+ else()
|
|
+ set_target_properties(espeakbridge PROPERTIES
|
|
+ PREFIX ""
|
|
+ )
|
|
+ endif()
|
|
+
|
|
+ install(TARGETS espeakbridge
|
|
+ LIBRARY DESTINATION .
|
|
+ RUNTIME DESTINATION .
|
|
+ )
|
|
+
|
|
+ # Copy espeak-ng-data
|
|
+ set(DATA_SRC ${CMAKE_BINARY_DIR}/espeak_ng-install/share/espeak-ng-data)
|
|
+ set(DATA_DST ${CMAKE_CURRENT_SOURCE_DIR}/src/piper/espeak-ng-data)
|
|
+
|
|
+ add_custom_target(copy_espeak_ng_data ALL
|
|
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${DATA_SRC} ${DATA_DST}
|
|
+ DEPENDS espeak_ng_external
|
|
+ COMMENT "Copying espeak-ng-data after espeak-ng external project builds"
|
|
+ )
|
|
+endif()
|