blob: ec593f97c3f2a2aa90872a91916637521243c91c [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 \
agsantosac1940d2020-09-17 10:18:40 -0400139 -lopencv_imgproc \
140 -lopencv_core \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300141 -lvpx \
142 -lx264 \
143 -lspeex \
144 -lopus \
145 -lz \
146 -lva \
147 ${CUBLASLT} -lonnxruntime \
148 ${EXTRA_DEBUG_LIBRARIES} \
149 -o "${OUTPUT}"
agsantosac1940d2020-09-17 10:18:40 -0400150
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300151 if [ ${DEBUG} ]; then
Aline Gondim Santos55259e92022-07-25 10:48:14 -0300152 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.so" "libonnxruntime.so.1.12.0"
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300153 mkdir -p "./data/model"
154 cp "./modelSRC/mModel.onnx" "./data/model/mModel.onnx"
155 else
Aline Gondim Santos55259e92022-07-25 10:48:14 -0300156 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libonnxruntime.so.1.12.0"
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300157 mkdir -p "./build-local/jpl/data/model"
158 cp "./modelSRC/mModel.onnx" "./build-local/jpl/data/model/mModel.onnx"
159 cp "./${PREFERENCESFILENAME}.json" "./build-local/jpl/data/preferences.json"
160 fi
agsantos796b5af2020-12-22 19:38:27 -0500161 if [ "${PROCESSOR}" = "NVIDIA" ]
agsantosac1940d2020-09-17 10:18:40 -0400162 then
Aline Gondim Santos55259e92022-07-25 10:48:14 -0300163 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime_providers_shared.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libonnxruntime_providers_shared.so"
164 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime_providers_cuda.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libonnxruntime_providers_cuda.so"
agsantos796b5af2020-12-22 19:38:27 -0500165 fi
agsantos1e7736c2020-10-28 14:39:13 -0400166
agsantos1bbc7cc2021-05-20 16:43:35 -0400167elif [ "${PLATFORM}" = "darwin" ]
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300168then
agsantos1bbc7cc2021-05-20 16:43:35 -0400169 if [ -f "${CONTRIB_PATH}/native/.ffmpeg" ]; then
170 rm "${CONTRIB_PATH}/native/.ffmpeg"
171 fi
172 WORKPATH=$(pwd)
173 cd "${CONTRIB_PATH}/native/"
174 make .ffmpeg -j$(nproc)
175 rm .ffmpeg
176 cd ${WORKPATH}
177
agsantos1bbc7cc2021-05-20 16:43:35 -0400178 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
179 ONNX_PATH=${EXTRALIBS_PATH}
180 if [ -z "${EXTRALIBS_PATH}" ]
181 then
182 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}"
183 fi
184
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300185 if [ ${DEBUG} ]; then
186 OUTPUT="${PLUGIN_NAME}"
187 CLANG_OPTS="-g -fsanitize=address"
188 EXTRA_DEBUG_LIBRARIES="-lyaml-cpp -lrav1e"
189 EXTRA_DEFINES="-D__DEBUG__"
190 else
191 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
192 CLANG_OPTS="-O3 -shared"
193 OUTPUT="build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
194 fi
195
agsantos1bbc7cc2021-05-20 16:43:35 -0400196 # Compile
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300197 clang++ -std=c++17 -fPIC ${CLANG_OPTS} \
agsantos1bbc7cc2021-05-20 16:43:35 -0400198 -Wl,-no_compact_unwind -Wl,-framework,CoreFoundation \
199 -Wl,-framework,Security -Wl,-framework,VideoToolbox \
200 -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo \
201 -Wl,-framework,OpenCl -Wl,-framework,Accelerate \
202 -Wl,-rpath,"\${ORIGIN}" \
203 -Wall -Wextra \
agsantos1bbc7cc2021-05-20 16:43:35 -0400204 -Wno-unused-parameter \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300205 ${EXTRA_DEFINES} \
agsantos1bbc7cc2021-05-20 16:43:35 -0400206 -D${PROCESSOR} \
207 -I"." \
208 -I"${DAEMON_SRC}" \
209 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/include" \
210 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/include/opencv4" \
211 -I"${ONNX_PATH}/include/onnxruntime/session" \
212 -I"${PLUGINS_LIB}" \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300213 ./../lib/common.cpp \
agsantos1bbc7cc2021-05-20 16:43:35 -0400214 ./../lib/accel.cpp \
215 ./../lib/frameUtils.cpp \
216 ./../lib/frameFilter.cpp \
217 main.cpp \
218 videoSubscriber.cpp \
219 pluginMediaHandler.cpp \
220 pluginProcessor.cpp \
221 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/lib/" \
222 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/lib/opencv4/3rdparty/" \
223 -L"${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}" \
224 -lavfilter \
225 -lswscale \
226 -lavformat \
227 -lavcodec \
228 -lavutil \
229 -lvpx -lx264 -lbz2 -liconv -lz \
230 -lopencv_imgproc \
231 -lopencv_core \
232 -lonnxruntime \
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300233 -lspeex \
234 -lopus \
235 ${EXTRA_DEBUG_LIBRARIES} \
236 -o "${OUTPUT}"
agsantos1bbc7cc2021-05-20 16:43:35 -0400237
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300238 if [ ${DEBUG} ]; then
239 mkdir -p "./data/model"
240 cp "./modelSRC/mModel.onnx" "./data/model/mModel.onnx"
241 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.dylib" "libonnxruntime.dylib"
Aline Gondim Santos55259e92022-07-25 10:48:14 -0300242 install_name_tool -id "@loader_path/libonnxruntime.1.12.0.dylib" "libonnxruntime.dylib"
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300243 install_name_tool -id "@loader_path/${PLUGIN_NAME}" "${OUTPUT}"
244 else
245 mkdir -p "./build-local/jpl/data/model"
246 cp "./modelSRC/mModel.onnx" "./build-local/jpl/data/model/mModel.onnx"
247 cp "./${PREFERENCESFILENAME}.json" "./build-local/jpl/data/preferences.json"
248 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.dylib" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
Aline Gondim Santos55259e92022-07-25 10:48:14 -0300249 install_name_tool -id "@loader_path/libonnxruntime.1.12.0.dylib" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300250 install_name_tool -id "@loader_path/${SO_FILE_NAME}" "${OUTPUT}"
251 fi
Aline Gondim Santos55259e92022-07-25 10:48:14 -0300252 install_name_tool -change "@rpath/libonnxruntime.1.12.0.dylib" "@loader_path/libonnxruntime.dylib" "${OUTPUT}"
agsantos1bbc7cc2021-05-20 16:43:35 -0400253
254 if [ -n "${APPLE_SIGN_CERTIFICATE}" ]; then
255 codesign --force --verify --timestamp -o runtime --sign "${APPLE_SIGN_CERTIFICATE}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
256 codesign --force --verify --timestamp -o runtime --sign "${APPLE_SIGN_CERTIFICATE}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
257 ditto -c -k --rsrc "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib" "build-local/libonnxruntime.dylib.zip"
258 LIBRARYNAME=libonnxruntime.dylib sh ./../notarize.sh
259 ditto -x -k "build-local/libonnxruntime.dylib.zip" "build-local/notarized0"
260 cp "build-local/notarized0/libonnxruntime.dylib" "build-local/jpl/lib/${CONTRIB_PLATFORM}/libonnxruntime.dylib"
261
262 ditto -c -k --rsrc "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}" "build-local/${SO_FILE_NAME}.zip"
263 LIBRARYNAME=${SO_FILE_NAME} sh ./../notarize.sh
264 ditto -x -k "build-local/${SO_FILE_NAME}.zip" "build-local/notarized1"
265 cp "build-local/notarized1/${SO_FILE_NAME}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
266 fi
267
agsantos796b5af2020-12-22 19:38:27 -0500268elif [ "${PLATFORM}" = "android" ]
269then
270 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
271
272 if [ -z "$ANDROID_NDK" ]; then
273 ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
274 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
275 fi
276
277 #=========================================================
278 # Check if the ANDROID_ABI was provided
279 # if not, set default
280 #=========================================================
281 if [ -z "$ANDROID_ABI" ]; then
282 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
283 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
284 fi
285
286 buildlib() {
287 echo "$CURRENT_ABI"
288
289 #=========================================================
290 # ANDROID TOOLS
291 #=========================================================
292 export HOST_TAG=linux-x86_64
293 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
Aline Gondim Santos4c3f0662022-10-12 13:11:34 -0300294 export AR=$TOOLCHAIN/bin/llvm-ar
295 export AS=$TOOLCHAIN/bin/llvm-as
296 export LD=$TOOLCHAIN/bin/ld
297 export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
298 export STRIP=$TOOLCHAIN/bin/llvm-strip
299 export ANDROID_SYSROOT=$TOOLCHAIN/sysroot
agsantos796b5af2020-12-22 19:38:27 -0500300
301 if [ "$CURRENT_ABI" = armeabi-v7a ]
302 then
agsantos796b5af2020-12-22 19:38:27 -0500303 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
304 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
agsantos796b5af2020-12-22 19:38:27 -0500305
306 elif [ "$CURRENT_ABI" = arm64-v8a ]
307 then
agsantos796b5af2020-12-22 19:38:27 -0500308 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
309 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
agsantos796b5af2020-12-22 19:38:27 -0500310
311 elif [ "$CURRENT_ABI" = x86_64 ]
312 then
agsantos796b5af2020-12-22 19:38:27 -0500313 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
314 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
agsantos796b5af2020-12-22 19:38:27 -0500315
316 else
317 echo "ABI NOT OK" >&2
318 exit 1
319 fi
320
321 #=========================================================
322 # CONTRIBS
323 #=========================================================
324 if [ "$CURRENT_ABI" = armeabi-v7a ]
325 then
326 CONTRIB_PLATFORM=arm-linux-androideabi
327
328 elif [ "$CURRENT_ABI" = arm64-v8a ]
329 then
330 CONTRIB_PLATFORM=aarch64-linux-android
331
332 elif [ "$CURRENT_ABI" = x86_64 ]
333 then
334 CONTRIB_PLATFORM=x86_64-linux-android
335 fi
336
337 #NDK SOURCES FOR cpufeatures
338 NDK_SOURCES=${ANDROID_NDK}/sources/android
339
agsantosdd6a62a2021-03-29 17:13:27 -0400340 if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then
341 rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg"
342 fi
343
344 WORKPATH=$(pwd)
345 cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/"
346 make .ffmpeg -j$(nproc)
347 rm .ffmpeg
348 cd ${WORKPATH}
349
agsantos796b5af2020-12-22 19:38:27 -0500350 #=========================================================
351 # Compile CPU FEATURES, NEEDED FOR OPENCV
352 #=========================================================
353 $CC -c "$NDK_SOURCES/cpufeatures/cpu-features.c" -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
354
355 #=========================================================
356 # Compile the plugin
357 #=========================================================
358
359 ONNX_PATH="${EXTRALIBS_PATH}/${CURRENT_ABI}"
360 if [ -z ${EXTRALIBS_PATH} ]
361 then
362 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
363 fi
364
365 # Create so destination folder
Aline Gondim Santos4c3f0662022-10-12 13:11:34 -0300366 $CXX --std=c++17 -O3 -fPIC \
agsantosac1940d2020-09-17 10:18:40 -0400367 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
agsantos796b5af2020-12-22 19:38:27 -0500368 -shared \
agsantosac1940d2020-09-17 10:18:40 -0400369 -Wall -Wextra \
agsantosac1940d2020-09-17 10:18:40 -0400370 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -0500371 -DANDROID \
agsantosac1940d2020-09-17 10:18:40 -0400372 -I"." \
373 -I"${DAEMON_SRC}" \
374 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
375 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -0500376 -I"${ONNX_PATH}/include/onnxruntime/session" \
377 -I"${ONNX_PATH}/include/onnxruntime/providers/nnapi" \
378 -I"${ONNX_PATH}/../include/onnxruntime/session" \
379 -I"${ONNX_PATH}/../include/onnxruntime/providers/nnapi" \
agsantosac1940d2020-09-17 10:18:40 -0400380 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -0400381 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500382 ./../lib/frameUtils.cpp \
agsantosdd6a62a2021-03-29 17:13:27 -0400383 ./../lib/frameFilter.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500384 main.cpp \
agsantos796b5af2020-12-22 19:38:27 -0500385 videoSubscriber.cpp \
386 pluginMediaHandler.cpp \
387 pluginProcessor.cpp \
388 cpu-features.o \
agsantosac1940d2020-09-17 10:18:40 -0400389 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
agsantos796b5af2020-12-22 19:38:27 -0500390 -L"${ONNX_PATH}/lib/" \
agsantosdd6a62a2021-03-29 17:13:27 -0400391 -lavfilter \
agsantos796b5af2020-12-22 19:38:27 -0500392 -lswscale \
agsantosdd6a62a2021-03-29 17:13:27 -0400393 -lavformat \
394 -lavcodec \
agsantos796b5af2020-12-22 19:38:27 -0500395 -lavutil \
agsantosdd6a62a2021-03-29 17:13:27 -0400396 -lvpx \
397 -lx264 \
398 -lspeex \
399 -lopus \
400 -liconv \
agsantosac1940d2020-09-17 10:18:40 -0400401 -lopencv_imgproc \
402 -lopencv_core \
agsantos796b5af2020-12-22 19:38:27 -0500403 -llog -lz \
404 -lonnxruntime \
405 --sysroot=$ANDROID_SYSROOT \
406 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400407
agsantos796b5af2020-12-22 19:38:27 -0500408 rm cpu-features.o
409 cp "${ONNX_PATH}/lib/libonnxruntime.so" "build-local/jpl/lib/${CURRENT_ABI}/libonnxruntime.so"
410 }
agsantosac1940d2020-09-17 10:18:40 -0400411
agsantos796b5af2020-12-22 19:38:27 -0500412 # Build the so
413 for i in ${ANDROID_ABI}; do
414 CURRENT_ABI=$i
415 buildlib
416 done
agsantosac1940d2020-09-17 10:18:40 -0400417
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300418 mkdir -p "./build-local/jpl/data/model"
agsantos796b5af2020-12-22 19:38:27 -0500419 cp "./modelSRC/mModel.ort" "./build-local/jpl/data/model/mModel.ort"
agsantos2c8525e2021-03-19 11:18:01 -0400420 cp "./${PREFERENCESFILENAME}-accel.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400421fi
agsantos5aa39652020-08-11 18:18:04 -0400422
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300423if [ ! ${DEBUG} ]; then
424 python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${ONNX_LIBS}
425fi
agsantosdd6a62a2021-03-29 17:13:27 -0400426cd ${CONTRIB_PATH}/src/ffmpeg/
427# ffmpeg build configuration files were changed during plugin build
428# this git checkout will remove these changes
429git checkout -- .