CMakeLists.txt 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. cmake_minimum_required(VERSION 2.8.7)
  2. if(POLICY CMP0046)
  3. cmake_policy(SET CMP0046 NEW)
  4. endif()
  5. if(POLICY CMP0054)
  6. cmake_policy(SET CMP0054 NEW)
  7. endif()
  8. set(CNSTREAM_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
  9. include(CheckCXXCompilerFlag)
  10. CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
  11. if(NOT COMPILER_SUPPORTS_CXX11)
  12. message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
  13. endif()
  14. if(USE_libstdcpp)
  15. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++")
  16. message("-- Warning: forcing libstdc++ (controlled by USE_libstdcpp option in cmake)")
  17. endif()
  18. # compile flags
  19. set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-as-needed")
  20. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG -O2")
  21. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -g")
  22. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -D_REENTRANT -fPIC -Wall -Werror")
  23. set(VERSION_HEAD_FILE ${CNSTREAM_ROOT_DIR}/framework/core/include/cnstream_version.hpp)
  24. execute_process(COMMAND awk /CNSTREAM_MAJOR_VERSION/ ${VERSION_HEAD_FILE} OUTPUT_VARIABLE VERSION_STR)
  25. string(REGEX MATCH "[0-9]+" MAJOR_VERSION ${VERSION_STR})
  26. execute_process(COMMAND awk /CNSTREAM_MINOR_VERSION/ ${VERSION_HEAD_FILE} OUTPUT_VARIABLE VERSION_STR)
  27. string(REGEX MATCH "[0-9]+" MINOR_VERSION ${VERSION_STR})
  28. execute_process(COMMAND awk /CNSTREAM_PATCH_VERSION/ ${VERSION_HEAD_FILE} OUTPUT_VARIABLE VERSION_STR)
  29. string(REGEX MATCH "[0-9]+" PATCH_VERSION ${VERSION_STR})
  30. set(CNSTREAM_TARGET_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
  31. # ---[ Options
  32. option(build_display "build module display" ON)
  33. option(build_encode "build module encode" ON)
  34. option(build_inference "build module inference" ON)
  35. option(build_inference2 "build module inference2" ON)
  36. option(build_osd "build module osd" ON)
  37. option(build_rtsp_sink "build module rtsp sink" ON)
  38. option(build_source "build module source" ON)
  39. option(build_track "build module track" ON)
  40. option(build_kafka "build module kafka" ON)
  41. option(build_Base64 "build module build_Base64" ON)
  42. option(build_recorder "build module build_recorder" ON)
  43. option(build_udp "build module build_udp" ON)
  44. option(build_locus "build_locus" ON)
  45. option(WITH_RTSP "with rtsp" ON)
  46. option(WITH_FFMPEG "with ffmpeg" ON)
  47. option(WITH_FFMPEG_AVDEVICE "with ffmpeg avdevice" OFF)
  48. option(WITH_FREETYPE "with freetype" OFF)
  49. if(build_tests)
  50. add_definitions(-DUNIT_TEST)
  51. endif()
  52. # ---[ 3rdparty
  53. set(3RDPARTY_LIBS "")
  54. set(DEPENDENCIES "")
  55. set(CMAKE_MODULE_PATH ${CNSTREAM_ROOT_DIR}/cmake)
  56. # ---[ neuware
  57. find_package(Neuware)
  58. include_directories(${NEUWARE_INCLUDE_DIR})
  59. list(APPEND 3RDPARTY_LIBS ${CNRT_LIBS} ${CNCODEC_LIBS})
  60. if (CNCODECV3_LIBS)
  61. add_definitions(-DENABLE_MLU300_CODEC)
  62. list(APPEND 3RDPARTY_LIBS ${CNCODECV3_LIBS})
  63. endif()
  64. if (CNCV_LIBS AND build_encode)
  65. list(APPEND 3RDPARTY_LIBS ${CNCV_LIBS})
  66. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CNCV")
  67. message(STATUS "CNCV libraries: ${CNCV_LIBS}")
  68. endif()
  69. include(${CNSTREAM_ROOT_DIR}/cmake/have_cnstream_target.cmake)
  70. # ---[ framework
  71. have_framework_target(${CNSTREAM_ROOT_DIR})
  72. list(APPEND 3RDPARTY_LIBS cnstream_core)
  73. if(HAVE_FRAMEWORK_TARGET)
  74. list(APPEND DEPENDENCIES cnstream_core)
  75. endif()
  76. # ---[ easydk
  77. have_easydk_target(${CNSTREAM_ROOT_DIR})
  78. list(APPEND 3RDPARTY_LIBS easydk cnis)
  79. if(HAVE_EASYDK_TARGET)
  80. list(APPEND DEPENDENCIES easydk cnis)
  81. endif()
  82. # ---[ rapidjson
  83. include_directories(${CNSTREAM_ROOT_DIR}/3rdparty/rapidjson/include)
  84. # ---[ libyuv
  85. list(APPEND ADDITIONAL_MAKE_CLEAN_FILES_LIST "${CNSTREAM_ROOT_DIR}/3rdparty/libyuv")
  86. add_custom_target(cnstream_libyuv sh ${CNSTREAM_ROOT_DIR}/tools/build_libyuv.sh ${CMAKE_C_COMPILER} ${CMAKE_CXX_COMPILER})
  87. list(APPEND DEPENDENCIES cnstream_libyuv)
  88. include_directories(${CNSTREAM_ROOT_DIR}/3rdparty/libyuv/include)
  89. link_directories(${CNSTREAM_ROOT_DIR}/3rdparty/libyuv/lib)
  90. list(APPEND 3RDPARTY_LIBS ${CNSTREAM_ROOT_DIR}/3rdparty/libyuv/lib/libyuv.a)
  91. # ---[ opencv
  92. set(OpenCV_FIND_QUIETLY true)
  93. #find_package(OpenCV REQUIRED) //this will include opencv_ts which result in crash on centos
  94. find_package(OpenCV OPTIONAL_COMPONENTS imgcodecs)
  95. find_package(OpenCV OPTIONAL_COMPONENTS videoio)
  96. set(optional_opencv_libs ${OpenCV_LIBS})
  97. find_package(OpenCV REQUIRED core imgproc highgui features2d)
  98. if(OpenCV_FOUND)
  99. if(imgcodecs_FOUND)
  100. list(APPEND OpenCV_LIBS optional_opencv_libs)
  101. endif()
  102. include_directories(${OpenCV_INCLUDE_DIRS})
  103. list(APPEND 3RDPARTY_LIBS ${OpenCV_LIBS})
  104. message(STATUS "opencv include: ${OpenCV_INCLUDE_DIRS}")
  105. message(STATUS "opencv libraries: ${OpenCV_LIBS}")
  106. else()
  107. message(FATAL_ERROR "opencv not found!")
  108. endif()
  109. # ---[ ffmpeg
  110. if(WITH_FFMPEG AND (build_source OR build_encode OR build_rtsp_sink))
  111. find_package(FFmpeg REQUIRED)
  112. if (FFMPEG_FOUND)
  113. include_directories(${FFMPEG_INCLUDE_DIR})
  114. list(APPEND 3RDPARTY_LIBS ${FFMPEG_LIBRARIES})
  115. set(HAVE_FFMPEG true)
  116. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_FFMPEG")
  117. if (WITH_FFMPEG_AVDEVICE)
  118. add_definitions(-DHAVE_FFMPEG_AVDEVICE)
  119. endif ()
  120. message(STATUS "ffmpeg include: ${FFMPEG_INCLUDE_DIR}")
  121. message(STATUS "ffmpeg libraries: ${FFMPEG_LIBRARIES}")
  122. else ()
  123. message(FATAL_ERROR "ffmpeg not found!")
  124. endif ()
  125. endif()
  126. # ---[ freetype
  127. if(WITH_FREETYPE AND build_osd)
  128. find_package(Freetype REQUIRED)
  129. if (FREETYPE_FOUND)
  130. include_directories(${FREETYPE_INCLUDE_DIR_ft2build})
  131. list(APPEND 3RDPARTY_LIBS ${FREETYPE_LIBRARIES})
  132. message(STATUS "freetype include: ${FREETYPE_INCLUDE_DIR_ft2build}")
  133. message(STATUS "freetype libraries: ${FREETYPE_LIBRARIES}")
  134. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_FREETYPE")
  135. else (FREETYPE_FOUND)
  136. message(FATAL_ERROR "freetype not found!")
  137. endif (FREETYPE_FOUND)
  138. endif()
  139. # ---[ live555
  140. if(WITH_RTSP AND (build_source OR build_rtsp_sink))
  141. list(APPEND ADDITIONAL_MAKE_CLEAN_FILES_LIST "${CNSTREAM_ROOT_DIR}/3rdparty/live555")
  142. add_custom_target(live555 sh ${CNSTREAM_ROOT_DIR}/tools/build_live555.sh ${CMAKE_C_COMPILER} ${CMAKE_CXX_COMPILER})
  143. list(APPEND DEPENDENCIES live555)
  144. include_directories(${CNSTREAM_ROOT_DIR}/3rdparty/live555/include/BasicUsageEnvironment)
  145. include_directories(${CNSTREAM_ROOT_DIR}/3rdparty/live555/include/groupsock)
  146. include_directories(${CNSTREAM_ROOT_DIR}/3rdparty/live555/include/liveMedia)
  147. include_directories(${CNSTREAM_ROOT_DIR}/3rdparty/live555/include/UsageEnvironment)
  148. set(Live555_LIBS ${CNSTREAM_ROOT_DIR}/3rdparty/live555/lib/libliveMedia.so
  149. ${CNSTREAM_ROOT_DIR}/3rdparty/live555/lib/libUsageEnvironment.so
  150. ${CNSTREAM_ROOT_DIR}/3rdparty/live555/lib/libBasicUsageEnvironment.so
  151. ${CNSTREAM_ROOT_DIR}/3rdparty/live555/lib/libgroupsock.so)
  152. list(APPEND 3RDPARTY_LIBS ${Live555_LIBS})
  153. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_LIVE555 -DNO_OPENSSL")
  154. endif()
  155. # ---[ sdl2
  156. if(build_display)
  157. find_package(SDL2 REQUIRED sdl2)
  158. if(SDL2_FOUND)
  159. string(STRIP ${SDL2_LIBRARIES} SDL2_LIBRARIES)
  160. include_directories(${SDL2_INCLUDE_DIRS})
  161. list(APPEND 3RDPARTY_LIBS ${SDL2_LIBRARIES})
  162. message(STATUS "sdl2 include: ${SDL2_INCLUDE_DIRS}")
  163. message(STATUS "sdl2 libraries: ${SDL2_LIBRARIES}")
  164. else()
  165. message(FATAL_ERROR "sdl2 not found")
  166. endif()
  167. endif()
  168. # ---[ kafka
  169. if(build_kafka)
  170. find_package(LibRDKafka)
  171. if(LIBRDKAFKA_FOUND)
  172. include_directories(${LibRDKafka_INCLUDE_DIR})
  173. list(APPEND 3RDPARTY_LIBS ${LibRDKafka_C_LIBRARIES})
  174. message(STATUS "LibRDKafka include: ${LibRDKafka_INCLUDE_DIR}")
  175. message(STATUS "LibRDKafka libraries: ${LibRDKafka_C_LIBRARIES}")
  176. else()
  177. message(FATAL_ERROR "rdkafka not found!")
  178. endif()
  179. endif()
  180. set(module_list "")
  181. if(build_encode)
  182. list(APPEND module_list encode)
  183. include_directories(${PROJECT_SOURCE_DIR}/modules/encode/src)
  184. install(DIRECTORY encode/include/ DESTINATION include)
  185. endif()
  186. if(build_inference)
  187. list(APPEND module_list inference)
  188. install(DIRECTORY inference/include/ DESTINATION include)
  189. endif()
  190. if(build_inference2)
  191. list(APPEND module_list inference2)
  192. install(DIRECTORY inference2/include/ DESTINATION include)
  193. endif()
  194. if(build_osd)
  195. list(APPEND module_list osd)
  196. install(DIRECTORY osd/include/ DESTINATION include)
  197. endif()
  198. if(build_rtsp_sink)
  199. list(APPEND module_list rtsp_sink)
  200. install(DIRECTORY rtsp_sink/include/ DESTINATION include)
  201. endif()
  202. if(build_source)
  203. list(APPEND module_list source)
  204. install(DIRECTORY source/include/ DESTINATION include)
  205. endif()
  206. if(build_track)
  207. list(APPEND module_list track)
  208. install(DIRECTORY track/include/ DESTINATION include)
  209. endif()
  210. if(build_display)
  211. list(APPEND module_list display)
  212. install(DIRECTORY display/include/ DESTINATION include)
  213. endif()
  214. if(build_kafka)
  215. list(APPEND module_list kafka)
  216. install(DIRECTORY kafka/include/ DESTINATION include)
  217. endif()
  218. if(build_Base64)
  219. list(APPEND module_list Base64)
  220. install(DIRECTORY Base64/include/ DESTINATION include)
  221. endif()
  222. if(build_recorder)
  223. list(APPEND module_list recorder)
  224. install(DIRECTORY recorder/include/ DESTINATION include)
  225. endif()
  226. if(build_locus)
  227. list(APPEND module_list locus)
  228. install(DIRECTORY locus/include/ DESTINATION include)
  229. endif()
  230. if(build_udp)
  231. list(APPEND module_list udp)
  232. install(DIRECTORY udp/include/ DESTINATION include)
  233. endif()
  234. include_directories(${CMAKE_CURRENT_SOURCE_DIR})
  235. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/util/include)
  236. file(GLOB srcs ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
  237. foreach(module ${module_list})
  238. include_directories(${CMAKE_CURRENT_SOURCE_DIR}/${module}/include)
  239. file(GLOB_RECURSE module_src ${CMAKE_CURRENT_SOURCE_DIR}/${module}/*.cpp)
  240. list(APPEND srcs ${module_src})
  241. endforeach()
  242. set(LIBRARY_OUTPUT_PATH ${CNSTREAM_ROOT_DIR}/lib)
  243. add_library(cnstream_va SHARED ${srcs})
  244. add_dependencies(cnstream_va ${DEPENDENCIES})
  245. set_target_properties(cnstream_va PROPERTIES LINK_FLAGS_RELEASE -s)
  246. install(TARGETS cnstream_va LIBRARY DESTINATION lib)
  247. target_link_libraries(cnstream_va ${3RDPARTY_LIBS} rt dl pthread ZLToolKit)
  248. set_target_properties(cnstream_va PROPERTIES VERSION ${CNSTREAM_TARGET_VERSION})
  249. # remove related files while make clean
  250. set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${ADDITIONAL_MAKE_CLEAN_FILES_LIST})
  251. if(build_tests)
  252. set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/)
  253. add_subdirectory(unitest)
  254. endif()