Files
FastDeploy/poros/CMakeLists.txt
WJJ1995 c8db4b442a [Runtime] Add Poros Backend Runtime demo for c++/python (#915)
* add onnx_ort_runtime demo

* rm in requirements

* support batch eval

* fixed MattingResults bug

* move assignment for DetectionResult

* integrated x2paddle

* add model convert readme

* update readme

* re-lint

* add processor api

* Add MattingResult Free

* change valid_cpu_backends order

* add ppocr benchmark

* mv bs from 64 to 32

* fixed quantize.md

* fixed quantize bugs

* Add Monitor for benchmark

* update mem monitor

* Set trt_max_batch_size default 1

* fixed ocr benchmark bug

* support yolov5 in serving

* Fixed yolov5 serving

* Fixed postprocess

* update yolov5 to 7.0

* add poros runtime demos

* update readme

* Support poros abi=1

* rm useless note

* deal with comments

Co-authored-by: Jason <jiangjiajun@baidu.com>
2022-12-20 19:03:14 +08:00

210 lines
7.3 KiB
CMake
Executable File

cmake_minimum_required(VERSION 3.21)
project(poros)
set(CMAKE_CXX_STANDARD 14)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
option(BUILD_STATIC "build lib${PROJECT_NAME}.a static lib" OFF)
option(BUILD_KERNEL "build lib${PROJECT_NAME}-kernel.so shared lib" OFF)
option(BUILD_STATIC_KERNEL "build lib${PROJECT_NAME}-kernel.a static lib" OFF)
option(BUILD_TOOL "build ${PROJECT_NAME}-tool, an executable binary output" OFF)
option(TEST "build for test. copy '.so' to site-packages automatically after compile" OFF)
option(DEBUG "build for debug. add '-g' flag to gcc for detailed debug information" ON)
option(UT "build for unit test" OFF)
# minimum requirements
set(PYTHON_MINIMUM_VERSION 3.6)
set(CUDA_MINIMUM_VERSION 10.2)
set(PYTORCH_MINIMUM_VERSION 1.9)
set(TENSORRT_MINIMUM_VERSION 8.2)
set(CUDNN_MINIMUM_VERSION 8.0)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# find cuda
find_package(CUDAToolkit ${CUDA_MINIMUM_VERSION} REQUIRED)
# find python3
find_package(Python3 ${PYTHON_MINIMUM_VERSION} REQUIRED COMPONENTS Interpreter Development)
message(STATUS "Found Python: ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}.${Python3_VERSION_PATCH}")
if (NOT Python3_SITELIB)
message(FATAL_ERROR "site-packages not found. ")
else ()
message(STATUS "site-packages: ${Python3_SITELIB}")
endif ()
# find pytorch
find_package(Torch ${PYTORCH_MINIMUM_VERSION} REQUIRED HINTS ${Python3_SITELIB})
# find TensorRT
find_package(TensorRT ${TENSORRT_MINIMUM_VERSION} REQUIRED)
get_filename_component(TENSORRT_LIB_DIR ${TensorRT_LIBRARIES} DIRECTORY)
# find CUDNN
find_package(CUDNN ${CUDNN_MINIMUM_VERSION} REQUIRED)
## release headers
# engine
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/engine/iengine.h" "${PROJECT_SOURCE_DIR}/src/poros/engine/engine_context.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/engine")
# compile
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/compile/poros_module.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/compile")
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/compile/compile.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/compile")
# converter
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/converter/iconverter.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/converter")
# iplugin
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/iplugin/*.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/iplugin")
## context
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/context/*.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/context")
## context
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/context/*.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/context")
## lowering
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/lowering/*.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/lowering")
## util
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/util/*.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/util")
## log
file(GLOB headers "${PROJECT_SOURCE_DIR}/src/poros/log/*.h")
file(COPY ${headers} DESTINATION "${PROJECT_SOURCE_DIR}/build/include/poros/log")
include_directories(${TORCH_INCLUDE_DIRS})
include_directories(${TensorRT_INCLUDE_DIRS})
include_directories(${CUDA_INCLUDE_DIRS})
include_directories(${CUDNN_INCLUDE_PATH})
include_directories(src)
include_directories(src/poros/compile)
add_compile_options(-D__const__= -D_GNU_SOURCE)
add_compile_options(-lpthread -lcrypto -lrt -ldl -lz -fPIC -rdynamic)
add_compile_options(-std=c++17 -O2 -g -pipe -W -Wall -fPIC -Wno-deprecated-declarations -Wno-unused-parameter)
if (DEBUG)
add_compile_options(-g) # for debug
endif ()
add_compile_options(
-Wall
-Wno-comment
-Wno-error=implicit-fallthrough
-Wno-error=unused-but-set-variable
-Wno-error=misleading-indentation
-Wno-error=unused-function
-Wno-error=terminate
-Wno-unused-parameter
-Wno-deprecated-declarations
)
file(
GLOB POROS_CPP_FILES
"./src/poros/*/*.cpp"
"./src/poros/converter/*/*.cpp"
"./src/poros/converter/gpu/plugins/*.cpp"
)
# libporos.so
add_library(${PROJECT_NAME} SHARED ${POROS_CPP_FILES})
#set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/python/poros/lib)
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build/lib)
#add_custom_command(
# TARGET ${PROJECT_NAME}
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/output/lib/lib${PROJECT_NAME}.so ${CMAKE_CURRENT_SOURCE_DIR}/python/poros/lib/
#)
# copy libporos.so to python site-packages/poros/lib for testing
if (TEST)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMENT "copy ${LIBRARY_OUTPUT_PATH}/lib${PROJECT_NAME}.so to ${Python3_SITELIB}/poros/lib/lib${PROJECT_NAME}.so for rapid testing"
COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_OUTPUT_DIRECTORY}/lib${PROJECT_NAME}.so ${Python3_SITELIB}/poros/lib/lib${PROJECT_NAME}.so
)
endif ()
if (BUILD_STATIC)
add_library(${PROJECT_NAME}-static STATIC ${POROS_CPP_FILES})
set_target_properties(${PROJECT_NAME}-static PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
endif ()
# build gflags
set(GFLAGS_NAMESPACE google)
add_subdirectory(third_party/gflags)
find_package(BLAS)
add_custom_target(
Creating_Symlink ALL
COMMAND_EXPAND_LISTS
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_SOURCE_DIR}/third_party
COMMAND ${CMAKE_COMMAND} -E create_symlink ${TENSORRT_LIB_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/third_party/tensorrtlib
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Creating Symlink ${CMAKE_CURRENT_SOURCE_DIR}/third_party/tensorrtlib -> ${TENSORRT_LIB_DIR} "
VERBATIM
)
# executable
if (BUILD_TOOL)
set(POROS_TOOL ${PROJECT_NAME}-tool)
add_executable(${POROS_TOOL})
target_sources(${POROS_TOOL} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/tools/main.cpp)
target_sources(${POROS_TOOL} PUBLIC ${POROS_CPP_FILES})
target_link_libraries(${POROS_TOOL} gflags::gflags)
target_link_libraries(${POROS_TOOL} TensorRT::TensorRT TensorRT::Plugin)
target_link_libraries(${POROS_TOOL} torch)
# target_link_libraries(${POROS_TOOL} CUDA::toolkit)
target_link_libraries(${POROS_TOOL} CUDA::cudart CUDA::cusolver CUDA::cublas CUDA::cusolver CUDA::cusparse)
target_link_libraries(${POROS_TOOL} BLAS::BLAS)
endif ()
# kernel
file(
GLOB POROS_KERNEL_CPP_FILES
./src/poros/compile/*.cpp
./src/poros/context/*.cpp
./src/poros/iplugin/*.cpp
./src/poros/log/*.cpp
./src/poros/lowering/*.cpp
./src/poros/util/*.cpp
./src/poros/engine/engine.cpp
)
# kernel SHARED
if (BUILD_KERNEL)
add_library(${PROJECT_NAME}-kernel SHARED ${POROS_KERNEL_CPP_FILES})
endif ()
# kernel STATIC
if (BUILD_STATIC_KERNEL)
add_library(${PROJECT_NAME}-kernel-static STATIC ${POROS_KERNEL_CPP_FILES})
set_target_properties(${PROJECT_NAME}-kernel-static PROPERTIES OUTPUT_NAME ${PROJECT_NAME}-kernel)
endif ()
if (UT)
add_subdirectory(third_party/googletest)
add_subdirectory(unittest)
endif ()