Explorar el Código

add build lib (#893)

heliqi hace 4 años
padre
commit
c39072c9e8

+ 2 - 1
dygraph/deploy/cpp/model_deploy/common/include/base_model.h

@@ -20,6 +20,7 @@
 
 #include "yaml-cpp/yaml.h"
 
+#include "model_deploy/common/include/deploy_delacre.h"
 #include "model_deploy/common/include/base_postprocess.h"
 #include "model_deploy/common/include/base_preprocess.h"
 #include "model_deploy/common/include/output_struct.h"
@@ -27,7 +28,7 @@
 
 namespace PaddleDeploy {
 
-class Model {
+class PD_INFER_DECL Model {
  private:
   const std::string model_type_;
 

+ 25 - 0
dygraph/deploy/cpp/model_deploy/common/include/deploy_delacre.h

@@ -0,0 +1,25 @@
+// Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved.
+//
+// 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.
+
+#pragma once
+
+#if defined(_WIN32)
+#ifdef PADDLEX_DEPLOY
+#define PD_INFER_DECL __declspec(dllexport)
+#else
+#define PD_INFER_DECL __declspec(dllimport)
+#endif  // PADDLEX_DEPLOY
+#else
+#define PD_INFER_DECL
+#endif  // _WIN32

+ 2 - 1
dygraph/deploy/cpp/model_deploy/common/include/multi_gpu_model.h

@@ -17,11 +17,12 @@
 #include <thread> // NOLINT
 #include <vector>
 
+#include "model_deploy/common/include/deploy_delacre.h"
 #include "model_deploy/common/include/model_factory.h"
 #include "model_deploy/engine/include/engine.h"
 
 namespace PaddleDeploy {
-class MultiGPUModel {
+class PD_INFER_DECL MultiGPUModel {
  private:
   std::vector<std::shared_ptr<Model>> models_;
 

+ 4 - 3
dygraph/deploy/cpp/model_deploy/common/include/paddle_deploy.h

@@ -16,12 +16,13 @@
 #include <memory>
 #include <string>
 
+#include "model_deploy/common/include/deploy_delacre.h"
 #include "model_deploy/common/include/output_struct.h"
 #include "model_deploy/common/include/model_factory.h"
 #include "model_deploy/engine/include/engine.h"
 
 namespace PaddleDeploy {
-inline Model* CreateModel(const std::string &name) {
-  return PaddleDeploy::ModelFactory::CreateObject(name);
-}
+
+PD_INFER_DECL Model* CreateModel(const std::string& name);
+
 }  // namespace PaddleDeploy

+ 22 - 0
dygraph/deploy/cpp/model_deploy/common/src/paddle_deploy.cpp

@@ -0,0 +1,22 @@
+// Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
+//
+// 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 "model_deploy/common/include/paddle_deploy.h"
+
+namespace PaddleDeploy {
+
+Model* CreateModel(const std::string& name) {
+	return PaddleDeploy::ModelFactory::CreateObject(name);
+}
+
+}  // namespace PaddleDeploy

+ 2 - 10
dygraph/deploy/cpp/scripts/build_lib.sh

@@ -7,7 +7,7 @@ WITH_TENSORRT=OFF
 # TensorRT 的路径,如果需要集成TensorRT,需修改为您实际安装的TensorRT路径
 TENSORRT_DIR=$(pwd)/TensorRT/
 # Paddle 预测库路径, 请修改为您实际安装的预测库路径
-PADDLE_DIR=/ssd2/heliqi/paddle_inference
+PADDLE_DIR=$(pwd)/paddle_inference
 # Paddle 的预测库是否使用静态库来编译
 # 使用TensorRT时,Paddle的预测库通常为动态库
 WITH_STATIC_LIB=ON
@@ -22,11 +22,6 @@ CUDNN_LIB=/usr/lib/x86_64-linux-gnu
     echo "Fail to execute script/bootstrap.sh"
     exit -1
 }
-
-# 是否加载加密后的模型
-WITH_ENCRYPTION=OFF
-# 加密工具的路径, 如果使用自带预编译版本可不修改
-ENCRYPTION_DIR=$(pwd)/paddlex-encryption
 # OPENCV 路径, 如果使用自带预编译版本可不修改
 OPENCV_DIR=$(pwd)/deps/opencv3.4.6gcc4.8ffmpeg/
 
@@ -34,17 +29,14 @@ OPENCV_DIR=$(pwd)/deps/opencv3.4.6gcc4.8ffmpeg/
 rm -rf build
 mkdir -p build
 cd build
-cmake ../build_lib \
+cmake ../tools/build_lib \
     -DWITH_GPU=${WITH_GPU} \
     -DWITH_MKL=${WITH_MKL} \
     -DWITH_TENSORRT=${WITH_TENSORRT} \
-    -DWITH_ENCRYPTION=${WITH_ENCRYPTION} \
     -DTENSORRT_DIR=${TENSORRT_DIR} \
     -DPADDLE_DIR=${PADDLE_DIR} \
-    -DPADDLE_LIB=${PADDLE_DIR} \
     -DWITH_STATIC_LIB=${WITH_STATIC_LIB} \
     -DCUDA_LIB=${CUDA_LIB} \
     -DCUDNN_LIB=${CUDNN_LIB} \
-    -DENCRYPTION_DIR=${ENCRYPTION_DIR} \
     -DOPENCV_DIR=${OPENCV_DIR}
 make install -j16

+ 16 - 14
dygraph/deploy/cpp/scripts/use_lib_build.sh

@@ -7,33 +7,35 @@ WITH_TENSORRT=OFF
 # TensorRT 的路径,如果需要集成TensorRT,需修改为您实际安装的TensorRT路径
 TENSORRT_DIR=$(pwd)/TensorRT/
 # Paddle 预测库路径, 请修改为您实际安装的预测库路径
-PADDLE_DEPLOY_DIR=/ssd2/heliqi/my_project/Paddle2ONNX/deploykit/cpp/build_lib/output
+PADDLEX_DIR=$(pwd)/paddlex_inference/
 # Paddle 的预测库是否使用静态库来编译
 # 使用TensorRT时,Paddle的预测库通常为动态库
-WITH_STATIC_LIB=ON
+WITH_STATIC_LIB=OFF
 # CUDA 的 lib 路径
 CUDA_LIB=/usr/local/cuda/lib64
 # CUDNN 的 lib 路径
 CUDNN_LIB=/usr/lib/x86_64-linux-gnu
-# 是否加载加密后的模型
-WITH_ENCRYPTION=OFF
-# 加密工具的路径, 如果使用自带预编译版本可不修改
-ENCRYPTION_DIR=$(pwd)/paddlex-encryption
 
+{
+    bash $(pwd)/scripts/bootstrap.sh # 下载预编译版本的加密工具和opencv依赖库
+} || {
+    echo "Fail to execute script/bootstrap.sh"
+    exit -1
+}
+# OPENCV 路径, 如果使用自带预编译版本可不修改
+OPENCV_DIR=$(pwd)/deps/opencv3.4.6gcc4.8ffmpeg/
 
 # 以下无需改动
-rm -rf build
-mkdir -p build
-cd build
-cmake ../demo_use_lib \
+rm -rf use_lib_build
+mkdir -p use_lib_build
+cd use_lib_build
+cmake ../tools/use_lib \
     -DWITH_GPU=${WITH_GPU} \
     -DWITH_MKL=${WITH_MKL} \
     -DWITH_TENSORRT=${WITH_TENSORRT} \
-    -DWITH_ENCRYPTION=${WITH_ENCRYPTION} \
     -DTENSORRT_DIR=${TENSORRT_DIR} \
-    -DPADDLE_DEPLOY_DIR=${PADDLE_DEPLOY_DIR} \
+    -DPADDLEX_DIR=${PADDLEX_DIR} \
     -DWITH_STATIC_LIB=${WITH_STATIC_LIB} \
     -DCUDA_LIB=${CUDA_LIB} \
-    -DCUDNN_LIB=${CUDNN_LIB} \
-    -DENCRYPTION_DIR=${ENCRYPTION_DIR}
+    -DCUDNN_LIB=${CUDNN_LIB}
 make -j16

+ 291 - 0
dygraph/deploy/cpp/tools/build_lib/CMakeLists.txt

@@ -0,0 +1,291 @@
+cmake_minimum_required(VERSION 3.0)
+project(Installation
+        LANGUAGES CXX C
+        VERSION 1.0)
+
+message("----this is build lib--------")
+
+if(WIN32)
+  add_definitions(-DPADDLEX_DEPLOY)
+endif()
+
+option(WITH_MKL        "Compile demo with MKL/OpenBlas support,defaultuseMKL."          ON)
+option(WITH_GPU        "Compile demo with GPU/CPU, default use CPU."                    OFF)
+if (NOT WIN32)
+    option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   OFF)
+else()
+    option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   OFF)
+endif()
+option(WITH_TENSORRT "Compile demo with TensorRT."   OFF)
+
+SET(TENSORRT_DIR "" CACHE PATH "Location of libraries")
+SET(PADDLE_DIR "" CACHE PATH "Location of libraries")
+SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
+SET(CUDA_LIB "" CACHE PATH "Location of libraries")
+
+get_filename_component(PROJECT_ROOT_DIR "." REALPATH)
+SET(PROJECT_ROOT_DIR ${PROJECT_ROOT_DIR}  CACHE PATH  "root directory of project.")
+
+SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/paddlex_inference" CACHE PATH  "project install" FORCE)
+SET(PaddleDeploy_LIBS "" CACHE PATH "Location of libraries")
+if (NOT WIN32)
+    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/demo)
+else()
+    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/paddle_deploy)
+    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/paddle_deploy)
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/paddle_deploy)
+endif()
+
+#source
+include_directories("${CMAKE_SOURCE_DIR}/")
+link_directories("${CMAKE_CURRENT_BINARY_DIR}")
+
+#yaml-cpp
+if(WIN32)
+  SET(YAML_BUILD_SHARED_LIBS OFF CACHE BOOL "yaml build shared library.")
+else()
+  SET(YAML_BUILD_SHARED_LIBS ON CACHE BOOL "yaml build shared library.")
+endif(WIN32)
+include(${PROJECT_ROOT_DIR}/cmake/yaml-cpp.cmake)
+include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include")
+link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib")
+
+#paddle inference
+if (NOT DEFINED PADDLE_DIR OR ${PADDLE_DIR} STREQUAL "")
+    message(FATAL_ERROR "please set PADDLE_DIR with -DPADDLE_DIR=/path/paddle_influence_dir")
+endif()
+
+#paddle inference third party
+include_directories("${PADDLE_DIR}")
+include_directories("${PADDLE_DIR}/third_party/install/protobuf/include")
+include_directories("${PADDLE_DIR}/third_party/install/glog/include")
+include_directories("${PADDLE_DIR}/third_party/install/gflags/include")
+include_directories("${PADDLE_DIR}/third_party/install/xxhash/include")
+include_directories("${PADDLE_DIR}/third_party/install/cryptopp/include")
+
+link_directories("${PADDLE_DIR}/paddle/lib/")
+link_directories("${PADDLE_DIR}/third_party/install/protobuf/lib")
+link_directories("${PADDLE_DIR}/third_party/install/glog/lib")
+link_directories("${PADDLE_DIR}/third_party/install/gflags/lib")
+link_directories("${PADDLE_DIR}/third_party/install/xxhash/lib")
+link_directories("${PADDLE_DIR}/third_party/install/cryptopp/lib")
+
+if (WIN32)
+  set(DEPS ${DEPS} ${PADDLE_DIR}/paddle/lib/paddle_inference.lib)
+  set(DEPS ${DEPS} glog gflags_static libprotobuf xxhash cryptopp-static libyaml-cppmt shlwapi)
+else()
+  if (WITH_STATIC_LIB)
+    set(DEPS ${PADDLE_DIR}/paddle/lib/libpaddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX})
+  else()
+    set(DEPS ${PADDLE_DIR}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX})
+  endif()
+  set(DEPS ${DEPS} glog gflags protobuf xxhash cryptopp yaml-cpp)
+endif(WIN32)
+
+#MKL
+if(WITH_MKL)
+  ADD_DEFINITIONS(-DUSE_MKL)
+  set(MKLML_PATH "${PADDLE_DIR}/third_party/install/mklml")
+  include_directories("${MKLML_PATH}/include")
+  if (WIN32)
+    set(MATH_LIB ${MKLML_PATH}/lib/mklml.lib ${MKLML_PATH}/lib/libiomp5md.lib)
+  else ()
+    set(MATH_LIB ${MKLML_PATH}/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} ${MKLML_PATH}/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX})
+    execute_process(COMMAND cp -r ${MKLML_PATH}/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} /usr/lib)
+  endif ()
+  set(MKLDNN_PATH "${PADDLE_DIR}/third_party/install/mkldnn")
+  if(EXISTS ${MKLDNN_PATH})
+    include_directories("${MKLDNN_PATH}/include")
+    if (WIN32)
+      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/mkldnn.lib)
+    else ()
+      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0)
+    endif ()
+  endif()
+else()
+  set(MATH_LIB ${PADDLE_DIR}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX})
+endif()
+
+set(DEPS ${DEPS} ${MATH_LIB} ${MKLDNN_LIB})
+
+#OPENCV
+if (NOT (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64"))
+  if (NOT DEFINED OPENCV_DIR OR ${OPENCV_DIR} STREQUAL "")
+    message(FATAL_ERROR "please set OPENCV_DIR with -DOPENCV_DIR=/path/opencv")
+  endif()
+endif()
+
+if (WIN32)
+  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH)
+  unset(OpenCV_DIR CACHE)
+else ()
+  if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64") # x86_64 aarch64
+    set(OpenCV_INCLUDE_DIRS "/usr/include/opencv4")
+    file(GLOB OpenCV_LIBS /usr/lib/aarch64-linux-gnu/libopencv_*${CMAKE_SHARED_LIBRARY_SUFFIX})
+    message("OpenCV libs: ${OpenCV_LIBS}")
+  else()
+    find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
+  endif()
+endif ()
+
+set(DEPS ${DEPS} ${OpenCV_LIBS})
+include_directories(${OpenCV_INCLUDE_DIRS})
+
+#set GPU
+if(WITH_GPU)
+  if (NOT DEFINED CUDA_LIB OR ${CUDA_LIB} STREQUAL "")
+    message(FATAL_ERROR "please set CUDA_LIB with -DCUDA_LIB=/path/cuda/lib64")
+  endif()
+
+  if(NOT WIN32)
+    if (NOT DEFINED CUDNN_LIB)
+      message(FATAL_ERROR "please set CUDNN_LIB with -DCUDNN_LIB=/path/cudnn/")
+    endif()
+
+    set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
+    set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+    if (WITH_TENSORRT)
+      include_directories("${TENSORRT_DIR}/include")
+      link_directories("${TENSORRT_DIR}/lib")
+
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX})
+    endif()
+
+  else()
+    set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )
+    set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} )
+    set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX})
+
+    if (WITH_TENSORRT)
+      include_directories("${TENSORRT_DIR}/include")
+      link_directories("${TENSORRT_DIR}/lib")
+
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer${CMAKE_STATIC_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/myelin64_1${CMAKE_STATIC_LIBRARY_SUFFIX})
+    endif()
+  endif()
+endif()
+
+macro(safe_set_static_flag)
+    foreach(flag_var
+        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+      if(${flag_var} MATCHES "/MD")
+        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+      endif(${flag_var} MATCHES "/MD")
+    endforeach(flag_var)
+endmacro()
+
+if (WIN32)
+    add_definitions("/DGOOGLE_GLOG_DLL_DECL=")
+    find_package(OpenMP REQUIRED)
+    if (OPENMP_FOUND)
+        message("OPENMP FOUND")
+        set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} ${OpenMP_C_FLAGS}")
+        set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} ${OpenMP_C_FLAGS}")
+        set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} ${OpenMP_CXX_FLAGS}")
+        set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} ${OpenMP_CXX_FLAGS}")
+    endif()
+    set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
+    set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
+    set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
+    set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
+    if (WITH_STATIC_LIB)
+        safe_set_static_flag()
+        add_definitions(-DSTATIC_LIB)
+    endif()
+else()
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -o3 -fopenmp -std=c++11")
+    set(CMAKE_STATIC_LIBRARY_PREFIX "")
+    set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread")
+    set(DEPS ${DEPS} ${EXTERNAL_LIB})
+endif()
+
+message("-----DEPS = ${DEPS}")
+
+#project
+include_directories("${PROJECT_ROOT_DIR}")
+
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/common/src SRC)
+set(ENGINE_SRC ${PROJECT_ROOT_DIR}/model_deploy/engine/src/ppinference_engine.cpp)
+
+#detector seg
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/ppdet/src DETECTOR_SRC)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/ppseg/src DETECTOR_SRC)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/ppclas/src DETECTOR_SRC)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/paddlex/src DETECTOR_SRC)
+
+#shared lib
+add_library (PaddleDeploy SHARED  ${SRC} ${ENGINE_SRC} ${DETECTOR_SRC})
+add_dependencies(PaddleDeploy ext-yaml-cpp)
+target_link_libraries(PaddleDeploy ${DEPS})
+
+# Install
+# project lib
+install(TARGETS PaddleDeploy
+        EXPORT PaddleDeployTargets
+        DESTINATION ${CMAKE_INSTALL_PREFIX}/paddle_deploy/lib
+)
+
+# project header file
+file(GLOB PROJECT_INCLUDE_FILE
+          ${PROJECT_ROOT_DIR}/model_deploy
+)
+install(DIRECTORY ${PROJECT_INCLUDE_FILE}
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/paddle_deploy/include
+        PATTERN "*/src" EXCLUDE)
+
+# find_package config
+install(EXPORT PaddleDeployTargets
+        FILE PaddleDeployTargets.cmake
+        NAMESPACE PaddleDeploy::
+        DESTINATION ${CMAKE_INSTALL_PREFIX}/share/PaddleDeploy
+)
+include(CMakePackageConfigHelpers)
+configure_package_config_file(${PROJECT_ROOT_DIR}/utils/build_lib/Config.cmake.in
+    PaddleDeployConfig.cmake
+    INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}/share/PaddleDeployy"
+)
+write_basic_package_version_file(
+    PaddleDeployConfigVersion.cmake
+    VERSION ${PACKAGE_VERSION}
+    COMPATIBILITY AnyNewerVersion
+)
+install(FILES
+    "${PROJECT_BINARY_DIR}/PaddleDeployConfig.cmake"
+    "${PROJECT_BINARY_DIR}/PaddleDeployConfigVersion.cmake"
+    DESTINATION "${CMAKE_INSTALL_PREFIX}/share/PaddleDeploy"
+)
+
+if(WIN32)
+#paddle inference
+file(GLOB THIRD_PARTY_FILE ${PADDLE_DIR}/third_party/install/gflags ${PADDLE_DIR}/paddle)
+install(DIRECTORY ${THIRD_PARTY_FILE}
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party)
+
+else()
+# #paddle inference
+file(GLOB THIRD_PARTY_FILE ${PADDLE_DIR}/third_party/install/gflags ${PADDLE_DIR}/paddle)
+install(DIRECTORY ${THIRD_PARTY_FILE}
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party
+        PATTERN "*/lib" EXCLUDE
+)
+endif()
+
+#yaml-cpp
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include
+                  ${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party/yaml-cpp)
+
+# mkl
+if(WITH_MKL)
+  install(DIRECTORY ${PADDLE_DIR}/third_party/install/mklml
+          DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party)
+  install(DIRECTORY ${PADDLE_DIR}/third_party/install/mkldnn
+          DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party)
+endif()

