Files
nvidia--tensorrt/plugin/CMakeLists.txt
T
wehub-resource-sync c8a779b1bb
Docker Image CI / build-ubuntu2004 (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:36:55 +08:00

267 lines
8.1 KiB
CMake

#
# SPDX-FileCopyrightText: Copyright (c) 1993-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
include(ShouldCompileKernel)
option(TRT_BUILD_INCLUDE_BERT_QKV_PLUGIN "Build the BERT QKV to Context Plugin and related plugins." ON)
# Create the main object library, which is shared between plugin, plugin_internal, and plugin_static.
add_library(trt_plugins OBJECT)
function(add_plugin_source)
target_sources(trt_plugins PRIVATE ${ARGN})
endfunction()
# Create the VC object lib, used by vc and vc_static.
add_library(trt_vc_plugins OBJECT)
function(add_vc_plugin_source)
target_sources(trt_vc_plugins PRIVATE ${ARGN})
endfunction()
set(TRT_PLUGIN_NAMES
cropAndResizePlugin
decodeBbox3DPlugin
detectionLayerPlugin
disentangledAttentionPlugin
efficientNMSPlugin
flattenConcat
generateDetectionPlugin
gridAnchorPlugin
groupNormalizationPlugin
instanceNormalizationPlugin
modulatedDeformConvPlugin
multilevelCropAndResizePlugin
multilevelProposeROI
multiscaleDeformableAttnPlugin
nvFasterRCNN
pillarScatterPlugin
priorBoxPlugin
proposalLayerPlugin
pyramidROIAlignPlugin
regionPlugin
reorgPlugin
resizeNearestPlugin
roiAlignPlugin
scatterElementsPlugin
scatterPlugin
topkLastDimPlugin
voxelGeneratorPlugin
)
if(${TRT_BUILD_INCLUDE_BERT_QKV_PLUGIN})
list(APPEND TRT_PLUGIN_NAMES
bertQKVToContextPlugin
embLayerNormPlugin
fcPlugin
skipLayerNormPlugin
)
endif()
add_subdirectory(api)
add_subdirectory(vc)
add_subdirectory(common)
foreach(PLUGIN_NAME IN LISTS TRT_PLUGIN_NAMES)
add_subdirectory(${PLUGIN_NAME})
endforeach()
set(trt_plugin_include_dirs
$<BUILD_LOCAL_INTERFACE:${TRT_EXTERNALS_DIR}>
$<BUILD_LOCAL_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_include_directories(trt_plugins PUBLIC ${trt_plugin_include_dirs})
target_include_directories(trt_vc_plugins PUBLIC ${trt_plugin_include_dirs})
# Use the compile-time dependencies of TRT when compiling the objects before the link stage.
# The final targets will be responsible for selecting the target TRT distribution to use.
target_link_libraries(trt_plugins PRIVATE $<COMPILE_ONLY:tensorrt>)
target_link_libraries(trt_vc_plugins PRIVATE $<COMPILE_ONLY:tensorrt>)
# Use true link dependencies on the global definitions and cudart.
target_link_libraries(trt_plugins PRIVATE trt_global_definitions TRT::cudart)
target_link_libraries(trt_vc_plugins PRIVATE trt_global_definitions TRT::cudart)
foreach(SM IN LISTS CMAKE_CUDA_ARCHITECTURES)
get_numeric_sm(${SM} "SM")
target_compile_definitions(trt_plugins PUBLIC "ENABLE_SM${SM}")
target_compile_definitions(trt_vc_plugins PUBLIC "ENABLE_SM${SM}")
endforeach()
target_compile_options(trt_plugins PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr>)
target_compile_options(trt_vc_plugins PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr>)
target_compile_definitions(trt_vc_plugins PRIVATE
COMPILE_VFC_PLUGIN=1
)
# Create all the library targets, reusing the objects we've compiled in the first step.
add_library(tensorrt_plugins SHARED)
target_link_libraries(tensorrt_plugins PRIVATE trt_plugins)
add_library(tensorrt_plugins_static STATIC)
target_bundle_libraries(tensorrt_plugins_static PRIVATE trt_plugins)
add_library(tensorrt_vc_plugins SHARED)
target_link_libraries(tensorrt_vc_plugins PRIVATE trt_vc_plugins)
add_library(tensorrt_vc_plugins_static STATIC)
target_bundle_libraries(tensorrt_vc_plugins_static PRIVATE trt_plugins)
if(NOT MSVC)
set(trt_plugins_link_options
"LINKER:-z,relro"
"LINKER:-Bsymbolic"
"LINKER:--no-undefined"
"LINKER:--no-as-needed"
"$<$<CONFIG:Release>:LINKER:--strip-all>"
)
else()
set(trt_plugins_link_options)
endif()
set(trt_plugin_dependencies
tensorrt
trt_global_definitions
)
if(NOT MSVC)
list(APPEND trt_plugin_dependencies
Threads::Threads
CUDA::culibos
)
endif()
### TRT Plugin Setup
target_link_libraries(tensorrt_plugins PRIVATE ${trt_plugin_dependencies})
target_link_options(tensorrt_plugins PRIVATE ${trt_plugins_link_options})
set_target_properties(
tensorrt_plugins
PROPERTIES CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
OUTPUT_NAME nvinfer_plugin
VERSION ${TensorRT_VERSION}
SOVERSION ${TRT_MAJOR}
)
apply_export_map(
TARGETS tensorrt_plugins
)
update_windows_output_name(tensorrt_plugins ${TRT_MAJOR} ${TRT_MINOR})
### Static Plugin Setup
set(trt_plugin_static_dependencies
tensorrt_static
$<BUILD_LOCAL_INTERFACE:trt_global_definitions>
)
target_include_directories(tensorrt_plugins_static PRIVATE ${trt_plugin_include_dirs})
target_link_libraries(tensorrt_plugins_static PRIVATE ${trt_plugin_static_dependencies})
set_target_properties(
tensorrt_plugins_static
PROPERTIES CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
OUTPUT_NAME nvinfer_plugin_static
VERSION ${TensorRT_VERSION}
SOVERSION ${TRT_MAJOR}
LINK_DEPENDS ${CMAKE_CURRENT_LIST_DIR}/exports/nvinfer_plugin.map)
if(NOT ${TRT_BUILD_ENABLE_STATIC_LIBS})
set_target_properties(tensorrt_plugins_static
PROPERTIES EXCLUDE_FROM_ALL ON
)
endif()
smoke_test_static_lib(tensorrt_plugins_static)
### VC Plugin Setup
if (NOT MSVC)
set(trt_vc_plugins_link_options
"LINKER:-z,relro"
"LINKER:-Bsymbolic"
"LINKER:--no-undefined"
"LINKER:--no-as-needed"
"$<$<CONFIG:Release>:LINKER:--strip-all>"
)
else()
set(trt_vc_plugins_link_options)
endif()
# Target properties for tensorrt_vc_plugins
# This library includes a minimal subset of the plugins used for version compatibility.
target_include_directories(tensorrt_vc_plugins PRIVATE ${trt_plugin_include_dirs})
target_link_libraries(tensorrt_vc_plugins PRIVATE trt_global_definitions)
target_link_options(tensorrt_vc_plugins PRIVATE ${trt_vc_plugins_link_options})
set_target_properties(
tensorrt_vc_plugins
PROPERTIES CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
OUTPUT_NAME nvinfer_vc_plugin
VERSION ${TensorRT_VERSION}
SOVERSION ${TRT_MAJOR}
)
apply_export_map(
TARGETS tensorrt_vc_plugins
)
update_windows_output_name(tensorrt_vc_plugins ${TRT_MAJOR} ${TRT_MINOR})
### VC Plugin Static Setup
target_include_directories(tensorrt_vc_plugins_static PRIVATE ${trt_plugin_include_dirs})
target_link_libraries(tensorrt_vc_plugins_static PRIVATE ${trt_plugin_static_dependencies})
set_target_properties(
tensorrt_vc_plugins_static
PROPERTIES CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
OUTPUT_NAME nvinfer_vc_plugin_static
VERSION ${TensorRT_VERSION}
SOVERSION ${TRT_MAJOR}
LINK_DEPENDS ${CMAKE_CURRENT_LIST_DIR}/exports/nvinfer_vc_plugin.map)
if(NOT ${TRT_BUILD_ENABLE_STATIC_LIBS})
set_target_properties(tensorrt_vc_plugins_static
PROPERTIES EXCLUDE_FROM_ALL ON
)
endif()
smoke_test_static_lib(tensorrt_vc_plugins_static)
if(${TRT_BUILD_STUB_LIBS} AND NOT MSVC)
create_stub_lib(tensorrt_plugins)
create_stub_lib(tensorrt_vc_plugins)
endif()
installLibraries(
TARGETS tensorrt_plugins tensorrt_vc_plugins
OPTIONAL
COMPONENT external
EXPORT TensorRT
)
installLibraries(
TARGETS tensorrt_plugins_static tensorrt_vc_plugins_static
OPTIONAL
COMPONENT external
EXPORT TensorRT_Static
)