1
- IF (APPLE )
2
- cmake_minimum_required (VERSION 3.4)
3
- ELSE ()
4
- cmake_minimum_required (VERSION 2.8)
5
- ENDIF ()
1
+ cmake_minimum_required (VERSION 3.15)
6
2
7
3
project (ctc_release)
8
4
9
- include_directories (include )
10
-
11
- FIND_PACKAGE (CUDA 6.5)
12
- FIND_PACKAGE (Torch)
13
5
14
- MESSAGE (STATUS "cuda found ${CUDA_FOUND} " )
15
- MESSAGE (STATUS "Torch found ${Torch_DIR} " )
6
+ find_package (CUDA 6.5)
7
+ find_package (OpenMP)
8
+ find_package (Torch)
16
9
17
10
option (WITH_GPU "compile warp-ctc with CUDA." ${CUDA_FOUND} )
11
+ option (WITH_OMP "compile warp-ctc with OpenMP." ${OpenMP_FOUND} )
18
12
option (WITH_TORCH "compile warp-ctc with Torch." ${Torch_FOUND} )
19
- option (WITH_OMP "compile warp-ctc with OpenMP." ON )
20
13
option (BUILD_TESTS "build warp-ctc unit tests." ON )
21
14
option (BUILD_SHARED "build warp-ctc shared library." ON )
22
15
23
- if (BUILD_SHARED)
24
- set (WARPCTC_SHARED "SHARED" )
25
- else (BUILD_SHARED)
26
- set (WARPCTC_SHARED "STATIC" )
27
- endif (BUILD_SHARED)
16
+ set (CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Build Type of the project." )
17
+ set (CMAKE_CXX_STANDARD 11)
18
+ set (CMAKE_CUDA_STANDARD 11)
19
+
28
20
29
21
if (WIN32 )
30
22
set (CMAKE_STATIC_LIBRARY_PREFIX lib)
31
- set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd" )
32
- set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT" )
33
- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd" )
34
- set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT" )
35
- foreach (flag_var
36
- CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE )
37
- if (${flag_var} MATCHES "/MD" )
38
- string (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var} }" )
39
- endif (${flag_var} MATCHES "/MD" )
40
- endforeach (flag_var)
41
- else (WIN32 )
42
- # Set c++ flags
43
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2" )
44
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -O2" )
45
23
endif (WIN32 )
46
24
47
- if (APPLE )
48
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
49
- add_definitions (-DAPPLE)
50
- endif ()
51
-
52
- if (WITH_OMP AND NOT APPLE )
53
- set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp" )
54
- else ()
55
- add_definitions (-DCTC_DISABLE_OMP)
56
- endif ()
57
-
58
- # need to be at least 30 or __shfl_down in reduce wont compile
59
- IF (CUDA_VERSION VERSION_LESS "11.0" )
60
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30" )
61
- ENDIF ()
62
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_35,code=sm_35" )
63
-
64
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_50,code=sm_50" )
65
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_52,code=sm_52" )
66
-
67
- IF (CUDA_VERSION VERSION_GREATER "7.6" )
68
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_60,code=sm_60" )
69
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_61,code=sm_61" )
70
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_62,code=sm_62" )
71
- ENDIF ()
72
-
73
- IF ((CUDA_VERSION VERSION_GREATER "9.0" ) OR (CUDA_VERSION VERSION_EQUAL "9.0" ))
74
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_70,code=sm_70" )
75
- ENDIF ()
76
-
77
- IF ((CUDA_VERSION VERSION_GREATER "10.0" ) OR (CUDA_VERSION VERSION_EQUAL "10.0" ))
78
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_75,code=sm_75" )
79
- ENDIF ()
80
-
81
- IF ((CUDA_VERSION VERSION_GREATER "11.0" ) OR (CUDA_VERSION VERSION_EQUAL "11.0" ))
82
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_80,code=sm_80" )
83
- ENDIF ()
84
-
85
- IF (NOT APPLE AND NOT WIN32 )
86
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} --std=c++11" )
87
- if (WITH_OMP)
88
- set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler -fopenmp" )
89
- endif ()
90
- ENDIF ()
91
-
25
+ # Apple specifics
92
26
IF (APPLE )
93
27
EXEC_PROGRAM (uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
94
28
STRING (REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION} )
95
29
MESSAGE (STATUS "DARWIN_VERSION=${DARWIN_VERSION} " )
96
30
97
- #for el capitain have to use rpath
31
+ add_compile_definitions ( APPLE )
98
32
33
+ #for el capitain have to use rpath
99
34
IF (DARWIN_VERSION LESS 15)
100
35
set (CMAKE_SKIP_RPATH TRUE )
101
36
ENDIF ()
@@ -105,6 +40,7 @@ ELSE()
105
40
set (CMAKE_SKIP_RPATH TRUE )
106
41
ENDIF ()
107
42
43
+
108
44
# windows treat symbolic file as a real file, which is different with unix
109
45
# We create a hidden file and compile it instead of origin source file.
110
46
function (windows_symbolic TARGET )
@@ -132,111 +68,114 @@ function(windows_symbolic TARGET)
132
68
COMMAND ${CMAKE_COMMAND} -E remove ${final_path} /.${src} .cu
133
69
COMMAND ${CMAKE_COMMAND} -E copy "${final_path} /${src} .cpp" "${final_path} /.${src} .cu"
134
70
COMMENT "create hidden file of ${src} .cu" )
135
- endif (copy_flag )
71
+ endif ()
136
72
add_custom_target (${TARGET} ALL DEPENDS ${final_path} /.${src} .cu)
137
73
endforeach ()
138
74
endfunction ()
139
75
140
- IF (WITH_GPU)
76
+ if (NOT WITH_GPU)
77
+ message (STATUS "Building shared library with no GPU support" )
78
+ add_library (warpctc src/ctc_entrypoint.cpp)
79
+ else ()
80
+ message (STATUS "Building shared library with GPU support" )
81
+
82
+ # need to be at least 30 or __shfl_down in reduce wont compile
83
+ IF (CUDA_VERSION VERSION_LESS "11.0" )
84
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30" )
85
+ ENDIF ()
86
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_35,code=sm_35" )
141
87
142
- MESSAGE (STATUS "Building shared library with GPU support" )
143
- MESSAGE (STATUS "NVCC_ARCH_FLAGS" ${CUDA_NVCC_FLAGS} )
88
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_50,code=sm_50" )
89
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_52,code=sm_52" )
90
+
91
+ if (CUDA_VERSION VERSION_GREATER "7.6" )
92
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_60,code=sm_60" )
93
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_61,code=sm_61" )
94
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_62,code=sm_62" )
95
+ endif ()
96
+
97
+ if ((CUDA_VERSION VERSION_GREATER "9.0" ) OR (CUDA_VERSION VERSION_EQUAL "9.0" ))
98
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_70,code=sm_70" )
99
+ endif ()
100
+
101
+ if ((CUDA_VERSION VERSION_GREATER "10.0" ) OR (CUDA_VERSION VERSION_EQUAL "10.0" ))
102
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_75,code=sm_75" )
103
+ endif ()
104
+
105
+ if ((CUDA_VERSION VERSION_GREATER "11.0" ) OR (CUDA_VERSION VERSION_EQUAL "11.0" ))
106
+ set (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_80,code=sm_80" )
107
+ endif ()
144
108
145
109
if (WIN32 )
146
110
SET (CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler \" /wd 4068 /wd 4244 /wd 4267 /wd 4305 /wd 4819\" " )
147
111
windows_symbolic(ctc_entrypoint SRCS ctc_entrypoint.cu PATH src)
148
- CUDA_ADD_LIBRARY (warpctc ${WARPCTC_SHARED} src/.ctc_entrypoint.cu src/reduce.cu)
112
+ cuda_add_library (warpctc src/.ctc_entrypoint.cu src/reduce.cu)
149
113
else ()
150
- CUDA_ADD_LIBRARY(warpctc ${WARPCTC_SHARED} src/ctc_entrypoint.cu src/reduce.cu)
151
- endif (WIN32 )
152
-
153
- IF (!WITH_TORCH)
154
- TARGET_LINK_LIBRARIES (warpctc ${CUDA_curand_LIBRARY} )
155
- ENDIF ()
156
-
157
- if (BUILD_TESTS)
158
- add_executable (test_cpu tests/test_cpu.cpp )
159
- TARGET_LINK_LIBRARIES (test_cpu warpctc)
160
- SET_TARGET_PROPERTIES (test_cpu PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11" )
114
+ cuda_add_library(warpctc src/ctc_entrypoint.cu src/reduce.cu)
115
+ endif ()
116
+ endif ()
161
117
162
- cuda_add_executable(test_gpu tests/test_gpu.cu)
163
- TARGET_LINK_LIBRARIES (test_gpu warpctc ${CUDA_curand_LIBRARY} )
164
- endif (BUILD_TESTS)
165
-
166
- INSTALL (TARGETS warpctc
167
- RUNTIME DESTINATION "bin"
168
- LIBRARY DESTINATION "lib"
169
- ARCHIVE DESTINATION "lib" )
170
-
171
- INSTALL (FILES include /ctc.h DESTINATION "include" )
172
-
173
- IF (WITH_TORCH)
174
- MESSAGE (STATUS "Building Torch Bindings with GPU support" )
175
- INCLUDE_DIRECTORIES (${CUDA_INCLUDE_DIRS} "${CUDA_TOOLKIT_ROOT_DIR} /samples/common/inc" )
176
- INCLUDE_DIRECTORIES (${Torch_INSTALL_INCLUDE} ${Torch_INSTALL_INCLUDE} /TH ${Torch_INSTALL_INCLUDE} /THC)
177
-
178
- TARGET_LINK_LIBRARIES (warpctc luajit luaT THC TH ${CUDA_curand_LIBRARY} )
179
- INSTALL (TARGETS warpctc
180
- RUNTIME DESTINATION "${Torch_INSTALL_BIN_SUBDIR} "
181
- LIBRARY DESTINATION "${Torch_INSTALL_LIB_SUBDIR} "
182
- ARCHIVE DESTINATION "${Torch_INSTALL_LIB_SUBDIR} " )
183
-
184
- SET (src torch_binding/binding.cpp torch_binding/utils.c)
185
- SET (luasrc torch_binding/init.lua)
186
-
187
- ADD_TORCH_PACKAGE(warp_ctc "${src} " "${luasrc} " )
188
- IF (APPLE )
189
- TARGET_LINK_LIBRARIES (warp_ctc warpctc luajit luaT THC TH ${CUDA_curand_LIBRARY} )
190
- ELSE ()
191
- TARGET_LINK_LIBRARIES (warp_ctc warpctc luajit luaT THC TH ${CUDA_curand_LIBRARY} gomp)
192
- ENDIF ()
193
- ENDIF ()
194
118
195
- ELSE ()
196
- MESSAGE (STATUS "Building shared library with no GPU support" )
119
+ if (NOT OpenMP_FOUND)
120
+ target_link_libraries (warpctc Private OpenMP::OpenMP_CXX)
121
+ else ()
122
+ add_compile_definitions (CTC_DISABLE_OMP)
123
+ endif ()
197
124
198
- if ( NOT APPLE AND NOT WIN32 )
199
- set ( CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -std=c++11 -O2" )
200
- ENDIF ( )
125
+ target_include_directories (warpctc PUBLIC include )
126
+ install (TARGETS warpctc )
127
+ install ( FILES include /ctc.h DESTINATION "include" )
201
128
202
- ADD_LIBRARY (warpctc ${WARPCTC_SHARED} src/ctc_entrypoint.cpp)
203
129
204
- if (BUILD_TESTS)
205
- add_executable (test_cpu tests/test_cpu.cpp )
206
- TARGET_LINK_LIBRARIES (test_cpu warpctc)
207
- SET_TARGET_PROPERTIES (test_cpu PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11" )
208
- endif (BUILD_TESTS)
130
+ # If Torch is present
131
+ if (WITH_TORCH)
132
+ if (WITH_GPU)
133
+ message (STATUS "Building Torch Bindings with GPU upport" )
134
+ else ()
135
+ message (STATUS "Building Torch Bindings with no GPU support" )
136
+ endif ()
209
137
210
- INSTALL (TARGETS warpctc
211
- RUNTIME DESTINATION "bin"
212
- LIBRARY DESTINATION "lib"
213
- ARCHIVE DESTINATION "lib" )
138
+ target_link_libraries (warpctc PUBLIC luajit luaT TH)
139
+ target_include_directories (${Torch_INSTALL_INCLUDE} ${Torch_INSTALL_INCLUDE} /TH)
214
140
215
- INSTALL (FILES include /ctc.h DESTINATION "include" )
141
+ install (TARGETS warpctc
142
+ RUNTIME DESTINATION "${Torch_INSTALL_BIN_SUBDIR} "
143
+ LIBRARY DESTINATION "${Torch_INSTALL_LIB_SUBDIR} "
144
+ ARCHIVE DESTINATION "${Torch_INSTALL_LIB_SUBDIR} " )
216
145
217
- IF (WITH_TORCH)
218
- MESSAGE (STATUS "Building Torch Bindings with no GPU support" )
219
- add_definitions (-DTORCH_NOGPU)
220
- INCLUDE_DIRECTORIES (${Torch_INSTALL_INCLUDE} ${Torch_INSTALL_INCLUDE} /TH)
146
+ add_torch_package(
147
+ warp_ctc
148
+ torch_binding/binding.cpp
149
+ torch_binding/utils.c
150
+ torch_binding/init.lua
151
+ )
152
+ target_link_libraries (warp_ctc warpctc)
221
153
222
- TARGET_LINK_LIBRARIES (warpctc luajit luaT TH)
154
+ if (NOT APPLE )
155
+ target_link_libraries (warp_ctc gomp)
156
+ endif ()
223
157
224
- INSTALL (TARGETS warpctc
225
- RUNTIME DESTINATION "${Torch_INSTALL_BIN_SUBDIR} "
226
- LIBRARY DESTINATION "${Torch_INSTALL_LIB_SUBDIR} "
227
- ARCHIVE DESTINATION "${Torch_INSTALL_LIB_SUBDIR} " )
158
+ if (WITH_GPU)
159
+ include_directories (${Torch_INSTALL_INCLUDE} /THC ${CUDA_INCLUDE_DIRS} "${CUDA_TOOLKIT_ROOT_DIR} /samples/common/inc" )
160
+ target_link_libraries (warpctc THC ${CUDA_curand_LIBRARY} )
161
+ target_link_libraries (warp_ctc THC ${CUDA_curand_LIBRARY} )
162
+ else ()
163
+ add_compile_definitions (TORCH_NOGPU)
164
+ endif ()
228
165
229
- SET (src torch_binding/binding.cpp torch_binding/utils.c)
230
- SET (luasrc torch_binding/init.lua)
166
+ endif ()
231
167
232
- ADD_TORCH_PACKAGE(warp_ctc "${src} " "${luasrc} " )
233
- IF (APPLE )
234
- TARGET_LINK_LIBRARIES (warp_ctc warpctc luajit luaT TH)
235
- ELSE ()
236
- TARGET_LINK_LIBRARIES (warp_ctc warpctc luajit luaT TH gomp)
237
- ENDIF ()
238
- ENDIF ()
239
168
240
- ENDIF ()
169
+ # Build Tests
170
+ if (BUILD_TESTS)
171
+ add_executable (test_cpu tests/test_cpu.cpp )
172
+ target_link_libraries (test_cpu warpctc)
173
+ target_include_directories (test_cpu PRIVATE tests)
241
174
175
+ if (WITH_GPU)
176
+ cuda_add_executable(test_gpu tests/test_gpu.cu)
177
+ target_link_libraries (test_gpu warpctc ${CUDA_curand_LIBRARY} )
178
+ target_include_directories (test_gpu PRIVATE tests)
179
+ endif ()
242
180
181
+ endif ()
0 commit comments