+ 48 - 0
dygraph/deploy/cpp/tools/build_lib/Config.cmake.in

@@ -0,0 +1,48 @@
+# @PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+# Capturing values from configure (optional)
+get_filename_component(PaddleDeploy_INSTALL_PATH "${CMAKE_CURRENT_LIST_DIR}/../../" REALPATH)
+set(OpenCV_LIBS @OpenCV_LIBS@)
+
+# set(WITH_MKL @WITH_MKL@)
+# set(WITH_STATIC_LIB @WITH_STATIC_LIB@)
+# set(PaddleDeploy_LIBS @PaddleDeploy_LIBS@)
+
+link_directories("${PaddleDeploy_INSTALL_PATH}/paddle_deploy/lib")
+link_directories("${PaddleDeploy_INSTALL_PATH}/third_party/yaml-cpp/lib")
+
+set(PaddleDeploy_INCLUDE_DIRS ${PaddleDeploy_INSTALL_PATH}/paddle_deploy/include)
+set(PaddleDeploy_INCLUDE_DIRS ${PaddleDeploy_INCLUDE_DIRS} ${PaddleDeploy_INSTALL_PATH}/third_party/yaml-cpp/include)
+set(PaddleDeploy_INCLUDE_DIRS ${PaddleDeploy_INCLUDE_DIRS} ${PaddleDeploy_INSTALL_PATH}/third_party/gflags/include)
+set(PaddleDeploy_INCLUDE_DIRS ${PaddleDeploy_INCLUDE_DIRS} ${PaddleDeploy_INSTALL_PATH}/third_party/paddle/include)
+
+if(WITH_MKL)
+  link_directories("${PaddleDeploy_INSTALL_PATH}/third_party/mklml/lib")
+  link_directories("${PaddleDeploy_INSTALL_PATH}/third_party/mkldnn/lib")
+  set(PaddleDeploy_INCLUDE_DIRS ${PaddleDeploy_INCLUDE_DIRS} ${PaddleDeploy_INSTALL_PATH}/third_party/mklml/include)
+  set(PaddleDeploy_INCLUDE_DIRS ${PaddleDeploy_INCLUDE_DIRS} ${PaddleDeploy_INSTALL_PATH}/third_party/mkldnn/include)
+endif()
+
+if(WIN32)
+  link_directories("${PaddleDeploy_INSTALL_PATH}/third_party/paddle/lib")
+  link_directories("${PaddleDeploy_INSTALL_PATH}/third_party/gflags/lib")
+  set(PaddleDeploy_LIBS PaddleDeploy.lib paddle_inference.lib libyaml-cppmt.lib gflags_static.lib shlwapi.lib)
+  if(WITH_MKL)
+    set(PaddleDeploy_LIBS ${PaddleDeploy_LIBS} mkldnn.dll mklml.dll libiomp5md.dll)
+  endif()
+else()
+  set(PaddleDeploy_LIBS libPaddleDeploy.so libyaml-cpp.so)
+  if(WITH_MKL)
+    set(PaddleDeploy_LIBS ${PaddleDeploy_LIBS} libmklml_intel.so libiomp5.so libmkldnn.so)
+  endif()
+endif(WIN32)
+
+# Same syntax as find_package
+# find_dependency(OpenCV COMPONENTS core REQUIRED)
+
+# Any extra setup
+
+# Add the targets file
+# include("${CMAKE_CURRENT_LIST_DIR}/PaddleDeployTargets.cmake")

