-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
131 lines (112 loc) · 3.8 KB
/
CMakeLists.txt
File metadata and controls
131 lines (112 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
cmake_minimum_required(VERSION 3.13)
project(PronunciationHelper C CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
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>")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /W0")
# Set CMake flag to use static runtime library
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# Alternatively, set compiler flags to explicitly specify /MT and /MTd
# Set /MT, /MTd for all targets
foreach(flag_var
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")
endforeach(flag_var)
elseif(NOT APPLE)
# Linux flags
string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wl,-rpath,'$ORIGIN'")
string(APPEND CMAKE_C_FLAGS " -Wall -Wextra")
endif()
find_package(wxWidgets COMPONENTS core base REQUIRED)
set(PROJ_SOURCES src/main.cpp src/MainFrame.cpp src/PiperWrapper.cpp)
if(WIN32)
set(PROJ_SOURCES ${PROJ_SOURCES} icons/logo.rc)
elseif(APPLE)
set(MACOSX_BUNDLE_ICON_FILE icons/app_icon.icns)
endif()
add_executable(${PROJECT_NAME} ${PROJ_SOURCES})
include_directories(${wxWidgets_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}/src")
include(ExternalProject)
# ---- piper-phonemize ----
set(PIPER_PHONEMIZE_DIR "${CMAKE_CURRENT_BINARY_DIR}/pi")
ExternalProject_Add(
pp_ext
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/deps/piper-phonemize"
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${PIPER_PHONEMIZE_DIR}
)
add_dependencies(${PROJECT_NAME} pp_ext)
set(PORTAUDIO_DIR "${CMAKE_CURRENT_BINARY_DIR}/pa")
ExternalProject_Add(
pa_ext
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/deps/portaudio"
CMAKE_ARGS -DPA_BUILD_SHARED_LIBS:BOOL=OFF
CMAKE_ARGS -DPA_DLL_LINK_WITH_STATIC_RUNTIME:BOOL=ON
CMAKE_ARGS -DPA_BUILD_EXAMPLES:BOOL=OFF
CMAKE_ARGS -DPA_BUILD_TESTS:BOOL=OFF
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${PORTAUDIO_DIR}
)
add_dependencies(${PROJECT_NAME} pp_ext)
# ---- Declare executable link settings ----
if((NOT MSVC) AND (NOT APPLE))
# Linux flags
string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wl,-rpath,'$ORIGIN'")
string(APPEND CMAKE_C_FLAGS " -Wall -Wextra")
target_link_libraries(${PROJECT_NAME} -static-libgcc -static-libstdc++)
set(PIPER_EXTRA_LIBRARIES "pthread")
endif()
target_link_libraries(${PROJECT_NAME}
espeak-ng
piper_phonemize
onnxruntime
portaudio
${wxWidgets_LIBRARIES}
${PIPER_EXTRA_LIBRARIES}
)
target_link_directories(${PROJECT_NAME} PUBLIC
${PIPER_PHONEMIZE_DIR}/lib
${PORTAUDIO_DIR}/lib
)
target_include_directories(${PROJECT_NAME} PUBLIC
${PIPER_PHONEMIZE_DIR}/include
${PORTAUDIO_DIR}/include
)
if(WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE ON)
endif()
# ---- Declare install targets ----
install(
TARGETS ${PROJECT_NAME}
DESTINATION ${CMAKE_INSTALL_PREFIX}
)
# Install dependent dynamic libraries and data files
install(
DIRECTORY ${PIPER_PHONEMIZE_DIR}/bin/
DESTINATION ${CMAKE_INSTALL_PREFIX}
USE_SOURCE_PERMISSIONS # Preserve executable permissions
FILES_MATCHING
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}
)