Skip to content

Commit d913345

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

File tree

1 file changed

+99
-160
lines changed

1 file changed

+99
-160
lines changed

CMakeLists.txt

+99-160
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,36 @@
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)
135

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

1710
option(WITH_GPU "compile warp-ctc with CUDA." ${CUDA_FOUND})
11+
option(WITH_OMP "compile warp-ctc with OpenMP." ${OpenMP_FOUND})
1812
option(WITH_TORCH "compile warp-ctc with Torch." ${Torch_FOUND})
19-
option(WITH_OMP "compile warp-ctc with OpenMP." ON)
2013
option(BUILD_TESTS "build warp-ctc unit tests." ON)
2114
option(BUILD_SHARED "build warp-ctc shared library." ON)
2215

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

2921
if(WIN32)
3022
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")
4523
endif(WIN32)
4624

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
9226
IF (APPLE)
9327
EXEC_PROGRAM(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
9428
STRING(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION})
9529
MESSAGE(STATUS "DARWIN_VERSION=${DARWIN_VERSION}")
9630

97-
#for el capitain have to use rpath
31+
add_compile_definitions(APPLE)
9832

33+
#for el capitain have to use rpath
9934
IF (DARWIN_VERSION LESS 15)
10035
set(CMAKE_SKIP_RPATH TRUE)
10136
ENDIF ()
@@ -105,6 +40,7 @@ ELSE()
10540
set(CMAKE_SKIP_RPATH TRUE)
10641
ENDIF()
10742

43+
10844
# windows treat symbolic file as a real file, which is different with unix
10945
# We create a hidden file and compile it instead of origin source file.
11046
function(windows_symbolic TARGET)
@@ -132,111 +68,114 @@ function(windows_symbolic TARGET)
13268
COMMAND ${CMAKE_COMMAND} -E remove ${final_path}/.${src}.cu
13369
COMMAND ${CMAKE_COMMAND} -E copy "${final_path}/${src}.cpp" "${final_path}/.${src}.cu"
13470
COMMENT "create hidden file of ${src}.cu")
135-
endif(copy_flag)
71+
endif()
13672
add_custom_target(${TARGET} ALL DEPENDS ${final_path}/.${src}.cu)
13773
endforeach()
13874
endfunction()
13975

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")
14187

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

145109
if (WIN32)
146110
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -Xcompiler \"/wd 4068 /wd 4244 /wd 4267 /wd 4305 /wd 4819\"")
147111
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)
149113
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()
161117

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

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

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")
201128

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

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

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

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}")
216145

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

222-
TARGET_LINK_LIBRARIES(warpctc luajit luaT TH)
154+
if (NOT APPLE)
155+
target_link_libraries(warp_ctc gomp)
156+
endif()
223157

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

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

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

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

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

181+
endif()

0 commit comments

Comments
 (0)