Skip to content

Commit e828dac

Browse files
author
Alejandro Alvarez
committed
Upgrade CMakeLists to use v3.15 as minimum and simplify building steps
1 parent 95a461e commit e828dac

File tree

1 file changed

+103
-161
lines changed

1 file changed

+103
-161
lines changed

CMakeLists.txt

+103-161
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,35 @@
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)
62

73
project(ctc_release)
84

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)
168

179
option(WITH_GPU "compile warp-ctc with CUDA." ${CUDA_FOUND})
10+
option(WITH_OMP "compile warp-ctc with OpenMP." ${OpenMP_FOUND})
1811
option(WITH_TORCH "compile warp-ctc with Torch." ${Torch_FOUND})
19-
option(WITH_OMP "compile warp-ctc with OpenMP." ON)
2012
option(BUILD_TESTS "build warp-ctc unit tests." ON)
2113
option(BUILD_SHARED "build warp-ctc shared library." ON)
2214

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+
2819

2920
if(WIN32)
3021
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")
4522
endif(WIN32)
4623

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
9225
IF (APPLE)
9326
EXEC_PROGRAM(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
9427
STRING(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
9528
MESSAGE(STATUS "DARWIN_VERSION=${DARWIN_VERSION}")
9629

97-
#for el capitain have to use rpath
30+
add_compile_definitions(APPLE)
9831

32+
#for el capitain have to use rpath
9933
IF (DARWIN_VERSION LESS 15)
10034
set(CMAKE_SKIP_RPATH TRUE)
10135
ENDIF ()
@@ -105,6 +39,7 @@ ELSE()
10539
set(CMAKE_SKIP_RPATH TRUE)
10640
ENDIF()
10741

42+
10843
# windows treat symbolic file as a real file, which is different with unix
10944
# We create a hidden file and compile it instead of origin source file.
11045
function(windows_symbolic TARGET)
@@ -132,111 +67,118 @@ function(windows_symbolic TARGET)
13267
COMMAND ${CMAKE_COMMAND} -E remove ${final_path}/.${src}.cu
13368
COMMAND ${CMAKE_COMMAND} -E copy "${final_path}/${src}.cpp" "${final_path}/.${src}.cu"
13469
COMMENT "create hidden file of ${src}.cu")
135-
endif(copy_flag)
70+
endif()
13671
add_custom_target(${TARGET} ALL DEPENDS ${final_path}/.${src}.cu)
13772
endforeach()
13873
endfunction()
13974

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()
141103

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()
144107

145108
if (WIN32)
146109
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler \"/wd 4068 /wd 4244 /wd 4267 /wd 4305 /wd 4819\"")
147110
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)
149112
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()
161116

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()
194117

195-
ELSE()
196-
MESSAGE(STATUS "Building shared library with no GPU support")
118+
if(NOT WITH_OMP)
119+
#target_link_libraries(warpctc PRIVATE OpenMP::OpenMP_CXX)
120+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
121+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
122+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
123+
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler ${OpenMP_CXX_FLAGS}")
124+
else()
125+
add_compile_definitions(CTC_DISABLE_OMP)
126+
endif()
197127

198-
if (NOT APPLE AND NOT WIN32)
199-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2")
200-
ENDIF()
128+
target_include_directories(warpctc PUBLIC include)
129+
install(TARGETS warpctc)
130+
install(FILES include/ctc.h DESTINATION "include")
201131

202-
ADD_LIBRARY(warpctc ${WARPCTC_SHARED} src/ctc_entrypoint.cpp)
203132

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)
133+
# If Torch is present
134+
if (WITH_TORCH)
135+
if(WITH_GPU)
136+
message(STATUS "Building Torch Bindings with GPU upport")
137+
else()
138+
message(STATUS "Building Torch Bindings with no GPU support")
139+
endif()
209140

210-
INSTALL(TARGETS warpctc
211-
RUNTIME DESTINATION "bin"
212-
LIBRARY DESTINATION "lib"
213-
ARCHIVE DESTINATION "lib")
141+
target_link_libraries(warpctc PUBLIC luajit luaT TH)
142+
target_include_directories(${Torch_INSTALL_INCLUDE} ${Torch_INSTALL_INCLUDE}/TH)
214143

215-
INSTALL(FILES include/ctc.h DESTINATION "include")
144+
install(TARGETS warpctc
145+
RUNTIME DESTINATION "${Torch_INSTALL_BIN_SUBDIR}"
146+
LIBRARY DESTINATION "${Torch_INSTALL_LIB_SUBDIR}"
147+
ARCHIVE DESTINATION "${Torch_INSTALL_LIB_SUBDIR}")
216148

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)
149+
add_torch_package(
150+
warp_ctc
151+
torch_binding/binding.cpp
152+
torch_binding/utils.c
153+
torch_binding/init.lua
154+
)
155+
target_link_libraries(warp_ctc PRIVATE warpctc)
221156

222-
TARGET_LINK_LIBRARIES(warpctc luajit luaT TH)
157+
if (NOT APPLE)
158+
target_link_libraries(warp_ctc PRIVATE gomp)
159+
endif()
223160

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}")
161+
if(WITH_GPU)
162+
include_directories(${Torch_INSTALL_INCLUDE}/THC ${CUDA_INCLUDE_DIRS} "${CUDA_TOOLKIT_ROOT_DIR}/samples/common/inc")
163+
target_link_libraries(warpctc PRIVATE THC ${CUDA_curand_LIBRARY})
164+
target_link_libraries(warp_ctc PRIVATE THC ${CUDA_curand_LIBRARY})
165+
else()
166+
add_compile_definitions(TORCH_NOGPU)
167+
endif()
228168

229-
SET(src torch_binding/binding.cpp torch_binding/utils.c)
230-
SET(luasrc torch_binding/init.lua)
169+
endif()
231170

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()
239171

240-
ENDIF()
172+
# Build Tests
173+
if(BUILD_TESTS)
174+
add_executable(test_cpu tests/test_cpu.cpp )
175+
target_link_libraries(test_cpu warpctc)
176+
target_include_directories(test_cpu PRIVATE tests)
241177

178+
if(WITH_GPU)
179+
cuda_add_executable(test_gpu tests/test_gpu.cu)
180+
target_link_libraries(test_gpu warpctc ${CUDA_curand_LIBRARY})
181+
target_include_directories(test_gpu PRIVATE tests)
182+
endif()
242183

184+
endif()

0 commit comments

Comments
 (0)