blob: 725334de970fc57444b8ad7ff21681e78c3454e6 [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
301
302 if [ "$CURRENT_ABI" = armeabi-v7a ]
303 then
agsantos7ad7a3a2021-01-19 12:57:54 -0500304 export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
305 export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
agsantos796b5af2020-12-22 19:38:27 -0500306 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
307 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
agsantos7ad7a3a2021-01-19 12:57:54 -0500308 export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
309 export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
agsantos796b5af2020-12-22 19:38:27 -0500310 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
311 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
312
313 elif [ "$CURRENT_ABI" = arm64-v8a ]
314 then
315 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
316 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
317 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
318 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
319 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
320 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
321 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
322 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm64/sysroot
323
324 elif [ "$CURRENT_ABI" = x86_64 ]
325 then
326 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
327 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
328 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
329 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
330 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
331 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
332 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
333 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-x86_64/sysroot
334
335 else
336 echo "ABI NOT OK" >&2
337 exit 1
338 fi
339
340 #=========================================================
341 # CONTRIBS
342 #=========================================================
343 if [ "$CURRENT_ABI" = armeabi-v7a ]
344 then
345 CONTRIB_PLATFORM=arm-linux-androideabi
346
347 elif [ "$CURRENT_ABI" = arm64-v8a ]
348 then
349 CONTRIB_PLATFORM=aarch64-linux-android
350
351 elif [ "$CURRENT_ABI" = x86_64 ]
352 then
353 CONTRIB_PLATFORM=x86_64-linux-android
354 fi
355
356 #NDK SOURCES FOR cpufeatures
357 NDK_SOURCES=${ANDROID_NDK}/sources/android
358
359 #=========================================================
360 # LD_FLAGS
361 #=========================================================
362 if [ "$CURRENT_ABI" = armeabi-v7a ]
363 then
364 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
365 elif [ "$CURRENT_ABI" = arm64-v8a ]
366 then
367 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
368 elif [ "$CURRENT_ABI" = x86_64 ]
369 then
370 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
371 fi
372
agsantosdd6a62a2021-03-29 17:13:27 -0400373 if [ -f "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg" ]; then
374 rm "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/.ffmpeg"
375 fi
376
377 WORKPATH=$(pwd)
378 cd "${CONTRIB_PATH}/native-${CONTRIB_PLATFORM}/"
379 make .ffmpeg -j$(nproc)
380 rm .ffmpeg
381 cd ${WORKPATH}
382
agsantos796b5af2020-12-22 19:38:27 -0500383 #=========================================================
384 # Compile CPU FEATURES, NEEDED FOR OPENCV
385 #=========================================================
386 $CC -c "$NDK_SOURCES/cpufeatures/cpu-features.c" -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
387
388 #=========================================================
389 # Compile the plugin
390 #=========================================================
391
392 ONNX_PATH="${EXTRALIBS_PATH}/${CURRENT_ABI}"
393 if [ -z ${EXTRALIBS_PATH} ]
394 then
395 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
396 fi
397
398 # Create so destination folder
399 $CXX --std=c++17 -O3 -g -fPIC \
agsantosac1940d2020-09-17 10:18:40 -0400400 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
agsantos796b5af2020-12-22 19:38:27 -0500401 -shared \
agsantosac1940d2020-09-17 10:18:40 -0400402 -Wall -Wextra \
403 -Wno-unused-variable \
404 -Wno-unused-function \
405 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -0500406 -DANDROID \
agsantosac1940d2020-09-17 10:18:40 -0400407 -I"." \
408 -I"${DAEMON_SRC}" \
409 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
410 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -0500411 -I"${ONNX_PATH}/include/onnxruntime/session" \
412 -I"${ONNX_PATH}/include/onnxruntime/providers/nnapi" \
413 -I"${ONNX_PATH}/../include/onnxruntime/session" \
414 -I"${ONNX_PATH}/../include/onnxruntime/providers/nnapi" \
agsantosac1940d2020-09-17 10:18:40 -0400415 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -0400416 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500417 ./../lib/frameUtils.cpp \
agsantosdd6a62a2021-03-29 17:13:27 -0400418 ./../lib/frameFilter.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500419 main.cpp \
agsantos796b5af2020-12-22 19:38:27 -0500420 videoSubscriber.cpp \
421 pluginMediaHandler.cpp \
422 pluginProcessor.cpp \
423 cpu-features.o \
agsantosac1940d2020-09-17 10:18:40 -0400424 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
agsantos796b5af2020-12-22 19:38:27 -0500425 -L"${ONNX_PATH}/lib/" \
agsantosdd6a62a2021-03-29 17:13:27 -0400426 -lavfilter \
agsantos796b5af2020-12-22 19:38:27 -0500427 -lswscale \
agsantosdd6a62a2021-03-29 17:13:27 -0400428 -lavformat \
429 -lavcodec \
agsantos796b5af2020-12-22 19:38:27 -0500430 -lavutil \
agsantosdd6a62a2021-03-29 17:13:27 -0400431 -lvpx \
432 -lx264 \
433 -lspeex \
434 -lopus \
435 -liconv \
agsantosac1940d2020-09-17 10:18:40 -0400436 -lopencv_imgproc \
437 -lopencv_core \
agsantos796b5af2020-12-22 19:38:27 -0500438 -llog -lz \
439 -lonnxruntime \
440 --sysroot=$ANDROID_SYSROOT \
441 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400442
agsantos796b5af2020-12-22 19:38:27 -0500443 rm cpu-features.o
444 cp "${ONNX_PATH}/lib/libonnxruntime.so" "build-local/jpl/lib/${CURRENT_ABI}/libonnxruntime.so"
445 }
agsantosac1940d2020-09-17 10:18:40 -0400446
agsantos796b5af2020-12-22 19:38:27 -0500447 # Build the so
448 for i in ${ANDROID_ABI}; do
449 CURRENT_ABI=$i
450 buildlib
451 done
agsantosac1940d2020-09-17 10:18:40 -0400452
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300453 mkdir -p "./build-local/jpl/data/model"
agsantos796b5af2020-12-22 19:38:27 -0500454 cp "./modelSRC/mModel.ort" "./build-local/jpl/data/model/mModel.ort"
agsantos2c8525e2021-03-19 11:18:01 -0400455 cp "./${PREFERENCESFILENAME}-accel.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400456fi
agsantos5aa39652020-08-11 18:18:04 -0400457
Aline Gondim Santos506a6932022-08-25 18:42:32 -0300458if [ ! ${DEBUG} ]; then
459 python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${ONNX_LIBS}
460fi
agsantosdd6a62a2021-03-29 17:13:27 -0400461cd ${CONTRIB_PATH}/src/ffmpeg/
462# ffmpeg build configuration files were changed during plugin build
463# this git checkout will remove these changes
464git checkout -- .