TensorRT-LLMs/cpp/cmake/modules/FindTensorRT.cmake
Yuan Tong f5ddb7ab4a
fix: support TensorRT 10.11+ in FindTensorRT.cmake (#4353)
Signed-off-by: Yuan Tong <13075180+tongyuantongyu@users.noreply.github.com>
2025-05-16 14:04:56 +08:00

191 lines
6.6 KiB
CMake

#
# SPDX-FileCopyrightText: Copyright (c) 1993-2022 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.
#
# TensorRT install path in docker image
set(TensorRT_WELL_KNOWN_ROOT /usr/local/tensorrt)
find_path(
TensorRT_INCLUDE_DIR
NAMES NvInfer.h
PATHS ${TensorRT_WELL_KNOWN_ROOT}/include)
function(_tensorrt_get_version)
unset(TensorRT_VERSION_STRING PARENT_SCOPE)
set(_hdr_file "${TensorRT_INCLUDE_DIR}/NvInferVersion.h")
if(NOT EXISTS "${_hdr_file}")
return()
endif()
file(STRINGS "${_hdr_file}" IS_10_11_NEW_MACRO REGEX "TRT_MAJOR_ENTERPRISE")
if(IS_10_11_NEW_MACRO)
file(STRINGS "${_hdr_file}" VERSION_STRINGS
REGEX "#define TRT_.+_ENTERPRISE.*")
foreach(TYPE MAJOR MINOR PATCH BUILD)
string(REGEX MATCH "TRT_${TYPE}_ENTERPRISE [0-9]+" TRT_TYPE_STRING
${VERSION_STRINGS})
string(REGEX MATCH "[0-9]+" TensorRT_VERSION_${TYPE} ${TRT_TYPE_STRING})
endforeach(TYPE)
else()
file(STRINGS "${_hdr_file}" VERSION_STRINGS REGEX "#define NV_TENSORRT_.*")
foreach(TYPE MAJOR MINOR PATCH BUILD)
string(REGEX MATCH "NV_TENSORRT_${TYPE} [0-9]+" TRT_TYPE_STRING
${VERSION_STRINGS})
string(REGEX MATCH "[0-9]+" TensorRT_VERSION_${TYPE} ${TRT_TYPE_STRING})
endforeach(TYPE)
endif()
set(TensorRT_VERSION_MAJOR
${TensorRT_VERSION_MAJOR}
PARENT_SCOPE)
set(TensorRT_VERSION_STRING
"${TensorRT_VERSION_MAJOR}.${TensorRT_VERSION_MINOR}.${TensorRT_VERSION_PATCH}.${TensorRT_VERSION_BUILD}"
PARENT_SCOPE)
endfunction(_tensorrt_get_version)
_tensorrt_get_version()
macro(_tensorrt_find_dll VAR)
find_file(
${VAR}
NAMES ${ARGN}
HINTS ${TensorRT_ROOT}
PATH_SUFFIXES bin)
endmacro(_tensorrt_find_dll)
find_library(
TensorRT_LIBRARY
NAMES "nvinfer_${TensorRT_VERSION_MAJOR}" nvinfer
PATHS ${TensorRT_WELL_KNOWN_ROOT}/lib)
if(WIN32)
_tensorrt_find_dll(TensorRT_DLL "nvinfer_${TensorRT_VERSION_MAJOR}.dll"
nvinfer.dll)
endif()
if(TensorRT_LIBRARY)
set(TensorRT_LIBRARIES ${TensorRT_LIBRARIES} ${TensorRT_LIBRARY})
endif(TensorRT_LIBRARY)
if(TensorRT_FIND_COMPONENTS)
list(REMOVE_ITEM TensorRT_FIND_COMPONENTS "nvinfer")
if("OnnxParser" IN_LIST TensorRT_FIND_COMPONENTS)
find_path(
TensorRT_OnnxParser_INCLUDE_DIR
NAMES NvOnnxParser.h
PATHS ${TensorRT_WELL_KNOWN_ROOT}/include)
find_library(
TensorRT_OnnxParser_LIBRARY
NAMES "nvonnxparser_${TensorRT_VERSION_MAJOR}" nvonnxparser
PATHS ${TensorRT_WELL_KNOWN_ROOT}/lib)
if(TensorRT_OnnxParser_LIBRARY AND TensorRT_LIBRARIES)
set(TensorRT_LIBRARIES ${TensorRT_LIBRARIES}
${TensorRT_OnnxParser_LIBRARY})
set(TensorRT_OnnxParser_FOUND TRUE)
endif()
if(WIN32)
_tensorrt_find_dll(
TensorRT_OnnxParser_DLL "nvonnxparser_${TensorRT_VERSION_MAJOR}.dll"
nvonnxparser.dll)
endif()
endif()
if("Plugin" IN_LIST TensorRT_FIND_COMPONENTS)
find_path(
TensorRT_Plugin_INCLUDE_DIR
NAMES NvInferPlugin.h
PATHS ${TensorRT_WELL_KNOWN_ROOT}/include)
find_library(
TensorRT_Plugin_LIBRARY
NAMES "nvinfer_plugin_${TensorRT_VERSION_MAJOR}" nvinfer_plugin
PATHS ${TensorRT_WELL_KNOWN_ROOT}/lib)
if(TensorRT_Plugin_LIBRARY AND TensorRT_LIBRARIES)
set(TensorRT_LIBRARIES ${TensorRT_LIBRARIES} ${TensorRT_Plugin_LIBRARY})
set(TensorRT_Plugin_FOUND TRUE)
endif()
if(WIN32)
_tensorrt_find_dll(
TensorRT_Plugin_DLL "nvinfer_plugin_${TensorRT_VERSION_MAJOR}.dll"
nvinfer_plugin.dll)
endif()
endif()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
TensorRT
FOUND_VAR TensorRT_FOUND
REQUIRED_VARS TensorRT_LIBRARY TensorRT_LIBRARIES TensorRT_INCLUDE_DIR
VERSION_VAR TensorRT_VERSION_STRING
HANDLE_COMPONENTS)
if(NOT TARGET TensorRT::NvInfer)
add_library(TensorRT::NvInfer SHARED IMPORTED)
target_include_directories(TensorRT::NvInfer SYSTEM
INTERFACE "${TensorRT_INCLUDE_DIR}")
if(WIN32)
set_property(TARGET TensorRT::NvInfer PROPERTY IMPORTED_LOCATION
"${TensorRT_DLL}")
set_property(TARGET TensorRT::NvInfer PROPERTY IMPORTED_IMPLIB
"${TensorRT_LIBRARY}")
else()
set_property(TARGET TensorRT::NvInfer PROPERTY IMPORTED_LOCATION
"${TensorRT_LIBRARY}")
endif()
endif()
if(NOT TARGET TensorRT::OnnxParser AND "OnnxParser" IN_LIST
TensorRT_FIND_COMPONENTS)
add_library(TensorRT::OnnxParser SHARED IMPORTED)
target_include_directories(TensorRT::OnnxParser SYSTEM
INTERFACE "${TensorRT_OnnxParser_INCLUDE_DIR}")
target_link_libraries(TensorRT::OnnxParser INTERFACE TensorRT::NvInfer)
if(WIN32)
set_property(TARGET TensorRT::OnnxParser
PROPERTY IMPORTED_LOCATION "${TensorRT_OnnxParser_DLL}")
set_property(TARGET TensorRT::OnnxParser
PROPERTY IMPORTED_IMPLIB "${TensorRT_OnnxParser_LIBRARY}")
else()
set_property(TARGET TensorRT::OnnxParser
PROPERTY IMPORTED_LOCATION "${TensorRT_OnnxParser_LIBRARY}")
endif()
endif()
if(NOT TARGET TensorRT::Plugin AND "Plugin" IN_LIST TensorRT_FIND_COMPONENTS)
add_library(TensorRT::Plugin SHARED IMPORTED)
target_include_directories(TensorRT::Plugin SYSTEM
INTERFACE "${TensorRT_Plugin_INCLUDE_DIR}")
target_link_libraries(TensorRT::Plugin INTERFACE TensorRT::NvInfer)
if(WIN32)
set_property(TARGET TensorRT::Plugin PROPERTY IMPORTED_LOCATION
"${TensorRT_Plugin_DLL}")
set_property(TARGET TensorRT::Plugin PROPERTY IMPORTED_IMPLIB
"${TensorRT_Plugin_LIBRARY}")
else()
set_property(TARGET TensorRT::Plugin PROPERTY IMPORTED_LOCATION
"${TensorRT_Plugin_LIBRARY}")
endif()
endif()
mark_as_advanced(TensorRT_INCLUDE_DIR TensorRT_LIBRARY TensorRT_LIBRARIES)