Skip to content

Commit 9b45373

Browse files
authored
Merge pull request #1058 from gcuendet/add-cmake-support
Add CMake support to build the libraries
2 parents 515b9b9 + bde1525 commit 9b45373

36 files changed

+1419
-197
lines changed

CMakeLists.txt

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
2+
cmake_minimum_required(VERSION 3.17)
3+
project(Torch-TensorRT LANGUAGES CXX)
4+
5+
# use c++17
6+
set(CMAKE_CXX_STANDARD 17)
7+
8+
# Build the libraries with -fPIC
9+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
10+
11+
if (DEFINED CMAKE_MODULE_PATH)
12+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} CACHE PATH "Path to the folder containing finders")
13+
endif()
14+
15+
include(cmake/build_options.cmake)
16+
include(cmake/paths.cmake)
17+
include(cmake/dependencies.cmake)
18+
if(MSVC)
19+
add_compile_options(/wd4624 /wd4067 /permissive-)
20+
# When using Ninja generator, suppress the warning D9025
21+
string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
22+
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
23+
endif()
24+
# -----------------------------------------
25+
# compilation
26+
# -----------------------------------------
27+
add_subdirectory(core)
28+
add_subdirectory(cpp)
29+
30+
include(CMakePackageConfigHelpers)
31+
32+
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
33+
"${CMAKE_CURRENT_BINARY_DIR}/torchtrtConfig.cmake"
34+
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/torchtrt
35+
)
36+
37+
install(FILES
38+
"${CMAKE_CURRENT_BINARY_DIR}/torchtrtConfig.cmake"
39+
# "${CMAKE_CURRENT_BINARY_DIR}/torchtrtConfigVersion.cmake"
40+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/torchtrt
41+
)

Config.cmake.in

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@PACKAGE_INIT@
2+
3+
include(CMakeFindDependencyMacro)
4+
5+
find_dependency(Torch)
6+
find_package(TensorRT QUIET)
7+
if (NOT TensorRT_FOUND)
8+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Modules")
9+
find_dependency(TensorRT)
10+
endif()
11+
include("${CMAKE_CURRENT_LIST_DIR}/torchtrtTargets.cmake")
12+
13+
check_required_components(MathFunctions)

cmake/Modules/FindTensorRT.cmake

