CMakeLists.txt 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. cmake_minimum_required(VERSION 3.0)
  2. project(PaddleDeploy CXX C)
  3. option(WITH_MKL "Compile demo with MKL/OpenBlas support,defaultuseMKL." ON)
  4. option(WITH_GPU "Compile demo with GPU/CPU, default use CPU." ON)
  5. option(WITH_STATIC_LIB "Compile demo with static/shared library, default use static." OFF)
  6. option(WITH_TENSORRT "Compile demo with TensorRT." OFF)
  7. SET(TENSORRT_DIR "" CACHE PATH "Location of libraries")
  8. SET(OPENCV_DIR "" CACHE PATH "Location of libraries")
  9. SET(CUDA_LIB "" CACHE PATH "Location of libraries")
  10. SET(CUDNN_LIB "" CACHE PATH "Location of libraries")
  11. SET(PADDLEX_DIR "" CACHE PATH "Location of libraries")
  12. # paddlex
  13. find_package(PaddleXManufacture REQUIRED PATHS ${PADDLEX_DIR}/share NO_DEFAULT_PATH)
  14. include_directories(${PaddleXManufacture_INCLUDE_DIRS})
  15. set(DEPS ${DEPS} ${PaddleXManufacture_LIBS})
  16. message("paddlexpipeline-------:${PaddleXManufacture_INCLUDE_DIRS}")
  17. # OPENCV
  18. message("opencv-------:${WITH_TENSORRT} ${TENSORRT_DIR}")
  19. if (WIN32)
  20. find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH)
  21. unset(OpenCV_DIR CACHE)
  22. else ()
  23. find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/share/OpenCV NO_DEFAULT_PATH)
  24. endif ()
  25. set(DEPS ${DEPS} ${OpenCV_LIBS})
  26. include_directories(${OpenCV_INCLUDE_DIRS})
  27. # GPU TensorRT
  28. if(WITH_GPU)
  29. if(NOT WIN32)
  30. if (NOT DEFINED CUDNN_LIB)
  31. message(FATAL_ERROR "please set CUDNN_LIB with -DCUDNN_LIB=/path/cudnn/")
  32. endif()
  33. set(DEPS ${DEPS} ${CUDA_LIB}/libcudart${CMAKE_SHARED_LIBRARY_SUFFIX})
  34. set(DEPS ${DEPS} ${CUDNN_LIB}/libcudnn${CMAKE_SHARED_LIBRARY_SUFFIX})
  35. if (WITH_TENSORRT)
  36. include_directories("${TENSORRT_DIR}/include")
  37. link_directories("${TENSORRT_DIR}/lib")
  38. set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer${CMAKE_SHARED_LIBRARY_SUFFIX})
  39. set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/libnvinfer_plugin${CMAKE_SHARED_LIBRARY_SUFFIX})
  40. endif()
  41. else()
  42. set(DEPS ${DEPS} ${CUDA_LIB}/cudart${CMAKE_STATIC_LIBRARY_SUFFIX} )
  43. set(DEPS ${DEPS} ${CUDA_LIB}/cublas${CMAKE_STATIC_LIBRARY_SUFFIX} )
  44. set(DEPS ${DEPS} ${CUDA_LIB}/cudnn${CMAKE_STATIC_LIBRARY_SUFFIX})
  45. if (WITH_TENSORRT)
  46. include_directories("${TENSORRT_DIR}/include")
  47. link_directories("${TENSORRT_DIR}/lib")
  48. set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer${CMAKE_STATIC_LIBRARY_SUFFIX})
  49. set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/nvinfer_plugin${CMAKE_STATIC_LIBRARY_SUFFIX})
  50. set(DEPS ${DEPS} ${TENSORRT_DIR}/lib/myelin64_1${CMAKE_STATIC_LIBRARY_SUFFIX})
  51. endif()
  52. endif()
  53. endif()
  54. macro(safe_set_static_flag)
  55. foreach(flag_var
  56. CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
  57. CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
  58. if(${flag_var} MATCHES "/MD")
  59. string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
  60. endif(${flag_var} MATCHES "/MD")
  61. endforeach(flag_var)
  62. endmacro()
  63. if (WIN32)
  64. add_definitions("/DGOOGLE_GLOG_DLL_DECL=")
  65. find_package(OpenMP REQUIRED)
  66. if (OPENMP_FOUND)
  67. message("OPENMP FOUND")
  68. set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${OpenMP_C_FLAGS}")
  69. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${OpenMP_C_FLAGS}")
  70. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${OpenMP_CXX_FLAGS}")
  71. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${OpenMP_CXX_FLAGS}")
  72. endif()
  73. set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /bigobj /MTd")
  74. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /bigobj /MT")
  75. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /bigobj /MTd")
  76. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /bigobj /MT")
  77. if (WITH_STATIC_LIB)
  78. safe_set_static_flag()
  79. add_definitions(-DSTATIC_LIB)
  80. endif()
  81. else()
  82. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -o3 -fopenmp -std=c++11")
  83. set(CMAKE_STATIC_LIBRARY_PREFIX "")
  84. set(EXTERNAL_LIB "-ldl -lrt -lgomp -lz -lm -lpthread")
  85. set(DEPS ${DEPS} ${EXTERNAL_LIB})
  86. endif()
  87. message("--DEPS-----:${DEPS}")
  88. include_directories("../")
  89. aux_source_directory(src SRC)
  90. add_executable(meter_reader meter_reader.cpp ${SRC})
  91. target_link_libraries(meter_reader ${DEPS})
  92. if(WIN32)
  93. add_custom_command(TARGET meter_reader POST_BUILD
  94. COMMAND ${CMAKE_COMMAND} -E copy ${PADDLEX_DIR}/third_party/mklml/lib/mklml.dll ${CMAKE_BINARY_DIR}/
  95. COMMAND ${CMAKE_COMMAND} -E copy ${PADDLEX_DIR}/third_party/mklml/lib/libiomp5md.dll ${CMAKE_BINARY_DIR}/
  96. COMMAND ${CMAKE_COMMAND} -E copy ${PADDLEX_DIR}/third_party/mkldnn/lib/mkldnn.dll ${CMAKE_BINARY_DIR}/
  97. COMMAND ${CMAKE_COMMAND} -E copy ${PADDLEX_DIR}/lib/PaddleXManufacture.dll ${CMAKE_BINARY_DIR}/
  98. COMMAND ${CMAKE_COMMAND} -E copy ${PADDLEX_DIR}/third_party/paddle/lib/paddle_inference.dll ${CMAKE_BINARY_DIR}/
  99. )
  100. if (WITH_TENSORRT)
  101. add_custom_command(TARGET meter_reader POST_BUILD
  102. COMMAND ${CMAKE_COMMAND} -E copy ${TENSORRT_DIR}/lib/nvinfer.dll ${CMAKE_BINARY_DIR}/
  103. COMMAND ${CMAKE_COMMAND} -E copy ${TENSORRT_DIR}/lib/nvinfer_plugin.dll ${CMAKE_BINARY_DIR}/
  104. COMMAND ${CMAKE_COMMAND} -E copy ${TENSORRT_DIR}/lib/myelin64_1.dll ${CMAKE_BINARY_DIR}/
  105. )
  106. endif()
  107. endif()