blob: 2f0b65fe4350a7999961e52cffe77edcc4e1f070 [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"
agsantos2c8525e2021-03-19 11:18:01 -040029PREFERENCESFILENAME="preferences"
agsantosac1940d2020-09-17 10:18:40 -040030
agsantos796b5af2020-12-22 19:38:27 -050031if [ "${PROCESSOR}" = "CPU" ]; then
32 ONNX_LIBS="cpu"
33elif [ "${PROCESSOR}" = "NVIDIA" ]; then
34 ONNX_LIBS="nvidia-gpu"
35 CUBLASLT="-lcublasLt"
agsantos2c8525e2021-03-19 11:18:01 -040036 PREFERENCESFILENAME="${PREFERENCESFILENAME}-accel"
agsantosac1940d2020-09-17 10:18:40 -040037fi
agsantosac1940d2020-09-17 10:18:40 -040038
39PLATFORM="linux-gnu"
agsantosac1940d2020-09-17 10:18:40 -040040
41while getopts t:c:p OPT; do
42 case "$OPT" in
43 t)
44 PLATFORM="${OPTARG}"
agsantos796b5af2020-12-22 19:38:27 -050045 if [ ${PLATFORM} = "android" ]; then
46 ONNX_LIBS=""
agsantosac1940d2020-09-17 10:18:40 -040047 fi
48 ;;
49 c)
agsantosac1940d2020-09-17 10:18:40 -040050 ;;
51 p)
52 ;;
53 \?)
54 exit 1
55 ;;
56 esac
57done
agsantos5aa39652020-08-11 18:18:04 -040058
agsantos796b5af2020-12-22 19:38:27 -050059if [ "${PLATFORM}" = "linux-gnu" ]
agsantosac1940d2020-09-17 10:18:40 -040060then
agsantos1e7736c2020-10-28 14:39:13 -040061 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
62
agsantosac1940d2020-09-17 10:18:40 -040063 CONTRIB_PLATFORM_CURT=${ARCH}
64 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
agsantos796b5af2020-12-22 19:38:27 -050065 ONNX_PATH=${EXTRALIBS_PATH}
66 if [ -z "${EXTRALIBS_PATH}" ]
67 then
68 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
69 fi
agsantosac1940d2020-09-17 10:18:40 -040070
71 # Compile
72 clang++ -std=c++17 -shared -fPIC \
73 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
74 -Wall -Wextra \
75 -Wno-unused-variable \
76 -Wno-unused-function \
77 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -050078 -D${PROCESSOR} \
agsantosac1940d2020-09-17 10:18:40 -040079 -I"." \
80 -I"${DAEMON_SRC}" \
81 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
82 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -050083 -I"${ONNX_PATH}/include/onnxruntime/session" \
84 -I"${ONNX_PATH}/include/onnxruntime/providers/cuda" \
agsantosac1940d2020-09-17 10:18:40 -040085 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -040086 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -050087 ./../lib/frameUtils.cpp \
agsantosac1940d2020-09-17 10:18:40 -040088 main.cpp \
89 videoSubscriber.cpp \
agsantosac1940d2020-09-17 10:18:40 -040090 pluginMediaHandler.cpp \
agsantos796b5af2020-12-22 19:38:27 -050091 pluginProcessor.cpp \
agsantosac1940d2020-09-17 10:18:40 -040092 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
93 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/opencv4/3rdparty/" \
agsantos796b5af2020-12-22 19:38:27 -050094 -L"${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}" \
95 -L"${CUDA_HOME}/lib64/" \
agsantosf7e04bd2020-10-14 15:59:47 -040096 -l:libswscale.a \
97 -l:libavutil.a \
agsantosac1940d2020-09-17 10:18:40 -040098 -lopencv_imgcodecs \
99 -lopencv_imgproc \
100 -lopencv_core \
agsantosf7e04bd2020-10-14 15:59:47 -0400101 -llibpng \
agsantos796b5af2020-12-22 19:38:27 -0500102 -llibjpeg-turbo \
103 -lva ${CUBLASLT} \
104 -lonnxruntime \
agsantos1e7736c2020-10-28 14:39:13 -0400105 -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400106
agsantosac1940d2020-09-17 10:18:40 -0400107
agsantos796b5af2020-12-22 19:38:27 -0500108 cp "${ONNX_PATH}/lib/onnxruntime/${ONNX_LIBS}/libonnxruntime.so" "build-local/jpl/lib/$CONTRIB_PLATFORM/libonnxruntime.so.1.6.0"
109 if [ "${PROCESSOR}" = "NVIDIA" ]
agsantosac1940d2020-09-17 10:18:40 -0400110 then
agsantos796b5af2020-12-22 19:38:27 -0500111 cp "${CUDA_HOME}/lib64/libcudart.so.10.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudart.so.10.2"
112 cp "${CUDA_HOME}/lib64/libcublas.so.10.2.3.254" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublas.so.10"
113 cp "${CUDA_HOME}/lib64/libcufft.so.10.1.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcufft.so.10"
114 cp "${CUDA_HOME}/lib64/libcurand.so.10.1.2.89" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcurand.so.10"
115 cp "${CUDA_HOME}/lib64/libcublasLt.so.10.2.3.254" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcublasLt.so.10"
116 cp "${CUDNN_HOME}/libcudnn.so.8" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudnn.so.8"
117 cp "${CUDNN_HOME}/libcudnn_ops_infer.so.8" "build-local/jpl/lib/$CONTRIB_PLATFORM/libcudnn_ops_infer.so.8"
118 fi
agsantos1e7736c2020-10-28 14:39:13 -0400119
agsantos796b5af2020-12-22 19:38:27 -0500120 mkdir "./build-local/jpl/data/model"
121 cp "./modelSRC/mModel.onnx" "./build-local/jpl/data/model/mModel.onnx"
agsantos2c8525e2021-03-19 11:18:01 -0400122 cp "./${PREFERENCESFILENAME}.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400123
agsantos796b5af2020-12-22 19:38:27 -0500124elif [ "${PLATFORM}" = "android" ]
125then
126 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
127
128 if [ -z "$ANDROID_NDK" ]; then
129 ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
130 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
131 fi
132
133 #=========================================================
134 # Check if the ANDROID_ABI was provided
135 # if not, set default
136 #=========================================================
137 if [ -z "$ANDROID_ABI" ]; then
138 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
139 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
140 fi
141
142 buildlib() {
143 echo "$CURRENT_ABI"
144
145 #=========================================================
146 # ANDROID TOOLS
147 #=========================================================
148 export HOST_TAG=linux-x86_64
149 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
150
151 if [ "$CURRENT_ABI" = armeabi-v7a ]
152 then
agsantos7ad7a3a2021-01-19 12:57:54 -0500153 export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
154 export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
agsantos796b5af2020-12-22 19:38:27 -0500155 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
156 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
agsantos7ad7a3a2021-01-19 12:57:54 -0500157 export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
158 export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
agsantos796b5af2020-12-22 19:38:27 -0500159 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
160 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
161
162 elif [ "$CURRENT_ABI" = arm64-v8a ]
163 then
164 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
165 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
166 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
167 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
168 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
169 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
170 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
171 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm64/sysroot
172
173 elif [ "$CURRENT_ABI" = x86_64 ]
174 then
175 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
176 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
177 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
178 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
179 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
180 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
181 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
182 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-x86_64/sysroot
183
184 else
185 echo "ABI NOT OK" >&2
186 exit 1
187 fi
188
189 #=========================================================
190 # CONTRIBS
191 #=========================================================
192 if [ "$CURRENT_ABI" = armeabi-v7a ]
193 then
194 CONTRIB_PLATFORM=arm-linux-androideabi
195
196 elif [ "$CURRENT_ABI" = arm64-v8a ]
197 then
198 CONTRIB_PLATFORM=aarch64-linux-android
199
200 elif [ "$CURRENT_ABI" = x86_64 ]
201 then
202 CONTRIB_PLATFORM=x86_64-linux-android
203 fi
204
205 #NDK SOURCES FOR cpufeatures
206 NDK_SOURCES=${ANDROID_NDK}/sources/android
207
208 #=========================================================
209 # LD_FLAGS
210 #=========================================================
211 if [ "$CURRENT_ABI" = armeabi-v7a ]
212 then
213 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
214 elif [ "$CURRENT_ABI" = arm64-v8a ]
215 then
216 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
217 elif [ "$CURRENT_ABI" = x86_64 ]
218 then
219 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
220 fi
221
222 #=========================================================
223 # Compile CPU FEATURES, NEEDED FOR OPENCV
224 #=========================================================
225 $CC -c "$NDK_SOURCES/cpufeatures/cpu-features.c" -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
226
227 #=========================================================
228 # Compile the plugin
229 #=========================================================
230
231 ONNX_PATH="${EXTRALIBS_PATH}/${CURRENT_ABI}"
232 if [ -z ${EXTRALIBS_PATH} ]
233 then
234 ONNX_PATH="${CONTRIB_PATH}/${CONTRIB_PLATFORM}"
235 fi
236
237 # Create so destination folder
238 $CXX --std=c++17 -O3 -g -fPIC \
agsantosac1940d2020-09-17 10:18:40 -0400239 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
agsantos796b5af2020-12-22 19:38:27 -0500240 -shared \
agsantosac1940d2020-09-17 10:18:40 -0400241 -Wall -Wextra \
242 -Wno-unused-variable \
243 -Wno-unused-function \
244 -Wno-unused-parameter \
agsantos796b5af2020-12-22 19:38:27 -0500245 -DANDROID \
agsantosac1940d2020-09-17 10:18:40 -0400246 -I"." \
247 -I"${DAEMON_SRC}" \
248 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
249 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
agsantos796b5af2020-12-22 19:38:27 -0500250 -I"${ONNX_PATH}/include/onnxruntime/session" \
251 -I"${ONNX_PATH}/include/onnxruntime/providers/nnapi" \
252 -I"${ONNX_PATH}/../include/onnxruntime/session" \
253 -I"${ONNX_PATH}/../include/onnxruntime/providers/nnapi" \
agsantosac1940d2020-09-17 10:18:40 -0400254 -I"${PLUGINS_LIB}" \
agsantos1e7736c2020-10-28 14:39:13 -0400255 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500256 ./../lib/frameUtils.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500257 main.cpp \
agsantos796b5af2020-12-22 19:38:27 -0500258 videoSubscriber.cpp \
259 pluginMediaHandler.cpp \
260 pluginProcessor.cpp \
261 cpu-features.o \
agsantosac1940d2020-09-17 10:18:40 -0400262 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
agsantos796b5af2020-12-22 19:38:27 -0500263 -L"${ONNX_PATH}/lib/" \
264 -lswscale \
265 -lavutil \
agsantosac1940d2020-09-17 10:18:40 -0400266 -lopencv_imgcodecs \
267 -lopencv_imgproc \
268 -lopencv_core \
agsantosf7e04bd2020-10-14 15:59:47 -0400269 -llibpng \
agsantos796b5af2020-12-22 19:38:27 -0500270 -llibjpeg-turbo \
271 -llog -lz \
272 -lonnxruntime \
273 --sysroot=$ANDROID_SYSROOT \
274 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
agsantosac1940d2020-09-17 10:18:40 -0400275
agsantos796b5af2020-12-22 19:38:27 -0500276 rm cpu-features.o
277 cp "${ONNX_PATH}/lib/libonnxruntime.so" "build-local/jpl/lib/${CURRENT_ABI}/libonnxruntime.so"
278 }
agsantosac1940d2020-09-17 10:18:40 -0400279
agsantos796b5af2020-12-22 19:38:27 -0500280 # Build the so
281 for i in ${ANDROID_ABI}; do
282 CURRENT_ABI=$i
283 buildlib
284 done
agsantosac1940d2020-09-17 10:18:40 -0400285
agsantos796b5af2020-12-22 19:38:27 -0500286 mkdir "./build-local/jpl/data/model"
287 cp "./modelSRC/mModel.ort" "./build-local/jpl/data/model/mModel.ort"
agsantos2c8525e2021-03-19 11:18:01 -0400288 cp "./${PREFERENCESFILENAME}-accel.json" "./build-local/jpl/data/preferences.json"
agsantosac1940d2020-09-17 10:18:40 -0400289fi
agsantos5aa39652020-08-11 18:18:04 -0400290
agsantos796b5af2020-12-22 19:38:27 -0500291python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${ONNX_LIBS}