+ 296 - 0
dygraph/deploy/cpp/tools/build_pipeline/CMakeLists.txt

@@ -0,0 +1,296 @@
+cmake_minimum_required(VERSION 3.0)
+project(Installation
+        LANGUAGES CXX C
+        VERSION 1.0)
+
+message("----this is build lib--------")
+
+if(WIN32)
+  add_definitions(-DPADDLEX_DEPLOY)
+endif()
+
+option(WITH_MKL        "Compile demo with MKL/OpenBlas support,defaultuseMKL."          ON)
+option(WITH_GPU        "Compile demo with GPU/CPU, default use CPU."                    OFF)
+if (NOT WIN32)
+    option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   OFF)
+else()
+    option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   OFF)
+endif()
+option(WITH_TENSORRT "Compile demo with TensorRT."   OFF)
+
+SET(TENSORRT_DIR "" CACHE PATH "Location of libraries")
+SET(PADDLE_DIR "" CACHE PATH "Location of libraries")
+SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
+SET(CUDA_LIB "" CACHE PATH "Location of libraries")
+
+get_filename_component(PROJECT_ROOT_DIR "." REALPATH)
+SET(PROJECT_ROOT_DIR ${PROJECT_ROOT_DIR}  CACHE PATH  "root directory of project.")
+
+SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/PaddleXManufacture" CACHE PATH  "project install" FORCE)
+SET(PaddleDeploy_LIBS "" CACHE PATH "Location of libraries")
+if (NOT WIN32)
+    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/demo)
+else()
+    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/paddle_deploy)
+    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/paddle_deploy)
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/paddle_deploy)
+endif()
+
+#source
+include_directories("${CMAKE_SOURCE_DIR}/")
+link_directories("${CMAKE_CURRENT_BINARY_DIR}")
+
+#yaml-cpp
+if(WIN32)
+  SET(YAML_BUILD_SHARED_LIBS OFF CACHE BOOL "yaml build shared library.")
+else()
+  SET(YAML_BUILD_SHARED_LIBS ON CACHE BOOL "yaml build shared library.")
+endif(WIN32)
+include(${PROJECT_ROOT_DIR}/cmake/yaml-cpp.cmake)
+include_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include")
+link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib")
+
+#paddle inference
+if (NOT DEFINED PADDLE_DIR OR ${PADDLE_DIR} STREQUAL "")
+    message(FATAL_ERROR "please set PADDLE_DIR with -DPADDLE_DIR=/path/paddle_influence_dir")
+endif()
+
+#paddle inference third party
+include_directories("${PADDLE_DIR}")
+include_directories("${PADDLE_DIR}/third_party/install/protobuf/include")
+include_directories("${PADDLE_DIR}/third_party/install/glog/include")
+include_directories("${PADDLE_DIR}/third_party/install/gflags/include")
+include_directories("${PADDLE_DIR}/third_party/install/xxhash/include")
+include_directories("${PADDLE_DIR}/third_party/install/cryptopp/include")
+
+link_directories("${PADDLE_DIR}/paddle/lib/")
+link_directories("${PADDLE_DIR}/third_party/install/protobuf/lib")
+link_directories("${PADDLE_DIR}/third_party/install/glog/lib")
+link_directories("${PADDLE_DIR}/third_party/install/gflags/lib")
+link_directories("${PADDLE_DIR}/third_party/install/xxhash/lib")
+link_directories("${PADDLE_DIR}/third_party/install/cryptopp/lib")
+
+if (WIN32)
+  set(DEPS ${DEPS} ${PADDLE_DIR}/paddle/lib/paddle_inference.lib)
+  set(DEPS ${DEPS} glog gflags_static libprotobuf xxhash cryptopp-static libyaml-cppmt shlwapi)
+else()
+  if (WITH_STATIC_LIB)
+    set(DEPS ${PADDLE_DIR}/paddle/lib/libpaddle_inference${CMAKE_STATIC_LIBRARY_SUFFIX})
+  else()
+    set(DEPS ${PADDLE_DIR}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX})
+  endif()
+  set(DEPS ${DEPS} glog gflags protobuf xxhash cryptopp yaml-cpp)
+endif(WIN32)
+
+#MKL
+if(WITH_MKL)
+  ADD_DEFINITIONS(-DUSE_MKL)
+  set(MKLML_PATH "${PADDLE_DIR}/third_party/install/mklml")
+  include_directories("${MKLML_PATH}/include")
+  if (WIN32)
+    set(MATH_LIB ${MKLML_PATH}/lib/mklml.lib ${MKLML_PATH}/lib/libiomp5md.lib)
+  else ()
+    set(MATH_LIB ${MKLML_PATH}/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} ${MKLML_PATH}/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX})
+    execute_process(COMMAND cp -r ${MKLML_PATH}/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} /usr/lib)
+  endif ()
+  set(MKLDNN_PATH "${PADDLE_DIR}/third_party/install/mkldnn")
+  if(EXISTS ${MKLDNN_PATH})
+    include_directories("${MKLDNN_PATH}/include")
+    if (WIN32)
+      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/mkldnn.lib)
+    else ()
+      set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0)
+    endif ()
+  endif()
+else()
+  set(MATH_LIB ${PADDLE_DIR}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX})
+endif()
+
+set(DEPS ${DEPS} ${MATH_LIB} ${MKLDNN_LIB})
+
+#OPENCV
+if (NOT (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64"))
+  if (NOT DEFINED OPENCV_DIR OR ${OPENCV_DIR} STREQUAL "")
+    message(FATAL_ERROR "please set OPENCV_DIR with -DOPENCV_DIR=/path/opencv")
+  endif()
+endif()
+
+if (WIN32)
+  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH)
+  unset(OpenCV_DIR CACHE)
+else ()
+  if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64") # x86_64 aarch64
+    set(OpenCV_INCLUDE_DIRS "/usr/include/opencv4")
+    file(GLOB OpenCV_LIBS /usr/lib/aarch64-linux-gnu/libopencv_*${CMAKE_SHARED_LIBRARY_SUFFIX})
+    message("OpenCV libs: ${OpenCV_LIBS}")
+  else()
+    find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
+  endif()
+endif ()
+
+set(DEPS ${DEPS} ${OpenCV_LIBS})
+include_directories(${OpenCV_INCLUDE_DIRS})
+
+#set GPU
+if(WITH_GPU)
+  if (NOT DEFINED CUDA_LIB OR ${CUDA_LIB} STREQUAL "")
+    message(FATAL_ERROR "please set CUDA_LIB with -DCUDA_LIB=/path/cuda/lib64")
+  endif()
+
+  if(NOT WIN32)
+    if (NOT DEFINED CUDNN_LIB)
+      message(FATAL_ERROR "please set CUDNN_LIB with -DCUDNN_LIB=/path/cudnn/")
+    endif()
+
+    set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
+    set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+    if (WITH_TENSORRT)
+      include_directories("${TENSORRT_DIR}/include")
+      link_directories("${TENSORRT_DIR}/lib")
+
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX})
+    endif()
+
+  else()
+    set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )
+    set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} )
+    set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX})
+
+    if (WITH_TENSORRT)
+      include_directories("${TENSORRT_DIR}/include")
+      link_directories("${TENSORRT_DIR}/lib")
+
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer${CMAKE_STATIC_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/myelin64_1${CMAKE_STATIC_LIBRARY_SUFFIX})
+    endif()
+  endif()
+endif()
+
+macro(safe_set_static_flag)
+    foreach(flag_var
+        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+      if(${flag_var} MATCHES "/MD")
+        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+      endif(${flag_var} MATCHES "/MD")
+    endforeach(flag_var)
+endmacro()
+
+if (WIN32)
+    add_definitions("/DGOOGLE_GLOG_DLL_DECL=")
+    find_package(OpenMP REQUIRED)
+    if (OPENMP_FOUND)
+        message("OPENMP FOUND")
+        set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} ${OpenMP_C_FLAGS}")
+        set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} ${OpenMP_C_FLAGS}")
+        set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} ${OpenMP_CXX_FLAGS}")
+        set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} ${OpenMP_CXX_FLAGS}")
+    endif()
+    set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
+    set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
+    set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
+    set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
+    if (WITH_STATIC_LIB)
+        safe_set_static_flag()
+        add_definitions(-DSTATIC_LIB)
+    endif()
+else()
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -o3 -fopenmp -std=c++11")
+    set(CMAKE_STATIC_LIBRARY_PREFIX "")
+    set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread")
+    set(DEPS ${DEPS} ${EXTERNAL_LIB})
+endif()
+
+message("-----DEPS = ${DEPS}")
+
+#project
+include_directories("${PROJECT_ROOT_DIR}")
+
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/common/src SRC)
+set(ENGINE_SRC ${PROJECT_ROOT_DIR}/model_deploy/engine/src/ppinference_engine.cpp)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/utils/src UTILS_SRC)
+
+#detector seg
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/ppdet/src DETECTOR_SRC)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/ppseg/src DETECTOR_SRC)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/ppclas/src DETECTOR_SRC)
+aux_source_directory(${PROJECT_ROOT_DIR}/model_deploy/paddlex/src DETECTOR_SRC)
+
+#pipeline
+aux_source_directory(${PROJECT_ROOT_DIR}/pipeline/src PIPELINE_SRC)
+
+#shared lib
+add_library (PaddleXManufacture SHARED  ${SRC} ${ENGINE_SRC} ${DETECTOR_SRC} ${UTILS_SRC} ${PIPELINE_SRC})
+add_dependencies(PaddleXManufacture ext-yaml-cpp)
+target_link_libraries(PaddleXManufacture ${DEPS})
+
+# Install
+# project lib
+install(TARGETS PaddleXManufacture
+        EXPORT PaddleXManufactureTargets
+        DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
+)
+
+# project header file
+file(GLOB PROJECT_INCLUDE_FILE
+          ${PROJECT_ROOT_DIR}/model_deploy
+          ${PROJECT_ROOT_DIR}/pipeline
+)
+install(DIRECTORY ${PROJECT_INCLUDE_FILE}
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/include
+        PATTERN "*/src" EXCLUDE)
+
+# find_package config
+install(EXPORT PaddleXManufactureTargets
+        FILE PaddleXManufactureTargets.cmake
+        NAMESPACE PaddleXManufacture::
+        DESTINATION ${CMAKE_INSTALL_PREFIX}/share/PaddleXManufacture
+)
+include(CMakePackageConfigHelpers)
+configure_package_config_file(${PROJECT_ROOT_DIR}/tools/build_pipeline/Config.cmake.in
+    PaddleXManufactureConfig.cmake
+    INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}/share/PaddleXManufacture"
+)
+write_basic_package_version_file(
+    PaddleXManufactureConfigVersion.cmake
+    VERSION ${PACKAGE_VERSION}
+    COMPATIBILITY AnyNewerVersion
+)
+install(FILES
+    "${PROJECT_BINARY_DIR}/PaddleXManufactureConfig.cmake"
+    "${PROJECT_BINARY_DIR}/PaddleXManufactureConfigVersion.cmake"
+    DESTINATION "${CMAKE_INSTALL_PREFIX}/share/PaddleXManufacture"
+)
+
+if(WIN32)
+#paddle inference
+file(GLOB THIRD_PARTY_FILE ${PADDLE_DIR}/third_party/install/gflags ${PADDLE_DIR}/paddle)
+install(DIRECTORY ${THIRD_PARTY_FILE}
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party)
+
+else()
+# #paddle inference
+file(GLOB THIRD_PARTY_FILE ${PADDLE_DIR}/third_party/install/gflags ${PADDLE_DIR}/paddle)
+install(DIRECTORY ${THIRD_PARTY_FILE}
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party
+        PATTERN "*/lib" EXCLUDE
+)
+endif()
+
+#yaml-cpp
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/src/ext-yaml-cpp/include
+                  ${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib
+        DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party/yaml-cpp)
+
+# mkl
+if(WITH_MKL)
+  install(DIRECTORY ${PADDLE_DIR}/third_party/install/mklml
+          DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party)
+  install(DIRECTORY ${PADDLE_DIR}/third_party/install/mkldnn
+          DESTINATION  ${CMAKE_INSTALL_PREFIX}/third_party)
+endif()

