agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 1 | cmake_minimum_required(VERSION 3.10) |
| 2 | |
| 3 | # set the project name |
| 4 | set (ProjectName GreenScreen) |
| 5 | set (Version 1.0) |
| 6 | |
| 7 | project(${ProjectName} VERSION ${Version}) |
| 8 | |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 9 | set (DAEMON ${PROJECT_SOURCE_DIR}/../../daemon) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 10 | set (PLUGIN_NAME GreenScreen) |
| 11 | set (JPL_FILE_NAME ${PLUGIN_NAME}.jpl) |
| 12 | set (DAEMON_SRC ${DAEMON}/src) |
| 13 | set (CONTRIB_PATH ${DAEMON}/contrib) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 14 | set (PLUGINS_LIB ${PROJECT_SOURCE_DIR}/../lib) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 15 | set (JPL_DIRECTORY ${PROJECT_BINARY_DIR}/jpl) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 16 | set (LIBS_DIR ${PROJECT_SOURCE_DIR}/../contrib/Libs) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 17 | |
| 18 | if(WIN32) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 19 | 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) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 28 | endif() |
| 29 | |
| 30 | if(UNIX) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 31 | 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) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 37 | endif() |
| 38 | |
| 39 | |
| 40 | message(Building:\ ${ProjectName}\ ${Version}) |
| 41 | message(Build\ path:\ ${PROJECT_BINARY_DIR}) |
| 42 | message(JPL\ assembling\ path:\ ${JPL_DIRECTORY}) |
| 43 | message(JPL\ path:\ ${JPL_DIRECTORY}/../../../build/${ProjectName}/${JPL_FILE_NAME}) |
| 44 | |
| 45 | set(TENSORFLOW _tensorflow_cc) |
| 46 | set(model mModel-resnet50float.pb) |
| 47 | set(modelType .pb) |
| 48 | set(preferencesFile preferences-tfcc.json) |
| 49 | set(TFLIB libtensorflow_cc) |
| 50 | set(GPU -gpu61) |
| 51 | |
| 52 | if (CPU) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 53 | set(GPU ) |
| 54 | add_definitions(-DCPU) |
| 55 | message(CPU\ BUILDING!) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 56 | endif() |
| 57 | |
| 58 | if (TFLITE) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 59 | 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!) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 66 | endif() |
| 67 | |
| 68 | set(CMAKE_CXX_STANDARD 17) |
| 69 | set(CMAKE_CXX_STANDARD_REQUIRED True) |
| 70 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") |
| 71 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") |
| 72 | |
| 73 | set(plugin_SRC main.cpp |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 74 | pluginInference.cpp |
| 75 | pluginMediaHandler.cpp |
| 76 | pluginParameters.cpp |
| 77 | pluginProcessor.cpp |
| 78 | TFInference.cpp |
| 79 | videoSubscriber.cpp |
| 80 | ) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 81 | |
agsantos | 364bbae | 2020-08-17 11:29:56 -0400 | [diff] [blame] | 82 | set(plugin_HDR pluginInference.h |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 83 | 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 | ) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 93 | |
| 94 | |
| 95 | |
| 96 | # add the library |
| 97 | add_library(${ProjectName} SHARED ${plugin_SRC} |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 98 | ${plugin_HDR} |
| 99 | ) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 100 | |
agsantos | 364bbae | 2020-08-17 11:29:56 -0400 | [diff] [blame] | 101 | if (WIN32) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 102 | target_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 | ) |
| 113 | target_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 | ) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 119 | |
agsantos | 364bbae | 2020-08-17 11:29:56 -0400 | [diff] [blame] | 120 | target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng opencv_imgcodecs411 opencv_imgproc411 opencv_core411 ${TFLIB} zlib) |
| 121 | endif() |
| 122 | |
| 123 | if (UNIX) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 124 | target_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 | ) |
| 134 | link_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 | ) |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 139 | target_link_libraries(${ProjectName} PUBLIC swscale avutil libpng opencv_imgcodecs opencv_imgproc opencv_core ${TFLIB}) |
| 140 | endif() |
| 141 | |
| 142 | add_custom_command( |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 143 | 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" |
agsantos | 5aa3965 | 2020-08-11 18:18:04 -0400 | [diff] [blame] | 156 | ) |
| 157 | |
agsantos | 364bbae | 2020-08-17 11:29:56 -0400 | [diff] [blame] | 158 | if (WIN32) |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 159 | 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 | ) |
agsantos | 364bbae | 2020-08-17 11:29:56 -0400 | [diff] [blame] | 168 | else() |
agsantos | ac1940d | 2020-09-17 10:18:40 -0400 | [diff] [blame^] | 169 | 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 | ) |
agsantos | 364bbae | 2020-08-17 11:29:56 -0400 | [diff] [blame] | 177 | |
| 178 | endif() |