+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
# This module defines the following variables:
2+
#
3+
# ::
4+
#
5+
# TensorRT_INCLUDE_DIRS
6+
# TensorRT_LIBRARIES
7+
# TensorRT_FOUND
8+
#
9+
# ::
10+
#
11+
# TensorRT_VERSION_STRING - version (x.y.z)
12+
# TensorRT_VERSION_MAJOR - major version (x)
13+
# TensorRT_VERSION_MINOR - minor version (y)
14+
# TensorRT_VERSION_PATCH - patch version (z)
15+
#
16+
# Hints
17+
# ^^^^^
18+
# A user may set ``TensorRT_ROOT`` to an installation root to tell this module where to look.
19+
#
20+
set(_TensorRT_SEARCHES)
21+
22+
if(TensorRT_ROOT)
23+
set(_TensorRT_SEARCH_ROOT PATHS ${TensorRT_ROOT} NO_DEFAULT_PATH)
24+
list(APPEND _TensorRT_SEARCHES _TensorRT_SEARCH_ROOT)
25+
endif()
26+
27+
# appends some common paths
28+
set(_TensorRT_SEARCH_NORMAL
29+
PATHS "/usr"
30+
)
31+
list(APPEND _TensorRT_SEARCHES _TensorRT_SEARCH_NORMAL)
32+
33+
# Include dir
34+
foreach(search ${_TensorRT_SEARCHES})
35+
find_path(TensorRT_INCLUDE_DIR NAMES NvInfer.h ${${search}} PATH_SUFFIXES include)
36+
endforeach()
37+
38+
if(NOT TensorRT_LIBRARY)
39+
foreach(search ${_TensorRT_SEARCHES})
40+
find_library(TensorRT_LIBRARY NAMES nvinfer ${${search}} PATH_SUFFIXES lib)
41+
endforeach()
42+
endif()
43+
44+
if(NOT TensorRT_nvinfer_plugin_LIBRARY)
45+
foreach(search ${_TensorRT_SEARCHES})
46+
find_library(TensorRT_nvinfer_plugin_LIBRARY NAMES nvinfer_plugin ${${search}} PATH_SUFFIXES lib)
47+
endforeach()
48+
endif()
49+
50+
mark_as_advanced(TensorRT_INCLUDE_DIR)
51+
52+
if(TensorRT_INCLUDE_DIR AND EXISTS "${TensorRT_INCLUDE_DIR}/NvInfer.h")
53+
file(STRINGS "${TensorRT_INCLUDE_DIR}/NvInfer.h" TensorRT_MAJOR REGEX "^#define NV_TENSORRT_MAJOR [0-9]+.*$")
54+
file(STRINGS "${TensorRT_INCLUDE_DIR}/NvInfer.h" TensorRT_MINOR REGEX "^#define NV_TENSORRT_MINOR [0-9]+.*$")
55+
file(STRINGS "${TensorRT_INCLUDE_DIR}/NvInfer.h" TensorRT_PATCH REGEX "^#define NV_TENSORRT_PATCH [0-9]+.*$")
56+
57+
string(REGEX REPLACE "^#define NV_TENSORRT_MAJOR ([0-9]+).*$" "\\1" TensorRT_VERSION_MAJOR "${TensorRT_MAJOR}")
58+
string(REGEX REPLACE "^#define NV_TENSORRT_MINOR ([0-9]+).*$" "\\1" TensorRT_VERSION_MINOR "${TensorRT_MINOR}")
59+
string(REGEX REPLACE "^#define NV_TENSORRT_PATCH ([0-9]+).*$" "\\1" TensorRT_VERSION_PATCH "${TensorRT_PATCH}")
60+
set(TensorRT_VERSION_STRING "${TensorRT_VERSION_MAJOR}.${TensorRT_VERSION_MINOR}.${TensorRT_VERSION_PATCH}")
61+
endif()
62+
63+
include(FindPackageHandleStandardArgs)
64+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(TensorRT REQUIRED_VARS TensorRT_LIBRARY TensorRT_INCLUDE_DIR VERSION_VAR TensorRT_VERSION_STRING)
65+
66+
if(TensorRT_FOUND)
67+
set(TensorRT_INCLUDE_DIRS ${TensorRT_INCLUDE_DIR})
68+
69+
if(NOT TensorRT_LIBRARIES)
70+
set(TensorRT_LIBRARIES ${TensorRT_LIBRARY})
71+
if (TensorRT_nvinfer_plugin_LIBRARY)
72+
list(APPEND TensorRT_LIBRARIES ${TensorRT_nvinfer_plugin_LIBRARY})
73+
endif()
74+
endif()
75+
76+
if(NOT TARGET TensorRT::TensorRT)
77+
add_library(TensorRT INTERFACE IMPORTED)
78+
add_library(TensorRT::TensorRT ALIAS TensorRT)
79+
endif()
80+
81+
if(NOT TARGET TensorRT::nvinfer)
82+
add_library(TensorRT::nvinfer SHARED IMPORTED)
83+
if (WIN32)
84+
foreach(search ${_TensorRT_SEARCHES})
85+
find_file(TensorRT_LIBRARY_DLL
86+
NAMES nvinfer.dll
87+
PATHS ${${search}}
88+
PATH_SUFFIXES bin
89+
)
90+
endforeach()
91+
92+
set_target_properties(TensorRT::nvinfer PROPERTIES
93+
INTERFACE_INCLUDE_DIRECTORIES "${TensorRT_INCLUDE_DIRS}"
94+
IMPORTED_LOCATION "${TensorRT_LIBRARY_DLL}"
95+
IMPORTED_IMPLIB "${TensorRT_LIBRARY}"
96+
)
97+
else()
98+
set_target_properties(TensorRT::nvinfer PROPERTIES
99+
INTERFACE_INCLUDE_DIRECTORIES "${TensorRT_INCLUDE_DIRS}"
100+
IMPORTED_LOCATION "${TensorRT_LIBRARY}"
101+
)
102+
endif()
103+
target_link_libraries(TensorRT INTERFACE TensorRT::nvinfer)
104+
endif()
105+
106+
if(NOT TARGET TensorRT::nvinfer_plugin AND TensorRT_nvinfer_plugin_LIBRARY)
107+
add_library(TensorRT::nvinfer_plugin SHARED IMPORTED)
108+
if (WIN32)
109+
foreach(search ${_TensorRT_SEARCHES})
110+
find_file(TensorRT_nvinfer_plugin_LIBRARY_DLL
111+
NAMES nvinfer_plugin.dll
112+
PATHS ${${search}}
113+
PATH_SUFFIXES bin
114+
)
115+
endforeach()
116+
117+
set_target_properties(TensorRT::nvinfer_plugin PROPERTIES
118+
INTERFACE_INCLUDE_DIRECTORIES "${TensorRT_INCLUDE_DIRS}"
119+
IMPORTED_LOCATION "${TensorRT_nvinfer_plugin_LIBRARY_DLL}"
120+
IMPORTED_IMPLIB "${TensorRT_nvinfer_plugin_LIBRARY}"
121+
)
122+
else()
123+
set_target_properties(TensorRT::nvinfer_plugin PROPERTIES
124+
INTERFACE_INCLUDE_DIRECTORIES "${TensorRT_INCLUDE_DIRS}"
125+
IMPORTED_LOCATION "${TensorRT_nvinfer_plugin_LIBRARY}"
126+
)
127+
endif()
128+
target_link_libraries(TensorRT INTERFACE TensorRT::nvinfer_plugin)
129+
endif()
130+
endif()

0 commit comments

Comments
 (0)