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