blob: db5ad07b2a965e518a653e2d40bd9db6d6249b34 [file] [log] [blame]
agsantos5aa39652020-08-11 18:18:04 -04001cmake_minimum_required(VERSION 3.10)
2
3# set the project name
4set (ProjectName GreenScreen)
agsantosdd6a62a2021-03-29 17:13:27 -04005set (Version 2.0.0)
agsantos5aa39652020-08-11 18:18:04 -04006
7project(${ProjectName} VERSION ${Version})
8
agsantosac1940d2020-09-17 10:18:40 -04009set (DAEMON ${PROJECT_SOURCE_DIR}/../../daemon)
agsantos796b5af2020-12-22 19:38:27 -050010set (JPL_FILE_NAME ${ProjectName}.jpl)
agsantos5aa39652020-08-11 18:18:04 -040011set (DAEMON_SRC ${DAEMON}/src)
12set (CONTRIB_PATH ${DAEMON}/contrib)
agsantosac1940d2020-09-17 10:18:40 -040013set (PLUGINS_LIB ${PROJECT_SOURCE_DIR}/../lib)
agsantos5aa39652020-08-11 18:18:04 -040014set (JPL_DIRECTORY ${PROJECT_BINARY_DIR}/jpl)
agsantosac1940d2020-09-17 10:18:40 -040015set (LIBS_DIR ${PROJECT_SOURCE_DIR}/../contrib/Libs)
agsantos796b5af2020-12-22 19:38:27 -050016set (ONNX_DIR $ENV{PLUGIN_ENV}/onnxruntime)
agsantos2c8525e2021-03-19 11:18:01 -040017set (PREFERENCESFILENAME preferences)
agsantos5aa39652020-08-11 18:18:04 -040018
19if(WIN32)
agsantosac1940d2020-09-17 10:18:40 -040020 message(OS:\ WINDOWS\ ${CMAKE_SYSTEM_PROCESSOR})
21 if (NOT ${CMAKE_CL_64})
22 message( FATAL_ERROR "\nUse CMake only for x64 Windows" )
23 endif()
24 set (CONTRIB_PLATFORM_CURT x64)
25 set (CONTRIB_PLATFORM ${CONTRIB_PLATFORM_CURT}-windows)
agsantos796b5af2020-12-22 19:38:27 -050026 set (LIBRARY_FILE_NAME ${ProjectName}.dll)
agsantosac1940d2020-09-17 10:18:40 -040027 set (FFMPEG ${CONTRIB_PATH}/build/ffmpeg/Build/win32/x64)
Aline Gondim Santos506a6932022-08-25 18:42:32 -030028else()
29 message( FATAL_ERROR "\nUse CMake only for Windows! For linux or Android (linux host), use our bash scripts." )
agsantos5aa39652020-08-11 18:18:04 -040030endif()
31
agsantos5aa39652020-08-11 18:18:04 -040032message(Building:\ ${ProjectName}\ ${Version})
33message(Build\ path:\ ${PROJECT_BINARY_DIR})
34message(JPL\ assembling\ path:\ ${JPL_DIRECTORY})
35message(JPL\ path:\ ${JPL_DIRECTORY}/../../../build/${ProjectName}/${JPL_FILE_NAME})
36
agsantos796b5af2020-12-22 19:38:27 -050037if(NVIDIA)
38add_definitions(-DNVIDIA)
39set(ONNX_DIR ${ONNX_DIR}/nvidia-gpu)
40message(Provider:\ NVIDIA)
41set(EXTRA_PATH nvidia-gpu)
agsantos2c8525e2021-03-19 11:18:01 -040042set (PREFERENCESFILENAME ${PREFERENCESFILENAME}-accel)
agsantos796b5af2020-12-22 19:38:27 -050043else()
44set(ONNX_DIR ${ONNX_DIR}/cpu)
45message(Provider:\ NONE)
46set(EXTRA_PATH cpu)
agsantos5aa39652020-08-11 18:18:04 -040047endif()
48
49set(CMAKE_CXX_STANDARD 17)
50set(CMAKE_CXX_STANDARD_REQUIRED True)
Aline Gondim Santos506a6932022-08-25 18:42:32 -030051
52if(TESTPROCESS)
53 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /D__DEBUG__ /MT")
54 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /D__DEBUG__ /MT")
55else()
56 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MT")
57 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
58endif()
agsantos5aa39652020-08-11 18:18:04 -040059
60set(plugin_SRC main.cpp
agsantosac1940d2020-09-17 10:18:40 -040061 pluginMediaHandler.cpp
agsantosac1940d2020-09-17 10:18:40 -040062 videoSubscriber.cpp
agsantos796b5af2020-12-22 19:38:27 -050063 pluginProcessor.cpp
agsantos1e7736c2020-10-28 14:39:13 -040064 ./../lib/accel.cpp
agsantosc9181b42020-11-26 12:03:04 -050065 ./../lib/frameUtils.cpp
agsantosdd6a62a2021-03-29 17:13:27 -040066 ./../lib/frameFilter.cpp
Aline Gondim Santos506a6932022-08-25 18:42:32 -030067 ./../lib/common.cpp
agsantosac1940d2020-09-17 10:18:40 -040068 )
agsantos5aa39652020-08-11 18:18:04 -040069
agsantos796b5af2020-12-22 19:38:27 -050070set(plugin_HDR pluginMediaHandler.h
agsantosac1940d2020-09-17 10:18:40 -040071 videoSubscriber.h
agsantos796b5af2020-12-22 19:38:27 -050072 pluginProcessor.h
agsantosc9181b42020-11-26 12:03:04 -050073 ./../lib/pluglog.h
agsantosdd6a62a2021-03-29 17:13:27 -040074 ./../lib/mediaStream.h
75 ./../lib/audioFormat.h
Aline Gondim Santos506a6932022-08-25 18:42:32 -030076 ./../lib/common.h
agsantosac1940d2020-09-17 10:18:40 -040077 )
agsantos5aa39652020-08-11 18:18:04 -040078
Aline Gondim Santos506a6932022-08-25 18:42:32 -030079if(TESTPROCESS)
80 add_executable(${ProjectName} ${plugin_SRC}
81 ${plugin_HDR}
82 )
83else()
84 add_library(${ProjectName} SHARED ${plugin_SRC}
85 ${plugin_HDR}
86 )
87endif()
agsantos5aa39652020-08-11 18:18:04 -040088
agsantosac1940d2020-09-17 10:18:40 -040089target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
90 ${PROJECT_SOURCE_DIR}
91 ${PLUGINS_LIB}
92 ${DAEMON_SRC}
93 ${CONTRIB_PATH}
Aline Gondim Santosba981bb2022-08-02 14:28:04 -030094 ${CONTRIB_PATH}/build/fmt/include
agsantosac1940d2020-09-17 10:18:40 -040095 ${FFMPEG}/include
96 ${CONTRIB_PATH}/build/opencv/build/install/include
agsantos796b5af2020-12-22 19:38:27 -050097 ${ONNX_DIR}/../include/session
98 ${ONNX_DIR}/../include/providers/cuda
Aline Gondim Santos506a6932022-08-25 18:42:32 -030099 ${CONTRIB_PATH}/build/yaml-cpp/include
agsantosac1940d2020-09-17 10:18:40 -0400100 )
101target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
Aline Gondim Santosba981bb2022-08-02 14:28:04 -0300102 ${CONTRIB_PATH}/build/fmt/msvc/Release
agsantosac1940d2020-09-17 10:18:40 -0400103 ${CONTRIB_PATH}/build/opencv/build/lib/Release
104 ${CONTRIB_PATH}/build/opencv/build/3rdparty/lib/Release
agsantosdd6a62a2021-03-29 17:13:27 -0400105 ${FFMPEG}/lib
agsantos796b5af2020-12-22 19:38:27 -0500106 ${ONNX_DIR}
agsantosdd6a62a2021-03-29 17:13:27 -0400107 ${CONTRIB_PATH}/msvc/lib/x64
Aline Gondim Santosba981bb2022-08-02 14:28:04 -0300108 ${CONTRIB_PATH}/build/fmt/msvc/Release
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300109 ${CONTRIB_PATH}/build/yaml-cpp/msvc/Release
agsantosac1940d2020-09-17 10:18:40 -0400110 )
agsantos5aa39652020-08-11 18:18:04 -0400111
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300112target_link_libraries(${ProjectName} PUBLIC libyaml-cppmd libavfilter libswscale libavformat libavcodec libavutil libvpx libx264 libopus libmfx
Aline Gondim Santos1c1a77d2022-08-02 14:34:38 -0300113 libzlib ws2_32 Bcrypt Secur32 opencv_imgproc460 opencv_core460 onnxruntime msvcrt)
agsantos5aa39652020-08-11 18:18:04 -0400114
115add_custom_command(
agsantosac1940d2020-09-17 10:18:40 -0400116 TARGET ${ProjectName}
117 PRE_BUILD
Aline Gondim Santos7763bff2022-07-20 08:04:02 -0300118 COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/zlib ${CONTRIB_PATH}/src/zlib
119 COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/ffmpeg/ ${CONTRIB_PATH}/src/ffmpeg
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300120 COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/../contrib/yaml-cpp ${CONTRIB_PATH}/src/yaml-cpp
121 COMMAND python ${DAEMON}/compat/msvc/winmake.py -fb yaml-cpp
Aline Gondim Santos7763bff2022-07-20 08:04:02 -0300122 COMMAND python ${DAEMON}/compat/msvc/winmake.py -fb zlib
123 COMMAND python ${DAEMON}/compat/msvc/winmake.py -fb ffmpeg
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300124 COMMAND cd ${CONTRIB_PATH}/src/
125 COMMAND git checkout *
agsantos5aa39652020-08-11 18:18:04 -0400126)
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300127if(TESTPROCESS)
128 add_custom_command(
129 TARGET ${ProjectName}
130 PRE_BUILD
131 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/testPreferences.yml ${PROJECT_BINARY_DIR}/
132 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/sample.mp4 ${PROJECT_BINARY_DIR}/
133 COMMAND ${CMAKE_COMMAND} -E copy ${ONNX_DIR}/onnxruntime.lib ${PROJECT_BINARY_DIR}/Debug
134 COMMAND ${CMAKE_COMMAND} -E copy ${ONNX_DIR}/onnxruntime.dll ${PROJECT_BINARY_DIR}/Debug
135 COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/data/model
136 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/modelSRC/mModel.onnx ${PROJECT_SOURCE_DIR}/data/model
137 )
138else()
139 add_custom_command(
140 TARGET ${ProjectName}
141 PRE_BUILD
142 COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
143 COMMAND ${CMAKE_COMMAND} -E copy ${ONNX_DIR}/onnxruntime.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
144 COMMAND ${CMAKE_COMMAND} -E copy ${ONNX_DIR}/onnxruntime.dll ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
145 COMMAND ${CMAKE_COMMAND} -E make_directory ${JPL_DIRECTORY}/data/model
146 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/modelSRC/mModel.onnx ${JPL_DIRECTORY}/data/model
147 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/${PREFERENCESFILENAME}.json ${JPL_DIRECTORY}/data/preferences.json
148 COMMENT "Assembling Plugin files"
149 )
agsantosac1940d2020-09-17 10:18:40 -0400150 add_custom_command(
151 TARGET ${ProjectName}
152 POST_BUILD
agsantosac1940d2020-09-17 10:18:40 -0400153 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
154 COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
agsantos796b5af2020-12-22 19:38:27 -0500155 COMMAND python ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName} --extraPath=${EXTRA_PATH}
agsantosac1940d2020-09-17 10:18:40 -0400156 COMMENT "Generating JPL archive"
157 )
agsantos796b5af2020-12-22 19:38:27 -0500158endif()