blob: 04e9efbd17915643ab837aa0c702cd3926f39a3b [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
5ARCH=$(arch)
agsantos1e7736c2020-10-28 14:39:13 -04006EXTRAPATH=''
agsantosac1940d2020-09-17 10:18:40 -04007# Flags:
8
9 # -p: number of processors to use
10 # -c: Runtime plugin cpu/gpu setting.
11 # -t: target platform.
12
agsantosac1940d2020-09-17 10:18:40 -040013if [ -z "${DAEMON}" ]; then
agsantos5aa39652020-08-11 18:18:04 -040014 DAEMON="./../../daemon"
agsantosac1940d2020-09-17 10:18:40 -040015 echo "DAEMON not provided, building with ${DAEMON}"
agsantos5aa39652020-08-11 18:18:04 -040016fi
agsantos796b5af2020-12-22 19:38:27 -050017if [ -z "${PROCESSOR}" ]; then
18 PROCESSOR="CPU"
19 echo "PROCESSOR not provided, building with ${PROCESSOR}"
20fi
agsantos5aa39652020-08-11 18:18:04 -040021
22PLUGIN_NAME="GreenScreen"
agsantosac1940d2020-09-17 10:18:40 -040023JPL_FILE_NAME="${PLUGIN_NAME}.jpl"
24SO_FILE_NAME="lib${PLUGIN_NAME}.so"
agsantos5aa39652020-08-11 18:18:04 -040025DAEMON_SRC="${DAEMON}/src"
26CONTRIB_PATH="${DAEMON}/contrib"
agsantos5aa39652020-08-11 18:18:04 -040027PLUGINS_LIB="../lib"
agsantosac1940d2020-09-17 10:18:40 -040028LIBS_DIR="./../contrib/Libs"
29
agsantos796b5af2020-12-22 19:38:27 -050030if [ "${PROCESSOR}" = "CPU" ]; then
31 ONNX_LIBS="cpu"
32elif [ "${PROCESSOR}" = "NVIDIA" ]; then
33 ONNX_LIBS="nvidia-gpu"
34 CUBLASLT="-lcublasLt"
agsantosac1940d2020-09-17 10:18:40 -040035fi
agsantosac1940d2020-09-17 10:18:40 -040036
37PLATFORM="linux-gnu"
agsantosac1940d2020-09-17 10:18:40 -040038
39while getopts t:c:p OPT; do
40 case "$OPT" in
41 t)
42 PLATFORM="${OPTARG}"
agsantos796b5af2020-12-22 19:38:27 -050043 if [ ${PLATFORM} = "android" ]; then
44 ONNX_LIBS=""
agsantosac1940d2020-09-17 10:18:40 -040045 fi
46 ;;
47 c)
agsantosac1940d2020-09-17 10:18:40 -040048 ;;
49 p)
50 ;;
51 \?)
52 exit 1
53 ;;
54 esac
55done
agsantos5aa39652020-08-11 18:18:04 -040056
agsantos796b5af2020-12-22 19:38:27 -050057if [ "${PLATFORM}" = "linux-gnu" ]
agsantosac1940d2020-09-17 10:18:40 -040058then
agsantos1e7736c2020-10-28 14:39:13 -040059 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
60
agsantosac1940d2020-09-17 10:18:40 -040061 CONTRIB_PLATFORM_CURT=${ARCH}
62 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
agsantos796b5af2020-12-22 19:38:27 -050063 ONNX_PATH=${EXTRALIBS_PATH}
64 if [ -z "${EXTRALIBS_PATH}" ]
65 then
66 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
67 fi
agsantosac1940d2020-09-17 10:18:40 -040068
69 # Compile
70 clang++ -std=c++17 -shared -fPIC \
71 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
72 -Wall -Wextra \
73 -Wno-unused-variable \
74 -Wno-unused-function \
75 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -050076 -D${PROCESSOR} \
agsantosac1940d2020-09-17 10:18:40 -040077 -I"." \
78 -I"${DAEMON_SRC}" \
79 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
80 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -050081 -I"${ONNX_PATH}/include/onnxruntime/session" \
82 -I"${ONNX_PATH}/include/onnxruntime/providers/cuda" \
agsantosac1940d2020-09-17 10:18:40 -040083 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -040084 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -050085 ./../lib/frameUtils.cpp \
agsantosac1940d2020-09-17 10:18:40 -040086 main.cpp \
87 videoSubscriber.cpp \
agsantosac1940d2020-09-17 10:18:40 -040088 pluginMediaHandler.cpp \
agsantos796b5af2020-12-22 19:38:27 -050089 pluginProcessor.cpp \
agsantosac1940d2020-09-17 10:18:40 -040090 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
91 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/opencv4/3rdparty/" \
agsantos796b5af2020-12-22 19:38:27 -050092 -L"${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}" \
93 -L"${CUDA_HOME}/lib64/" \
agsantosf7e04bd2020-10-14 15:59:47 -040094 -l:libswscale.a \
95 -l:libavutil.a \
agsantosac1940d2020-09-17 10:18:40 -040096 -lopencv_imgcodecs \
97 -lopencv_imgproc \
98 -lopencv_core \
agsantosf7e04bd2020-10-14 15:59:47 -040099 -llibpng \
agsantos796b5af2020-12-22 19:38:27 -0500100 -llibjpeg-turbo \
101 -lva ${CUBLASLT} \
102 -lonnxruntime \
agsantos1e7736c2020-10-28 14:39:13 -0400103 -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400104
agsantosac1940d2020-09-17 10:18:40 -0400105
agsantos796b5af2020-12-22 19:38:27 -0500106 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libonnxruntime.so.1.6.0"
107 if [ "${PROCESSOR}" = "NVIDIA" ]
agsantosac1940d2020-09-17 10:18:40 -0400108 then
agsantos796b5af2020-12-22 19:38:27 -0500109 cp "${CUDA_HOME}/lib64/libcudart.so.10.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudart.so.10.2"
110 cp "${CUDA_HOME}/lib64/libcublas.so.10.2.3.254" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublas.so.10"
111 cp "${CUDA_HOME}/lib64/libcufft.so.10.1.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcufft.so.10"
112 cp "${CUDA_HOME}/lib64/libcurand.so.10.1.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcurand.so.10"
113 cp "${CUDA_HOME}/lib64/libcublasLt.so.10.2.3.254" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublasLt.so.10"
114 cp "${CUDNN_HOME}/libcudnn.so.8" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudnn.so.8"
115 cp "${CUDNN_HOME}/libcudnn_ops_infer.so.8" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudnn_ops_infer.so.8"
116 fi
agsantos1e7736c2020-10-28 14:39:13 -0400117
agsantos796b5af2020-12-22 19:38:27 -0500118 mkdir "./build-local/jpl/data/model"
119 cp "./modelSRC/mModel.onnx" "./build-local/jpl/data/model/mModel.onnx"
120 cp "./preferences-onnx.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400121
agsantos796b5af2020-12-22 19:38:27 -0500122elif [ "${PLATFORM}" = "android" ]
123then
124 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
125
126 if [ -z "$ANDROID_NDK" ]; then
127 ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
128 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
129 fi
130
131 #=========================================================
132 # Check if the ANDROID_ABI was provided
133 # if not, set default
134 #=========================================================
135 if [ -z "$ANDROID_ABI" ]; then
136 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
137 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
138 fi
139
140 buildlib() {
141 echo "$CURRENT_ABI"
142
143 #=========================================================
144 # ANDROID TOOLS
145 #=========================================================
146 export HOST_TAG=linux-x86_64
147 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
148
149 if [ "$CURRENT_ABI" = armeabi-v7a ]
150 then
151 export AR=$TOOLCHAIN/bin/arm-linux-android-ar
152 export AS=$TOOLCHAIN/bin/arm-linux-android-as
153 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
154 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
155 export LD=$TOOLCHAIN/bin/arm-linux-android-ld
156 export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
157 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
158 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
159
160 elif [ "$CURRENT_ABI" = arm64-v8a ]
161 then
162 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
163 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
164 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
165 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
166 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
167 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
168 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
169 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm64/sysroot
170
171 elif [ "$CURRENT_ABI" = x86_64 ]
172 then
173 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
174 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
175 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
176 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
177 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
178 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
179 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
180 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-x86_64/sysroot
181
182 else
183 echo "ABI NOT OK" >&2
184 exit 1
185 fi
186
187 #=========================================================
188 # CONTRIBS
189 #=========================================================
190 if [ "$CURRENT_ABI" = armeabi-v7a ]
191 then
192 CONTRIB_PLATFORM=arm-linux-androideabi
193
194 elif [ "$CURRENT_ABI" = arm64-v8a ]
195 then
196 CONTRIB_PLATFORM=aarch64-linux-android
197
198 elif [ "$CURRENT_ABI" = x86_64 ]
199 then
200 CONTRIB_PLATFORM=x86_64-linux-android
201 fi
202
203 #NDK SOURCES FOR cpufeatures
204 NDK_SOURCES=${ANDROID_NDK}/sources/android
205
206 #=========================================================
207 # LD_FLAGS
208 #=========================================================
209 if [ "$CURRENT_ABI" = armeabi-v7a ]
210 then
211 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
212 elif [ "$CURRENT_ABI" = arm64-v8a ]
213 then
214 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
215 elif [ "$CURRENT_ABI" = x86_64 ]
216 then
217 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
218 fi
219
220 #=========================================================
221 # Compile CPU FEATURES, NEEDED FOR OPENCV
222 #=========================================================
223 $CC -c "$NDK_SOURCES/cpufeatures/cpu-features.c" -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
224
225 #=========================================================
226 # Compile the plugin
227 #=========================================================
228
229 ONNX_PATH="${EXTRALIBS_PATH}/${CURRENT_ABI}"
230 if [ -z ${EXTRALIBS_PATH} ]
231 then
232 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
233 fi
234
235 # Create so destination folder
236 $CXX --std=c++17 -O3 -g -fPIC \
agsantosac1940d2020-09-17 10:18:40 -0400237 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
agsantos796b5af2020-12-22 19:38:27 -0500238 -shared \
agsantosac1940d2020-09-17 10:18:40 -0400239 -Wall -Wextra \
240 -Wno-unused-variable \
241 -Wno-unused-function \
242 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -0500243 -DANDROID \
agsantosac1940d2020-09-17 10:18:40 -0400244 -I"." \
245 -I"${DAEMON_SRC}" \
246 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
247 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -0500248 -I"${ONNX_PATH}/include/onnxruntime/session" \
249 -I"${ONNX_PATH}/include/onnxruntime/providers/nnapi" \
250 -I"${ONNX_PATH}/../include/onnxruntime/session" \
251 -I"${ONNX_PATH}/../include/onnxruntime/providers/nnapi" \
agsantosac1940d2020-09-17 10:18:40 -0400252 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -0400253 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500254 ./../lib/frameUtils.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500255 main.cpp \
agsantos796b5af2020-12-22 19:38:27 -0500256 videoSubscriber.cpp \
257 pluginMediaHandler.cpp \
258 pluginProcessor.cpp \
259 cpu-features.o \
agsantosac1940d2020-09-17 10:18:40 -0400260 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
agsantos796b5af2020-12-22 19:38:27 -0500261 -L"${ONNX_PATH}/lib/" \
262 -lswscale \
263 -lavutil \
agsantosac1940d2020-09-17 10:18:40 -0400264 -lopencv_imgcodecs \
265 -lopencv_imgproc \
266 -lopencv_core \
agsantosf7e04bd2020-10-14 15:59:47 -0400267 -llibpng \
agsantos796b5af2020-12-22 19:38:27 -0500268 -llibjpeg-turbo \
269 -llog -lz \
270 -lonnxruntime \
271 --sysroot=$ANDROID_SYSROOT \
272 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400273
agsantos796b5af2020-12-22 19:38:27 -0500274 rm cpu-features.o
275 cp "${ONNX_PATH}/lib/libonnxruntime.so" "build-local/jpl/lib/${CURRENT_ABI}/libonnxruntime.so"
276 }
agsantosac1940d2020-09-17 10:18:40 -0400277
agsantos796b5af2020-12-22 19:38:27 -0500278 # Build the so
279 for i in ${ANDROID_ABI}; do
280 CURRENT_ABI=$i
281 buildlib
282 done
agsantosac1940d2020-09-17 10:18:40 -0400283
agsantos796b5af2020-12-22 19:38:27 -0500284 mkdir "./build-local/jpl/data/model"
285 cp "./modelSRC/mModel.ort" "./build-local/jpl/data/model/mModel.ort"
286 cp "./preferences-ort.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400287fi
agsantos5aa39652020-08-11 18:18:04 -0400288
agsantos796b5af2020-12-22 19:38:27 -0500289python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${ONNX_LIBS}