blob: 61f9d401cd93422caa09be5d24e0ab436318a963 [file] [log] [blame]
agsantos5aa39652020-08-11 18:18:04 -04001cmake_minimum_required(VERSION 3.10)
2
3# set the project name
4set (ProjectName GreenScreen)
5set (Version 1.0)
6
7project(${ProjectName} VERSION ${Version})
8
agsantosac1940d2020-09-17 10:18:40 -04009set (DAEMON ${PROJECT_SOURCE_DIR}/../../daemon)
agsantos5aa39652020-08-11 18:18:04 -040010set (PLUGIN_NAME GreenScreen)
11set (JPL_FILE_NAME ${PLUGIN_NAME}.jpl)
12set (DAEMON_SRC ${DAEMON}/src)
13set (CONTRIB_PATH ${DAEMON}/contrib)
agsantosac1940d2020-09-17 10:18:40 -040014set (PLUGINS_LIB ${PROJECT_SOURCE_DIR}/../lib)
agsantos5aa39652020-08-11 18:18:04 -040015set (JPL_DIRECTORY ${PROJECT_BINARY_DIR}/jpl)
agsantosac1940d2020-09-17 10:18:40 -040016set (LIBS_DIR ${PROJECT_SOURCE_DIR}/../contrib/Libs)
agsantos5aa39652020-08-11 18:18:04 -040017
18if(WIN32)
agsantosac1940d2020-09-17 10:18:40 -040019 message(OS:\ WINDOWS\ ${CMAKE_SYSTEM_PROCESSOR})
20 if (NOT ${CMAKE_CL_64})
21 message( FATAL_ERROR "\nUse CMake only for x64 Windows" )
22 endif()
23 set (CONTRIB_PLATFORM_CURT x64)
24 set (CONTRIB_PLATFORM ${CONTRIB_PLATFORM_CURT}-windows)
25 set (LIBRARY_FILE_NAME ${PLUGIN_NAME}.dll)
26 set (LIBS_BIN_DIR $ENV{PLUGIN_ENV})
27 set (FFMPEG ${CONTRIB_PATH}/build/ffmpeg/Build/win32/x64)
agsantos5aa39652020-08-11 18:18:04 -040028endif()
29
30if(UNIX)
agsantosac1940d2020-09-17 10:18:40 -040031 message( FATAL_ERROR "\nUse CMake only for Windows! For linux or Android (linux host), use our bash scripts.\nPlese refer to documentation for more infos." )
32 message(OS:\ LINUX\ ${CMAKE_SYSTEM_PROCESSOR})
33 set (CONTRIB_PLATFORM_CURT ${CMAKE_SYSTEM_PROCESSOR})
34 set (CONTRIB_PLATFORM ${CONTRIB_PLATFORM_CURT}-linux-gnu)
35 set (LIBRARY_FILE_NAME lib${PLUGIN_NAME}.so)
36 set (LIBS_BIN_DIR /home/${USER}/Libs)
agsantos5aa39652020-08-11 18:18:04 -040037endif()
38
39
40message(Building:\ ${ProjectName}\ ${Version})
41message(Build\ path:\ ${PROJECT_BINARY_DIR})
42message(JPL\ assembling\ path:\ ${JPL_DIRECTORY})
43message(JPL\ path:\ ${JPL_DIRECTORY}/../../../build/${ProjectName}/${JPL_FILE_NAME})
44
45set(TENSORFLOW _tensorflow_cc)
46set(model mModel-resnet50float.pb)
47set(modelType .pb)
48set(preferencesFile preferences-tfcc.json)
49set(TFLIB libtensorflow_cc)
50set(GPU -gpu61)
51
52if (CPU)
agsantosac1940d2020-09-17 10:18:40 -040053 set(GPU )
54 add_definitions(-DCPU)
55 message(CPU\ BUILDING!)
agsantos5aa39652020-08-11 18:18:04 -040056endif()
57
58if (TFLITE)
agsantosac1940d2020-09-17 10:18:40 -040059 add_definitions(-DTFLITE)
60 set(TENSORFLOW _tensorflowLite)
61 set(model mobilenet_v2_deeplab_v3_256_myquant.tflite)
62 set(modelType .tflite)
63 set(preferencesFile preferences-tflite.json)
64 set(TFLIB libtensorflowlite)
65 message(TFLITE\ BUILDING!)
agsantos5aa39652020-08-11 18:18:04 -040066endif()
67
68set(CMAKE_CXX_STANDARD 17)
69set(CMAKE_CXX_STANDARD_REQUIRED True)
70set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
71set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
72
73set(plugin_SRC main.cpp
agsantosac1940d2020-09-17 10:18:40 -040074 pluginInference.cpp
75 pluginMediaHandler.cpp
76 pluginParameters.cpp
77 pluginProcessor.cpp
78 TFInference.cpp
79 videoSubscriber.cpp
80 )
agsantos5aa39652020-08-11 18:18:04 -040081
agsantos364bbae2020-08-17 11:29:56 -040082set(plugin_HDR pluginInference.h
agsantosac1940d2020-09-17 10:18:40 -040083 pluginMediaHandler.h
84 pluginParameters.h
85 pluginProcessor.h
86 TFInference.h
87 TFModels.h
88 videoSubscriber.h
89 ../lib/accel.h
90 ../lib/framescaler.h
91 ../lib/pluglog.h
92 )
agsantos5aa39652020-08-11 18:18:04 -040093
94
95
96# add the library
97add_library(${ProjectName} SHARED ${plugin_SRC}
agsantosac1940d2020-09-17 10:18:40 -040098 ${plugin_HDR}
99 )
agsantos5aa39652020-08-11 18:18:04 -0400100
agsantos364bbae2020-08-17 11:29:56 -0400101if (WIN32)
agsantosac1940d2020-09-17 10:18:40 -0400102target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
103 ${PROJECT_SOURCE_DIR}
104 ${PLUGINS_LIB}
105 ${DAEMON_SRC}
106 ${CONTRIB_PATH}
107 ${FFMPEG}/include
108 ${CONTRIB_PATH}/build/opencv/build/install/include
109 ${LIBS_DIR}/${TENSORFLOW}/include
110 ${LIBS_DIR}/${TENSORFLOW}/include/third_party/eigen3
111 ${LIBS_DIR}/${TENSORFLOW}/include/flatbuffers
112 )
113target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
114 ${LIBS_BIN_DIR}/${TENSORFLOW}/lib/${CONTRIB_PLATFORM}
115 ${CONTRIB_PATH}/build/opencv/build/lib/Release
116 ${CONTRIB_PATH}/build/opencv/build/3rdparty/lib/Release
117 ${FFMPEG}/bin
118 )
agsantos5aa39652020-08-11 18:18:04 -0400119
agsantos364bbae2020-08-17 11:29:56 -0400120target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng opencv_imgcodecs411 opencv_imgproc411 opencv_core411 ${TFLIB} zlib)
121endif()
122
123if (UNIX)
agsantosac1940d2020-09-17 10:18:40 -0400124target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
125 ${PROJECT_SOURCE_DIR}
126 ${PLUGINS_LIB}
127 ${DAEMON_SRC}
128 ${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include
129 ${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4
130 ${LIBS_DIR}/${TENSORFLOW}/include
131 ${LIBS_DIR}/${TENSORFLOW}/include/third_party/eigen3
132 ${LIBS_DIR}/${TENSORFLOW}/include/flatbuffers
133 )
134link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
135 ${LIBS_BIN_DIR}/${TENSORFLOW}/lib/${CONTRIB_PLATFORM}
136 ${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib
137 ${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/opencv4/3rdparty
138 )
agsantos5aa39652020-08-11 18:18:04 -0400139target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng opencv_imgcodecs opencv_imgproc opencv_core ${TFLIB})
140endif()
141
142add_custom_command(
agsantosac1940d2020-09-17 10:18:40 -0400143 TARGET ${ProjectName}
144 PRE_BUILD
145 COMMAND ${CMAKE_COMMAND} -E remove_directory -r ${JPL_DIRECTORY}
146 COMMAND ${CMAKE_COMMAND} -E remove_directory -r ${JPL_DIRECTORY}/../../../build/${ProjectName}
147 COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/data ${JPL_DIRECTORY}/data
148 COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBS_BIN_DIR}/${TENSORFLOW}/lib/ ${JPL_DIRECTORY}/lib
149 COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/data/models
150 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/modelsSRC/${model} ${JPL_DIRECTORY}/data/models
151 COMMAND ${CMAKE_COMMAND} -E rename ${JPL_DIRECTORY}/data/models/${model} ${JPL_DIRECTORY}/data/models/mModel${modelType}
152 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/manifest.json ${JPL_DIRECTORY}
153 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/${preferencesFile} ${JPL_DIRECTORY}/data
154 COMMAND ${CMAKE_COMMAND} -E rename ${JPL_DIRECTORY}/data/${preferencesFile} ${JPL_DIRECTORY}/data/preferences.json
155 COMMENT "Assembling Plugin files"
agsantos5aa39652020-08-11 18:18:04 -0400156)
157
agsantos364bbae2020-08-17 11:29:56 -0400158if (WIN32)
agsantosac1940d2020-09-17 10:18:40 -0400159 add_custom_command(
160 TARGET ${ProjectName}
161 POST_BUILD
162 COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/../../../build/x64-windows/${TENSORFLOW}
163 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
164 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
165 COMMAND python ${PROJECT_SOURCE_DIR}/../assemble-plugin.py --plugins=GreenScreen --extraPath=${TENSORFLOW}
166 COMMENT "Generating JPL archive"
167 )
agsantos364bbae2020-08-17 11:29:56 -0400168else()
agsantosac1940d2020-09-17 10:18:40 -0400169 add_custom_command(
170 TARGET ${ProjectName}
171 POST_BUILD
172 COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/../../../build/x86_64-linux-gnu/${TENSORFLOW}
173 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
174 COMMAND python ${PROJECT_SOURCE_DIR}/../assemble-plugin.py --plugins=GreenScreen --extraPath=${TENSORFLOW}
175 COMMENT "Generating JPL archive"
176 )
agsantos364bbae2020-08-17 11:29:56 -0400177
178endif()