-
Notifications
You must be signed in to change notification settings - Fork 120
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
166 lines (145 loc) · 6.59 KB
/
Copy pathCMakeLists.txt
File metadata and controls
166 lines (145 loc) · 6.59 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
cmake_minimum_required(VERSION 3.14 FATAL_ERROR)
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) # Less useful to do it for linking, see edit2
endif(CCACHE_FOUND)
project(wenet VERSION 0.1)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
option(GRPC "whether to build gRPC" OFF)
include_directories(
${CMAKE_SOURCE_DIR}
${CMAKE_SOURCE_DIR}/kaldi # for not changing c++ header names in kaldi source files
)
set(CMAKE_VERBOSE_MAKEFILE on)
include(FetchContent)
include(ExternalProject)
set(FETCHCONTENT_QUIET off)
get_filename_component(fc_base "fc_base" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
set(FETCHCONTENT_BASE_DIR ${fc_base})
if(NOT MSVC)
# Keep the same with openfst, -fPIC or -fpic
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread -fPIC")
endif()
# third_party: gflags
FetchContent_Declare(gflags
URL https://github.com/gflags/gflags/archive/v2.2.1.zip
URL_HASH SHA256=4e44b69e709c826734dbbbd5208f61888a2faf63f239d73d8ba0011b2dccc97a
)
FetchContent_MakeAvailable(gflags)
include_directories(${gflags_BINARY_DIR}/include)
# third_party: glog
FetchContent_Declare(glog
URL https://github.com/google/glog/archive/v0.4.0.zip
URL_HASH SHA256=9e1b54eb2782f53cd8af107ecf08d2ab64b8d0dc2b7f5594472f3bd63ca85cdc
)
FetchContent_MakeAvailable(glog)
include_directories(${glog_SOURCE_DIR}/src ${glog_BINARY_DIR})
# third_party: gtest
FetchContent_Declare(googletest
URL https://github.com/google/googletest/archive/release-1.10.0.zip
URL_HASH SHA256=94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91
)
FetchContent_MakeAvailable(googletest)
# third_party: boost
FetchContent_Declare(boost
URL https://archives.boost.io/release/1.75.0/source/boost_1_75_0.tar.gz
URL_HASH SHA256=aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a
)
FetchContent_MakeAvailable(boost)
include_directories(${boost_SOURCE_DIR})
# third_party: cnpy
FetchContent_Declare(cnpy
URL https://github.com/rogersce/cnpy/archive/refs/heads/master.zip
URL_HASH SHA256=dd58304295ce30e2299fafe8a72cb1acac508139df740c8976bcaab5c17591dc
)
FetchContent_MakeAvailable(cnpy)
include_directories(${cnpy_SOURCE_DIR})
# Redis
add_subdirectory(${CMAKE_SOURCE_DIR}/third_party/hiredis)
set(REDIS_PLUS_PLUS_CXX_STANDARD 14)
set(HIREDIS_HEADER ${CMAKE_SOURCE_DIR}/third_party)
set(HIREDIS_LIB hiredis)
set(TEST_HIREDIS_LIB hiredis)
add_subdirectory(${CMAKE_SOURCE_DIR}/third_party/redis-plus-plus)
# third_party: libtorch 1.6.0, use FetchContent_Declare to download, and
# use find_package to find since libtorch is not a standard cmake project
set(PYTORCH_VERSION "1.13.1")
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(LIBTORCH_URL "https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-${PYTORCH_VERSION}%2Bcpu.zip")
set(URL_HASH "SHA256=d289185802baa1977701b72fc17c8aa6715481703352ce02d6f710cf007dc4f9")
else()
message(FATAL_ERROR "Unsupported CMake System Name '${CMAKE_SYSTEM_NAME}' (expected 'Windows', 'Linux' or 'Darwin')")
endif()
FetchContent_Declare(libtorch
URL ${LIBTORCH_URL}
URL_HASH ${URL_HASH}
)
set(gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)
FetchContent_MakeAvailable(libtorch)
find_package(Torch REQUIRED PATHS ${libtorch_SOURCE_DIR} NO_DEFAULT_PATH)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS} -DC10_USE_GLOG")
# utils
add_library(utils STATIC
utils/string.cc
utils/utils.cc
)
# The original openfst uses GNU Build System to run configure and build.
# So, we use "OpenFST port for Windows" to build openfst with cmake in Windows.
# Openfst is compiled with glog/gflags to avoid log and flag conflicts with log and flags in wenet/libtorch.
# To build openfst with gflags and glog, we comment out some vars of {flags, log}.h and flags.cc.
if(NOT MSVC)
set(openfst_SOURCE_DIR ${fc_base}/openfst-src)
set(openfst_BINARY_DIR ${fc_base}/openfst-build)
set(openfst_PREFIX_DIR ${fc_base}/openfst-subbuild/openfst-populate-prefix)
ExternalProject_Add(openfst
URL https://github.com/mjansche/openfst/archive/1.6.5.zip
URL_HASH SHA256=b720357a464f42e181d7e33f60867b54044007f50baedc8f4458a3926f4a5a78
SOURCE_DIR ${openfst_SOURCE_DIR}
BINARY_DIR ${openfst_BINARY_DIR}
CONFIGURE_COMMAND ${openfst_SOURCE_DIR}/configure --prefix=${openfst_PREFIX_DIR}
"CPPFLAGS=-I${gflags_BINARY_DIR}/include -I${glog_SOURCE_DIR}/src -I${glog_BINARY_DIR} -D_GLIBCXX_USE_CXX11_ABI=0"
"LDFLAGS=-L${gflags_BINARY_DIR} -L${glog_BINARY_DIR}"
"LIBS=-lgflags_nothreads -lglog -lpthread"
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/patch/openfst ${openfst_SOURCE_DIR}
BUILD_COMMAND make -j 4
)
add_dependencies(openfst gflags glog)
add_dependencies(utils openfst)
link_directories(${openfst_PREFIX_DIR}/lib)
target_link_libraries(utils PUBLIC fst dl)
else()
execute_process(COMMAND bootstrap.bat WORKING_DIRECTORY ${boost_SOURCE_DIR})
execute_process(COMMAND b2.exe WORKING_DIRECTORY ${boost_SOURCE_DIR})
link_directories(${boost_SOURCE_DIR}/stage/lib)
file(GLOB TORCH_DLLS "${TORCH_INSTALL_PREFIX}/lib/*.dll")
file(COPY ${TORCH_DLLS} DESTINATION ${CMAKE_BINARY_DIR})
FetchContent_Declare(openfst
URL https://github.com.cnpmjs.org/kkm000/openfst/archive/refs/tags/win/1.6.5.1.tar.gz
URL_HASH SHA256=02c49b559c3976a536876063369efc0e41ab374be1035918036474343877046e
)
FetchContent_MakeAvailable(openfst)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/patch/openfst ${openfst_SOURCE_DIR})
add_dependencies(fst gflags glog)
target_link_libraries(fst PUBLIC gflags_nothreads_static glog)
target_link_libraries(utils PUBLIC fst)
endif()
include_directories(${openfst_SOURCE_DIR}/src/include)
# kaldi: wfst based decoder
add_subdirectory(kaldi)
# decoder
add_library(decoder STATIC
decoder/ctc_prefix_beam_search.cc
decoder/ctc_wfst_beam_search.cc
decoder/brain_speech_decoder.cc
)
target_link_libraries(decoder PUBLIC ${TORCH_LIBRARIES} kaldi-decoder utils kaldi-fstext)
find_package(ZLIB REQUIRED)
# binary
add_executable(brain_speech_decoder_main bin/brain_speech_decoder_main.cc)
target_link_libraries(brain_speech_decoder_main PUBLIC decoder cnpy-static ${ZLIB_LIBRARIES})
#add_executable(redis_server_main bin/redis_server_main.cc)
#target_link_libraries(redis_server_main PUBLIC redis++_static hiredis_static decoder)
add_subdirectory(pybind11)
pybind11_add_module(lm_decoder python/lm_decoder.cc)
target_link_libraries(lm_decoder PUBLIC decoder)