File piper-cmake.patch of Package piper-tts
Index: piper-2023.11.14-2/CMakeLists.txt
===================================================================
--- piper-2023.11.14-2.orig/CMakeLists.txt 2023-11-14 18:55:22.000000000 +0100
+++ piper-2023.11.14-2/CMakeLists.txt 2024-03-11 13:45:57.675350908 +0100
@@ -7,17 +7,21 @@ file(READ "${CMAKE_CURRENT_LIST_DIR}/VER
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
+option(BUILD_EXTERNAL "Build external dependencies" OFF)
+
if(MSVC)
# Force compiler to use UTF-8 for IPA constants
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
elseif(NOT APPLE)
# Linux flags
- string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wl,-rpath,'$ORIGIN'")
+ string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra")
string(APPEND CMAKE_C_FLAGS " -Wall -Wextra")
endif()
add_executable(piper src/cpp/main.cpp src/cpp/piper.cpp)
+set_property(TARGET piper PROPERTY OUTPUT_NAME piper-tts)
+
add_executable(test_piper src/cpp/test.cpp src/cpp/piper.cpp)
# NOTE: external project prefix are shortened because of path length restrictions on Windows
@@ -25,82 +29,110 @@ add_executable(test_piper src/cpp/test.c
# ---- fmt ---
-if(NOT DEFINED FMT_DIR)
- set(FMT_VERSION "10.0.0")
- set(FMT_DIR "${CMAKE_CURRENT_BINARY_DIR}/fi")
-
- include(ExternalProject)
- ExternalProject_Add(
- fmt_external
- PREFIX "${CMAKE_CURRENT_BINARY_DIR}/f"
- URL "https://github.com/fmtlib/fmt/archive/refs/tags/${FMT_VERSION}.zip"
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${FMT_DIR}
- CMAKE_ARGS -DFMT_TEST:BOOL=OFF # Don't build all the tests
- )
- add_dependencies(piper fmt_external)
- add_dependencies(test_piper fmt_external)
+if (BUILD_EXTERNAL)
+ if(NOT DEFINED FMT_DIR)
+ set(FMT_VERSION "10.0.0")
+ set(FMT_DIR "${CMAKE_CURRENT_BINARY_DIR}/fi")
+
+ include(ExternalProject)
+ ExternalProject_Add(
+ fmt_external
+ PREFIX "${CMAKE_CURRENT_BINARY_DIR}/f"
+ URL "https://github.com/fmtlib/fmt/archive/refs/tags/${FMT_VERSION}.zip"
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${FMT_DIR}
+ CMAKE_ARGS -DFMT_TEST:BOOL=OFF # Don't build all the tests
+ )
+ add_dependencies(piper fmt_external)
+ add_dependencies(test_piper fmt_external)
+ endif()
+else()
+ find_package(fmt REQUIRED)
endif()
# ---- spdlog ---
-if(NOT DEFINED SPDLOG_DIR)
- set(SPDLOG_DIR "${CMAKE_CURRENT_BINARY_DIR}/si")
- set(SPDLOG_VERSION "1.12.0")
- ExternalProject_Add(
- spdlog_external
- PREFIX "${CMAKE_CURRENT_BINARY_DIR}/s"
- URL "https://github.com/gabime/spdlog/archive/refs/tags/v${SPDLOG_VERSION}.zip"
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SPDLOG_DIR}
- )
- add_dependencies(piper spdlog_external)
- add_dependencies(test_piper spdlog_external)
+if (BUILD_EXTERNAL)
+ if(NOT DEFINED SPDLOG_DIR)
+ set(SPDLOG_DIR "${CMAKE_CURRENT_BINARY_DIR}/si")
+ set(SPDLOG_VERSION "1.12.0")
+ ExternalProject_Add(
+ spdlog_external
+ PREFIX "${CMAKE_CURRENT_BINARY_DIR}/s"
+ URL "https://github.com/gabime/spdlog/archive/refs/tags/v${SPDLOG_VERSION}.zip"
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SPDLOG_DIR}
+ )
+ add_dependencies(piper spdlog_external)
+ add_dependencies(test_piper spdlog_external)
+ endif()
+else()
+ find_package(spdlog REQUIRED)
endif()
# ---- piper-phonemize ---
-if(NOT DEFINED PIPER_PHONEMIZE_DIR)
- set(PIPER_PHONEMIZE_DIR "${CMAKE_CURRENT_BINARY_DIR}/pi")
- ExternalProject_Add(
- piper_phonemize_external
- PREFIX "${CMAKE_CURRENT_BINARY_DIR}/p"
- URL "https://github.com/rhasspy/piper-phonemize/archive/refs/heads/master.zip"
- CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${PIPER_PHONEMIZE_DIR}
- )
- add_dependencies(piper piper_phonemize_external)
- add_dependencies(test_piper piper_phonemize_external)
+if (BUILD_EXTERNAL)
+ if(NOT DEFINED PIPER_PHONEMIZE_DIR)
+ set(PIPER_PHONEMIZE_DIR "${CMAKE_CURRENT_BINARY_DIR}/pi")
+ ExternalProject_Add(
+ piper_phonemize_external
+ PREFIX "${CMAKE_CURRENT_BINARY_DIR}/p"
+ URL "https://github.com/rhasspy/piper-phonemize/archive/refs/heads/master.zip"
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${PIPER_PHONEMIZE_DIR}
+ )
+ add_dependencies(piper piper_phonemize_external)
+ add_dependencies(test_piper piper_phonemize_external)
+ endif()
+else()
+ find_package(piper_phonemize REQUIRED)
+ find_package(onnxruntime REQUIRED)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(espeak_ng REQUIRED IMPORTED_TARGET espeak-ng)
endif()
# ---- Declare executable ----
if((NOT MSVC) AND (NOT APPLE))
# Linux flags
- string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wl,-rpath,'$ORIGIN'")
+ string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra")
string(APPEND CMAKE_C_FLAGS " -Wall -Wextra")
- target_link_libraries(piper -static-libgcc -static-libstdc++)
set(PIPER_EXTRA_LIBRARIES "pthread")
endif()
-target_link_libraries(piper
- fmt
- spdlog
- espeak-ng
- piper_phonemize
- onnxruntime
- ${PIPER_EXTRA_LIBRARIES}
-)
-
-target_link_directories(piper PUBLIC
- ${FMT_DIR}/lib
- ${SPDLOG_DIR}/lib
- ${PIPER_PHONEMIZE_DIR}/lib
-)
-
-target_include_directories(piper PUBLIC
- ${FMT_DIR}/include
- ${SPDLOG_DIR}/include
- ${PIPER_PHONEMIZE_DIR}/include
+if (BUILD_EXTERNAL)
+ target_link_libraries(piper -static-libgcc -static-libstdc++)
+ set_target_properties(piper PROPERTIES BUILD_RPATH_USE_ORIGIN true)
+
+ target_link_libraries(piper
+ fmt
+ spdlog
+ espeak-ng
+ piper_phonemize
+ onnxruntime
+ ${PIPER_EXTRA_LIBRARIES}
+ )
+
+ target_link_directories(piper PUBLIC
+ ${FMT_DIR}/lib
+ ${SPDLOG_DIR}/lib
+ ${PIPER_PHONEMIZE_DIR}/lib
+ )
+
+ target_include_directories(piper PUBLIC
+ ${FMT_DIR}/include
+ ${SPDLOG_DIR}/include
+ ${PIPER_PHONEMIZE_DIR}/include
+ )
+else()
+ target_link_libraries(piper
+ fmt::fmt
+ spdlog::spdlog
+ PkgConfig::espeak_ng
+ onnxruntime::onnxruntime
+ piper_phonemize
+ ${PIPER_EXTRA_LIBRARIES}
)
+endif()
target_compile_definitions(piper PUBLIC _PIPER_VERSION=${piper_version})
@@ -114,59 +146,74 @@ add_test(
target_compile_features(test_piper PUBLIC cxx_std_17)
-target_include_directories(
- test_piper PUBLIC
- ${FMT_DIR}/include
- ${SPDLOG_DIR}/include
- ${PIPER_PHONEMIZE_DIR}/include
-)
-
-target_link_directories(
- test_piper PUBLIC
- ${FMT_DIR}/lib
- ${SPDLOG_DIR}/lib
- ${PIPER_PHONEMIZE_DIR}/lib
-)
+if (BUILD_EXTERNAL)
+ set_target_properties(test_piper PROPERTIES BUILD_RPATH_USE_ORIGIN true)
-target_link_libraries(test_piper PUBLIC
- fmt
- spdlog
- espeak-ng
- piper_phonemize
- onnxruntime
-)
+ target_include_directories(
+ test_piper PUBLIC
+ ${FMT_DIR}/include
+ ${SPDLOG_DIR}/include
+ ${PIPER_PHONEMIZE_DIR}/include
+ )
+
+ target_link_directories(
+ test_piper PUBLIC
+ ${FMT_DIR}/lib
+ ${SPDLOG_DIR}/lib
+ ${PIPER_PHONEMIZE_DIR}/lib
+ )
+
+ target_link_libraries(test_piper PUBLIC
+ fmt
+ spdlog
+ espeak-ng
+ piper_phonemize
+ onnxruntime
+ )
+else()
+ target_link_libraries(test_piper
+ fmt::fmt
+ spdlog::spdlog
+ onnxruntime::onnxruntime
+ PkgConfig::espeak_ng
+ piper_phonemize
+ ${PIPER_EXTRA_LIBRARIES}
+ )
+endif()
# ---- Declare install targets ----
install(
TARGETS piper
- DESTINATION ${CMAKE_INSTALL_PREFIX})
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
# Dependencies
-install(
- DIRECTORY ${PIPER_PHONEMIZE_DIR}/bin/
- DESTINATION ${CMAKE_INSTALL_PREFIX}
- USE_SOURCE_PERMISSIONS # keep +x
- FILES_MATCHING
- PATTERN "piper_phonemize"
- PATTERN "espeak-ng"
- PATTERN "*.dll"
-)
-
-install(
- DIRECTORY ${PIPER_PHONEMIZE_DIR}/lib/
- DESTINATION ${CMAKE_INSTALL_PREFIX}
- FILES_MATCHING
- PATTERN "*.dll"
- PATTERN "*.so*"
-)
-
-install(
- DIRECTORY ${PIPER_PHONEMIZE_DIR}/share/espeak-ng-data
- DESTINATION ${CMAKE_INSTALL_PREFIX}
-)
-
-install(
- FILES ${PIPER_PHONEMIZE_DIR}/share/libtashkeel_model.ort
- DESTINATION ${CMAKE_INSTALL_PREFIX}
-)
+if (BUILD_EXTERNAL)
+ install(
+ DIRECTORY ${PIPER_PHONEMIZE_DIR}/bin/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ USE_SOURCE_PERMISSIONS # keep +x
+ FILES_MATCHING
+ PATTERN "piper_phonemize"
+ PATTERN "espeak-ng"
+ PATTERN "*.dll"
+ )
+
+ install(
+ DIRECTORY ${PIPER_PHONEMIZE_DIR}/lib/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ FILES_MATCHING
+ PATTERN "*.dll"
+ PATTERN "*.so*"
+ )
+
+ install(
+ DIRECTORY ${PIPER_PHONEMIZE_DIR}/share/espeak-ng-data
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ )
+
+ install(
+ FILES ${PIPER_PHONEMIZE_DIR}/share/libtashkeel_model.ort
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ )
+endif()