+ 48 - 0
dygraph/deploy/cpp/tools/build_pipeline/Config.cmake.in

@@ -0,0 +1,48 @@
+# @PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+# Capturing values from configure (optional)
+get_filename_component(PaddleXManufacture_INSTALL_PATH "${CMAKE_CURRENT_LIST_DIR}/../../" REALPATH)
+set(OpenCV_LIBS @OpenCV_LIBS@)
+
+# set(WITH_MKL @WITH_MKL@)
+# set(WITH_STATIC_LIB @WITH_STATIC_LIB@)
+# set(PaddleXManufacture_LIBS @PaddleXManufacture_LIBS@)
+
+link_directories("${PaddleXManufacture_INSTALL_PATH}/lib")
+link_directories("${PaddleXManufacture_INSTALL_PATH}/third_party/yaml-cpp/lib")
+
+set(PaddleXManufacture_INCLUDE_DIRS ${PaddleXManufacture_INSTALL_PATH}/include)
+set(PaddleXManufacture_INCLUDE_DIRS ${PaddleXManufacture_INCLUDE_DIRS} ${PaddleXManufacture_INSTALL_PATH}/third_party/yaml-cpp/include)
+set(PaddleXManufacture_INCLUDE_DIRS ${PaddleXManufacture_INCLUDE_DIRS} ${PaddleXManufacture_INSTALL_PATH}/third_party/gflags/include)
+set(PaddleXManufacture_INCLUDE_DIRS ${PaddleXManufacture_INCLUDE_DIRS} ${PaddleXManufacture_INSTALL_PATH}/third_party/paddle/include)
+
+if(WITH_MKL)
+  link_directories("${PaddleXManufacture_INSTALL_PATH}/third_party/mklml/lib")
+  link_directories("${PaddleXManufacture_INSTALL_PATH}/third_party/mkldnn/lib")
+  set(PaddleXManufacture_INCLUDE_DIRS ${PaddleXManufacture_INCLUDE_DIRS} ${PaddleXManufacture_INSTALL_PATH}/third_party/mklml/include)
+  set(PaddleXManufacture_INCLUDE_DIRS ${PaddleXManufacture_INCLUDE_DIRS} ${PaddleXManufacture_INSTALL_PATH}/third_party/mkldnn/include)
+endif()
+
+if(WIN32)
+  link_directories("${PaddleXManufacture_INSTALL_PATH}/third_party/paddle/lib")
+  link_directories("${PaddleXManufacture_INSTALL_PATH}/third_party/gflags/lib")
+  set(PaddleXManufacture_LIBS PaddleXManufacture.lib paddle_inference.lib libyaml-cppmt.lib gflags_static.lib shlwapi.lib)
+  if(WITH_MKL)
+    set(PaddleXManufacture_LIBS ${PaddleXManufacture_LIBS} mkldnn.dll mklml.dll libiomp5md.dll)
+  endif()
+else()
+  set(PaddleXManufacture_LIBS libPaddleXManufacture.so libyaml-cpp.so)
+  if(WITH_MKL)
+    set(PaddleXManufacture_LIBS ${PaddleXManufacture_LIBS} libmklml_intel.so libiomp5.so libmkldnn.so)
+  endif()
+endif(WIN32)
+
+# Same syntax as find_package
+# find_dependency(OpenCV COMPONENTS core REQUIRED)
+
+# Any extra setup
+
+# Add the targets file
+# include("${CMAKE_CURRENT_LIST_DIR}/PaddleXManufactureTargets.cmake")

