blob: 010b81f8854eb1344eed007b9deb6a55d37bff12 [file] [log] [blame]
agsantos5aa39652020-08-11 18:18:04 -04001#! /bin/bash
2# Build the plugin for the project
agsantos82678f32020-12-09 15:03:24 -05003set -e
agsantosac1940d2020-09-17 10:18:40 -04004export OSTYPE
agsantos1bbc7cc2021-05-20 16:43:35 -04005ARCH=$(uname -m)
agsantos1e7736c2020-10-28 14:39:13 -04006EXTRAPATH=''
agsantosac1940d2020-09-17 10:18:40 -04007# Flags:
8
Aline Gondim Santos506a6932022-08-25 18:42:32 -03009# -p: number of processors to use.
10# -c: Runtime plugin cpu/gpu setting.
11# -t: target platform.
12# -d: debug program.
agsantosac1940d2020-09-17 10:18:40 -040013
agsantosac1940d2020-09-17 10:18:40 -040014if [ -z "${DAEMON}" ]; then
agsantos5aa39652020-08-11 18:18:04 -040015 DAEMON="./../../daemon"
agsantosac1940d2020-09-17 10:18:40 -040016 echo "DAEMON not provided, building with ${DAEMON}"
agsantos5aa39652020-08-11 18:18:04 -040017fi
agsantos796b5af2020-12-22 19:38:27 -050018if [ -z "${PROCESSOR}" ]; then
19 PROCESSOR="CPU"
20 echo "PROCESSOR not provided, building with ${PROCESSOR}"
21fi
agsantos5aa39652020-08-11 18:18:04 -040022
23PLUGIN_NAME="GreenScreen"
agsantosac1940d2020-09-17 10:18:40 -040024JPL_FILE_NAME="${PLUGIN_NAME}.jpl"
25SO_FILE_NAME="lib${PLUGIN_NAME}.so"
agsantos5aa39652020-08-11 18:18:04 -040026DAEMON_SRC="${DAEMON}/src"
27CONTRIB_PATH="${DAEMON}/contrib"
agsantos5aa39652020-08-11 18:18:04 -040028PLUGINS_LIB="../lib"
agsantosac1940d2020-09-17 10:18:40 -040029LIBS_DIR="./../contrib/Libs"
agsantos2c8525e2021-03-19 11:18:01 -040030PREFERENCESFILENAME="preferences"
agsantos1bbc7cc2021-05-20 16:43:35 -040031PLATFORM=$(uname)
32
33if [ "${PLATFORM}" = "Linux" ]; then
34 PLATFORM="linux-gnu"
35 CONTRIB_PLATFORM_CURT=${ARCH}
36 echo "Building with ${PLATFORM}"
37elif [ "${PLATFORM}" = "Darwin" ]; then
38 PLATFORM="darwin"
39 SO_FILE_NAME="lib${PLUGIN_NAME}.dylib"
40 alias nproc='sysctl -n hw.logicalcpu'
41 CONTRIB_PLATFORM_CURT=${ARCH}-apple
42 CONTRIB_PLATFORM_EXTRA=$(uname -r)
43 echo "Building with ${PLATFORM}"
44fi
agsantosac1940d2020-09-17 10:18:40 -040045
agsantos796b5af2020-12-22 19:38:27 -050046if [ "${PROCESSOR}" = "CPU" ]; then
47 ONNX_LIBS="cpu"
48elif [ "${PROCESSOR}" = "NVIDIA" ]; then
49 ONNX_LIBS="nvidia-gpu"
50 CUBLASLT="-lcublasLt"
agsantos2c8525e2021-03-19 11:18:01 -040051 PREFERENCESFILENAME="${PREFERENCESFILENAME}-accel"
agsantosac1940d2020-09-17 10:18:40 -040052fi
agsantosac1940d2020-09-17 10:18:40 -040053
Aline Gondim Santos506a6932022-08-25 18:42:32 -030054while getopts t:c:p:d OPT; do
agsantosac1940d2020-09-17 10:18:40 -040055 case "$OPT" in
Aline Gondim Santos506a6932022-08-25 18:42:32 -030056 d)
57 DEBUG=true
58 export __DEBUG__=true
59 ;;
agsantosac1940d2020-09-17 10:18:40 -040060 t)
61 PLATFORM="${OPTARG}"
agsantos796b5af2020-12-22 19:38:27 -050062 if [ ${PLATFORM} = "android" ]; then
63 ONNX_LIBS=""
agsantosac1940d2020-09-17 10:18:40 -040064 fi
65 ;;
66 c)
agsantosac1940d2020-09-17 10:18:40 -040067 ;;
68 p)
69 ;;
70 \?)
71 exit 1
72 ;;
73 esac
74done
agsantos5aa39652020-08-11 18:18:04 -040075
agsantosdd6a62a2021-03-29 17:13:27 -040076cp -r ffmpeg ${CONTRIB_PATH}/src/
Aline Gondim Santos506a6932022-08-25 18:42:32 -030077cp -r ../contrib/rav1e ${CONTRIB_PATH}/src/
agsantosdd6a62a2021-03-29 17:13:27 -040078
agsantos1bbc7cc2021-05-20 16:43:35 -040079if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ]
agsantosac1940d2020-09-17 10:18:40 -040080then
agsantosdd6a62a2021-03-29 17:13:27 -040081 if [ -f "${CONTRIB_PATH}/native/.ffmpeg" ]; then
82 rm "${CONTRIB_PATH}/native/.ffmpeg"
83 fi
84 WORKPATH=$(pwd)
85 cd "${CONTRIB_PATH}/native/"
86 make .ffmpeg -j$(nproc)
87 rm .ffmpeg
88 cd ${WORKPATH}
agsantos1bbc7cc2021-05-20 16:43:35 -040089
agsantosac1940d2020-09-17 10:18:40 -040090 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
agsantos796b5af2020-12-22 19:38:27 -050091 ONNX_PATH=${EXTRALIBS_PATH}
92 if [ -z "${EXTRALIBS_PATH}" ]
93 then
94 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
95 fi
agsantosac1940d2020-09-17 10:18:40 -040096
Aline Gondim Santos506a6932022-08-25 18:42:32 -030097 if [ ${DEBUG} ]; then
98 OUTPUT="${PLUGIN_NAME}"
99 CLANG_OPTS="-g -fsanitize=address"
100 EXTRA_DEBUG_LIBRARIES="-lyaml-cpp -lvdpau -lX11 -lva-drm -lva-x11 -lrav1e"
101 EXTRA_DEFINES="-D__DEBUG__"
102 else
103 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
104 CLANG_OPTS="-O3 -shared"
105 OUTPUT="build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
106 fi
107
agsantosac1940d2020-09-17 10:18:40 -0400108 # Compile
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300109 clang++ -std=c++17 -fPIC ${CLANG_OPTS} \
agsantosac1940d2020-09-17 10:18:40 -0400110 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
111 -Wall -Wextra \
agsantosac1940d2020-09-17 10:18:40 -0400112 -Wno-unused-parameter \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300113 ${EXTRA_DEFINES} \
agsantos796b5af2020-12-22 19:38:27 -0500114 -D${PROCESSOR} \
agsantosac1940d2020-09-17 10:18:40 -0400115 -I"." \
116 -I"${DAEMON_SRC}" \
117 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
118 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -0500119 -I"${ONNX_PATH}/include/onnxruntime/session" \
120 -I"${ONNX_PATH}/include/onnxruntime/providers/cuda" \
agsantosac1940d2020-09-17 10:18:40 -0400121 -I"${PLUGINS_LIB}" \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300122 ./../lib/common.cpp \
agsantos1e7736c2020-10-28 14:39:13 -0400123 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500124 ./../lib/frameUtils.cpp \
agsantosdd6a62a2021-03-29 17:13:27 -0400125 ./../lib/frameFilter.cpp \
agsantosac1940d2020-09-17 10:18:40 -0400126 main.cpp \
127 videoSubscriber.cpp \
agsantosac1940d2020-09-17 10:18:40 -0400128 pluginMediaHandler.cpp \
agsantos796b5af2020-12-22 19:38:27 -0500129 pluginProcessor.cpp \
agsantosac1940d2020-09-17 10:18:40 -0400130 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
131 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/opencv4/3rdparty/" \
agsantos796b5af2020-12-22 19:38:27 -0500132 -L"${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}" \
133 -L"${CUDA_HOME}/lib64/" \
agsantosdd6a62a2021-03-29 17:13:27 -0400134 -l:libavfilter.a \
agsantosf7e04bd2020-10-14 15:59:47 -0400135 -l:libswscale.a \
agsantosdd6a62a2021-03-29 17:13:27 -0400136 -l:libavformat.a \
137 -l:libavcodec.a \
agsantosf7e04bd2020-10-14 15:59:47 -0400138 -l:libavutil.a \
agsantosdd6a62a2021-03-29 17:13:27 -0400139 -l:libvpx.a \
140 -l:libx264.a \
agsantosac1940d2020-09-17 10:18:40 -0400141 -lopencv_imgproc \
142 -lopencv_core \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300143 -lvpx \
144 -lx264 \
145 -lspeex \
146 -lopus \
147 -lz \
148 -lva \
149 ${CUBLASLT} -lonnxruntime \
150 ${EXTRA_DEBUG_LIBRARIES} \
151 -o "${OUTPUT}"
agsantosac1940d2020-09-17 10:18:40 -0400152
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300153 if [ ${DEBUG} ]; then
154 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.so" "libonnxruntime.so.1.6.0"
155 mkdir -p "./data/model"
156 cp "./modelSRC/mModel.onnx" "./data/model/mModel.onnx"
157 else
158 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libonnxruntime.so.1.6.0"
159 mkdir -p "./build-local/jpl/data/model"
160 cp "./modelSRC/mModel.onnx" "./build-local/jpl/data/model/mModel.onnx"
161 cp "./${PREFERENCESFILENAME}.json" "./build-local/jpl/data/preferences.json"
162 fi
agsantos796b5af2020-12-22 19:38:27 -0500163 if [ "${PROCESSOR}" = "NVIDIA" ]
agsantosac1940d2020-09-17 10:18:40 -0400164 then
agsantos796b5af2020-12-22 19:38:27 -0500165 cp "${CUDA_HOME}/lib64/libcudart.so.10.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudart.so.10.2"
166 cp "${CUDA_HOME}/lib64/libcublas.so.10.2.3.254" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublas.so.10"
167 cp "${CUDA_HOME}/lib64/libcufft.so.10.1.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcufft.so.10"
168 cp "${CUDA_HOME}/lib64/libcurand.so.10.1.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcurand.so.10"
169 cp "${CUDA_HOME}/lib64/libcublasLt.so.10.2.3.254" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublasLt.so.10"
170 cp "${CUDNN_HOME}/libcudnn.so.8" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudnn.so.8"
171 cp "${CUDNN_HOME}/libcudnn_ops_infer.so.8" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudnn_ops_infer.so.8"
172 fi
agsantos1e7736c2020-10-28 14:39:13 -0400173
agsantos1bbc7cc2021-05-20 16:43:35 -0400174elif [ "${PLATFORM}" = "darwin" ]
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300175then
agsantos1bbc7cc2021-05-20 16:43:35 -0400176 if [ -f "${CONTRIB_PATH}/native/.ffmpeg" ]; then
177 rm "${CONTRIB_PATH}/native/.ffmpeg"
178 fi
179 WORKPATH=$(pwd)
180 cd "${CONTRIB_PATH}/native/"
181 make .ffmpeg -j$(nproc)
182 rm .ffmpeg
183 cd ${WORKPATH}
184
agsantos1bbc7cc2021-05-20 16:43:35 -0400185 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
186 ONNX_PATH=${EXTRALIBS_PATH}
187 if [ -z "${EXTRALIBS_PATH}" ]
188 then
189 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}"
190 fi
191
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300192 if [ ${DEBUG} ]; then
193 OUTPUT="${PLUGIN_NAME}"
194 CLANG_OPTS="-g -fsanitize=address"
195 EXTRA_DEBUG_LIBRARIES="-lyaml-cpp -lrav1e"
196 EXTRA_DEFINES="-D__DEBUG__"
197 else
198 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
199 CLANG_OPTS="-O3 -shared"
200 OUTPUT="build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
201 fi
202
agsantos1bbc7cc2021-05-20 16:43:35 -0400203 # Compile
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300204 clang++ -std=c++17 -fPIC ${CLANG_OPTS} \
agsantos1bbc7cc2021-05-20 16:43:35 -0400205 -Wl,-no_compact_unwind -Wl,-framework,CoreFoundation \
206 -Wl,-framework,Security -Wl,-framework,VideoToolbox \
207 -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo \
208 -Wl,-framework,OpenCl -Wl,-framework,Accelerate \
209 -Wl,-rpath,"\${ORIGIN}" \
210 -Wall -Wextra \
agsantos1bbc7cc2021-05-20 16:43:35 -0400211 -Wno-unused-parameter \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300212 ${EXTRA_DEFINES} \
agsantos1bbc7cc2021-05-20 16:43:35 -0400213 -D${PROCESSOR} \
214 -I"." \
215 -I"${DAEMON_SRC}" \
216 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/include" \
217 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/include/opencv4" \
218 -I"${ONNX_PATH}/include/onnxruntime/session" \
219 -I"${PLUGINS_LIB}" \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300220 ./../lib/common.cpp \
agsantos1bbc7cc2021-05-20 16:43:35 -0400221 ./../lib/accel.cpp \
222 ./../lib/frameUtils.cpp \
223 ./../lib/frameFilter.cpp \
224 main.cpp \
225 videoSubscriber.cpp \
226 pluginMediaHandler.cpp \
227 pluginProcessor.cpp \
228 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/lib/" \
229 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/lib/opencv4/3rdparty/" \
230 -L"${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}" \
231 -lavfilter \
232 -lswscale \
233 -lavformat \
234 -lavcodec \
235 -lavutil \
236 -lvpx -lx264 -lbz2 -liconv -lz \
237 -lopencv_imgproc \
238 -lopencv_core \
239 -lonnxruntime \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300240 -lspeex \
241 -lopus \
242 ${EXTRA_DEBUG_LIBRARIES} \
243 -o "${OUTPUT}"
agsantos1bbc7cc2021-05-20 16:43:35 -0400244
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300245 if [ ${DEBUG} ]; then
246 mkdir -p "./data/model"
247 cp "./modelSRC/mModel.onnx" "./data/model/mModel.onnx"
248 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.dylib" "libonnxruntime.dylib"
249 install_name_tool -id "@loader_path/libonnxruntime.1.6.0.dylib" "libonnxruntime.dylib"
250 install_name_tool -id "@loader_path/${PLUGIN_NAME}" "${OUTPUT}"
251 else
252 mkdir -p "./build-local/jpl/data/model"
253 cp "./modelSRC/mModel.onnx" "./build-local/jpl/data/model/mModel.onnx"
254 cp "./${PREFERENCESFILENAME}.json" "./build-local/jpl/data/preferences.json"
255 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.dylib" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
256 install_name_tool -id "@loader_path/libonnxruntime.1.6.0.dylib" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
257 install_name_tool -id "@loader_path/${SO_FILE_NAME}" "${OUTPUT}"
258 fi
259 install_name_tool -change "@rpath/libonnxruntime.1.6.0.dylib" "@loader_path/libonnxruntime.dylib" "${OUTPUT}"
agsantos1bbc7cc2021-05-20 16:43:35 -0400260
261 if [ -n "${APPLE_SIGN_CERTIFICATE}" ]; then
262 codesign --force --verify --timestamp -o runtime --sign "${APPLE_SIGN_CERTIFICATE}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
263 codesign --force --verify --timestamp -o runtime --sign "${APPLE_SIGN_CERTIFICATE}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
264 ditto -c -k --rsrc "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib" "build-local/libonnxruntime.dylib.zip"
265 LIBRARYNAME=libonnxruntime.dylib sh ./../notarize.sh
266 ditto -x -k "build-local/libonnxruntime.dylib.zip" "build-local/notarized0"
267 cp "build-local/notarized0/libonnxruntime.dylib" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
268
269 ditto -c -k --rsrc "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}" "build-local/${SO_FILE_NAME}.zip"
270 LIBRARYNAME=${SO_FILE_NAME} sh ./../notarize.sh
271 ditto -x -k "build-local/${SO_FILE_NAME}.zip" "build-local/notarized1"
272 cp "build-local/notarized1/${SO_FILE_NAME}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
273 fi
274
agsantos796b5af2020-12-22 19:38:27 -0500275elif [ "${PLATFORM}" = "android" ]
276then
277 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
278
279 if [ -z "$ANDROID_NDK" ]; then
280 ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
281 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
282 fi
283
284 #=========================================================
285 # Check if the ANDROID_ABI was provided
286 # if not, set default
287 #=========================================================
288 if [ -z "$ANDROID_ABI" ]; then
289 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
290 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
291 fi
292
293 buildlib() {
294 echo "$CURRENT_ABI"
295
296 #=========================================================
297 # ANDROID TOOLS
298 #=========================================================
299 export HOST_TAG=linux-x86_64
300 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
Aline Gondim Santos4c3f0662022-10-12 13:11:34 -0300301 export AR=$TOOLCHAIN/bin/llvm-ar
302 export AS=$TOOLCHAIN/bin/llvm-as
303 export LD=$TOOLCHAIN/bin/ld
304 export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
305 export STRIP=$TOOLCHAIN/bin/llvm-strip
306 export ANDROID_SYSROOT=$TOOLCHAIN/sysroot
agsantos796b5af2020-12-22 19:38:27 -0500307
308 if [ "$CURRENT_ABI" = armeabi-v7a ]
309 then
agsantos796b5af2020-12-22 19:38:27 -0500310 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
311 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
agsantos796b5af2020-12-22 19:38:27 -0500312
313 elif [ "$CURRENT_ABI" = arm64-v8a ]
314 then
agsantos796b5af2020-12-22 19:38:27 -0500315 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
316 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
agsantos796b5af2020-12-22 19:38:27 -0500317
318 elif [ "$CURRENT_ABI" = x86_64 ]
319 then
agsantos796b5af2020-12-22 19:38:27 -0500320 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
321 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
agsantos796b5af2020-12-22 19:38:27 -0500322
323 else
324 echo "ABI NOT OK" >&2
325 exit 1
326 fi
327
328 #=========================================================
329 # CONTRIBS
330 #=========================================================
331 if [ "$CURRENT_ABI" = armeabi-v7a ]
332 then
333 CONTRIB_PLATFORM=arm-linux-androideabi
334
335 elif [ "$CURRENT_ABI" = arm64-v8a ]
336 then
337 CONTRIB_PLATFORM=aarch64-linux-android
338
339 elif [ "$CURRENT_ABI" = x86_64 ]
340 then
341 CONTRIB_PLATFORM=x86_64-linux-android
342 fi
343
344 #NDK SOURCES FOR cpufeatures
345 NDK_SOURCES=${ANDROID_NDK}/sources/android
346
agsantosdd6a62a2021-03-29 17:13:27 -0400347 if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then
348 rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg"
349 fi
350
351 WORKPATH=$(pwd)
352 cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/"
353 make .ffmpeg -j$(nproc)
354 rm .ffmpeg
355 cd ${WORKPATH}
356
agsantos796b5af2020-12-22 19:38:27 -0500357 #=========================================================
358 # Compile CPU FEATURES, NEEDED FOR OPENCV
359 #=========================================================
360 $CC -c "$NDK_SOURCES/cpufeatures/cpu-features.c" -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
361
362 #=========================================================
363 # Compile the plugin
364 #=========================================================
365
366 ONNX_PATH="${EXTRALIBS_PATH}/${CURRENT_ABI}"
367 if [ -z ${EXTRALIBS_PATH} ]
368 then
369 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
370 fi
371
372 # Create so destination folder
Aline Gondim Santos4c3f0662022-10-12 13:11:34 -0300373 $CXX --std=c++17 -O3 -fPIC \
agsantosac1940d2020-09-17 10:18:40 -0400374 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
agsantos796b5af2020-12-22 19:38:27 -0500375 -shared \
agsantosac1940d2020-09-17 10:18:40 -0400376 -Wall -Wextra \
agsantosac1940d2020-09-17 10:18:40 -0400377 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -0500378 -DANDROID \
agsantosac1940d2020-09-17 10:18:40 -0400379 -I"." \
380 -I"${DAEMON_SRC}" \
381 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
382 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -0500383 -I"${ONNX_PATH}/include/onnxruntime/session" \
384 -I"${ONNX_PATH}/include/onnxruntime/providers/nnapi" \
385 -I"${ONNX_PATH}/../include/onnxruntime/session" \
386 -I"${ONNX_PATH}/../include/onnxruntime/providers/nnapi" \
agsantosac1940d2020-09-17 10:18:40 -0400387 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -0400388 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500389 ./../lib/frameUtils.cpp \
agsantosdd6a62a2021-03-29 17:13:27 -0400390 ./../lib/frameFilter.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500391 main.cpp \
agsantos796b5af2020-12-22 19:38:27 -0500392 videoSubscriber.cpp \
393 pluginMediaHandler.cpp \
394 pluginProcessor.cpp \
395 cpu-features.o \
agsantosac1940d2020-09-17 10:18:40 -0400396 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
agsantos796b5af2020-12-22 19:38:27 -0500397 -L"${ONNX_PATH}/lib/" \
agsantosdd6a62a2021-03-29 17:13:27 -0400398 -lavfilter \
agsantos796b5af2020-12-22 19:38:27 -0500399 -lswscale \
agsantosdd6a62a2021-03-29 17:13:27 -0400400 -lavformat \
401 -lavcodec \
agsantos796b5af2020-12-22 19:38:27 -0500402 -lavutil \
agsantosdd6a62a2021-03-29 17:13:27 -0400403 -lvpx \
404 -lx264 \
405 -lspeex \
406 -lopus \
407 -liconv \
agsantosac1940d2020-09-17 10:18:40 -0400408 -lopencv_imgproc \
409 -lopencv_core \
agsantos796b5af2020-12-22 19:38:27 -0500410 -llog -lz \
411 -lonnxruntime \
412 --sysroot=$ANDROID_SYSROOT \
413 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400414
agsantos796b5af2020-12-22 19:38:27 -0500415 rm cpu-features.o
416 cp "${ONNX_PATH}/lib/libonnxruntime.so" "build-local/jpl/lib/${CURRENT_ABI}/libonnxruntime.so"
417 }
agsantosac1940d2020-09-17 10:18:40 -0400418
agsantos796b5af2020-12-22 19:38:27 -0500419 # Build the so
420 for i in ${ANDROID_ABI}; do
421 CURRENT_ABI=$i
422 buildlib
423 done
agsantosac1940d2020-09-17 10:18:40 -0400424
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300425 mkdir -p "./build-local/jpl/data/model"
agsantos796b5af2020-12-22 19:38:27 -0500426 cp "./modelSRC/mModel.ort" "./build-local/jpl/data/model/mModel.ort"
agsantos2c8525e2021-03-19 11:18:01 -0400427 cp "./${PREFERENCESFILENAME}-accel.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400428fi
agsantos5aa39652020-08-11 18:18:04 -0400429
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300430if [ ! ${DEBUG} ]; then
431 python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${ONNX_LIBS}
432fi
agsantosdd6a62a2021-03-29 17:13:27 -0400433cd ${CONTRIB_PATH}/src/ffmpeg/
434# ffmpeg build configuration files were changed during plugin build
435# this git checkout will remove these changes
436git checkout -- .