+ 103 - 0
dygraph/deploy/cpp/tools/use_lib/CMakeLists.txt

@@ -0,0 +1,103 @@
+cmake_minimum_required(VERSION 3.0)
+project(PaddleDeploy CXX C)
+
+option(WITH_MKL        "Compile demo with MKL/OpenBlas support,defaultuseMKL."          ON)
+option(WITH_GPU        "Compile demo with GPU/CPU, default use CPU."                    ON)
+option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static."   OFF)
+option(WITH_TENSORRT "Compile demo with TensorRT."   OFF)
+
+SET(TENSORRT_DIR "" CACHE PATH "Location of libraries")
+SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
+SET(CUDA_LIB "" CACHE PATH "Location of libraries")
+SET(CUDNN_LIB "" CACHE PATH "Location of libraries")
+SET(PADDLEX_DIR "" CACHE PATH "Location of libraries")
+
+# paddlex
+find_package(PaddleDeploy REQUIRED PATHS ${PADDLEX_DIR}/share NO_DEFAULT_PATH)
+include_directories(${PaddleDeploy_INCLUDE_DIRS})
+set(DEPS ${DEPS} ${PaddleDeploy_LIBS})
+
+# OPENCV
+if (WIN32)
+  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH)
+  unset(OpenCV_DIR CACHE)
+else ()
+  find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
+endif ()
+
+set(DEPS ${DEPS} ${OpenCV_LIBS})
+include_directories(${OpenCV_INCLUDE_DIRS})
+
+# GPU TensorRT
+if(WITH_GPU)
+  if(NOT WIN32)
+    if (NOT DEFINED CUDNN_LIB)
+      message(FATAL_ERROR "please set CUDNN_LIB with -DCUDNN_LIB=/path/cudnn/")
+    endif()
+
+    set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
+    set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX})
+
+    if (WITH_TENSORRT)
+      include_directories("${TENSORRT_DIR}/include")
+      link_directories("${TENSORRT_DIR}/lib")
+
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX})
+    endif()
+
+  else()
+    set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )
+    set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} )
+    set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX})
+
+    if (WITH_TENSORRT)
+      include_directories("${TENSORRT_DIR}/include")
+      link_directories("${TENSORRT_DIR}/lib")
+
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer${CMAKE_STATIC_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX})
+      set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/myelin64_1${CMAKE_STATIC_LIBRARY_SUFFIX})
+    endif()
+  endif()
+endif()
+
+macro(safe_set_static_flag)
+    foreach(flag_var
+        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
+      if(${flag_var} MATCHES "/MD")
+        string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+      endif(${flag_var} MATCHES "/MD")
+    endforeach(flag_var)
+endmacro()
+
+if (WIN32)
+    add_definitions("/DGOOGLE_GLOG_DLL_DECL=")
+    find_package(OpenMP REQUIRED)
+    if (OPENMP_FOUND)
+        message("OPENMP FOUND")
+        set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} ${OpenMP_C_FLAGS}")
+        set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} ${OpenMP_C_FLAGS}")
+        set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} ${OpenMP_CXX_FLAGS}")
+        set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} ${OpenMP_CXX_FLAGS}")
+    endif()
+    set(CMAKE_C_FLAGS_DEBUG   "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
+    set(CMAKE_C_FLAGS_RELEASE  "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
+    set(CMAKE_CXX_FLAGS_DEBUG  "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
+    set(CMAKE_CXX_FLAGS_RELEASE   "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
+    if (WITH_STATIC_LIB)
+        safe_set_static_flag()
+        add_definitions(-DSTATIC_LIB)
+    endif()
+else()
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -o3 -fopenmp -std=c++11")
+    set(CMAKE_STATIC_LIBRARY_PREFIX "")
+    set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread")
+    set(DEPS ${DEPS} ${EXTERNAL_LIB})
+endif()
+
+message("--DEPS-----:${DEPS}")
+
+add_executable(model_infer ../../demo/model_infer.cpp)
+target_link_libraries(model_infer ${DEPS})