blob: c0e2343388473cd2f6ee2c08e18b30372cb1fe46 [file] [log] [blame]
AGS555248cd2020-05-13 11:15:19 -04001#! /bin/bash
2# Build the plugin for the project
3if [ -z $DAEMON ]; then
4 DAEMON="./../../daemon"
5 echo "DAEMON not provided, building for ${DAEMON}"
6fi
7if [ -z $ANDROID_NDK ]; then
8 ANDROID_NDK=/home/${USER}/Android/Sdk/ndk/21.1.6352462
9 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
10fi
11
agsantos5aa39652020-08-11 18:18:04 -040012PLUGIN_NAME="GreenScreen"
AGS555248cd2020-05-13 11:15:19 -040013JPL_FILE_NAME=${PLUGIN_NAME}".jpl"
14SO_FILE_NAME="lib"${PLUGIN_NAME}".so"
15LIBS_DIR="/home/${USER}/Libs"
16DAEMON_SRC="${DAEMON}/src"
17CONTRIB_PATH="${DAEMON}/contrib"
AGS555248cd2020-05-13 11:15:19 -040018DESTINATION_PATH="./../build/"
19PLUGINS_LIB="../lib"
20
21#=========================================================
22# Check if the ANDROID_ABI was provided
23# if not, set default
24#=========================================================
25if [ -z $ANDROID_ABI ]; then
agsantosef9f8562020-06-25 16:43:25 -040026 ANDROID_ABI="armeabi-v7a arm64-v8a"
AGS555248cd2020-05-13 11:15:19 -040027 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
28fi
29
30buildlib() {
31 echo $CURRENT_ABI
32 #=========================================================
33 # ANDROID TOOLS
34 #=========================================================
35 export HOST_TAG=linux-x86_64
36 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
37
38 if [ $CURRENT_ABI = armeabi-v7a ]
39 then
40 export AR=$TOOLCHAIN/bin/arm-linux-android-ar
41 export AS=$TOOLCHAIN/bin/arm-linux-android-as
42 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
43 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
44 export LD=$TOOLCHAIN/bin/arm-linux-android-ld
45 export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
46 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
AGS520a28762020-06-05 16:28:07 -040047 export ANDROID_SYSROOT=./../../client-android/android-toolchain-21-arm/sysroot
AGS555248cd2020-05-13 11:15:19 -040048
49 elif [ $CURRENT_ABI = arm64-v8a ]
50 then
51 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
52 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
53 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
54 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
55 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
56 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
57 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
AGS520a28762020-06-05 16:28:07 -040058 export ANDROID_SYSROOT=./../../client-android/android-toolchain-21-arm64/sysroot
AGS555248cd2020-05-13 11:15:19 -040059
60 elif [ $CURRENT_ABI = x86_64 ]
61 then
62 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
63 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
64 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
65 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
66 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
67 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
68 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
AGS520a28762020-06-05 16:28:07 -040069 export ANDROID_SYSROOT=./../../client-android/android-toolchain-21-x86_64/sysroot
AGS555248cd2020-05-13 11:15:19 -040070
71 else
72 echo "ABI NOT OK" >&2
73 exit 1
74 fi
AGS520a28762020-06-05 16:28:07 -040075
AGS555248cd2020-05-13 11:15:19 -040076 #=========================================================
77 # CONTRIBS
78 #=========================================================
79 if [ $CURRENT_ABI = armeabi-v7a ]
80 then
81 CONTRIB_PLATFORM=arm-linux-androideabi
82
83 elif [ $CURRENT_ABI = arm64-v8a ]
84 then
85 CONTRIB_PLATFORM=aarch64-linux-android
86
87 elif [ $CURRENT_ABI = x86_64 ]
88 then
89 CONTRIB_PLATFORM=x86_64-linux-android
90 fi
AGS520a28762020-06-05 16:28:07 -040091
AGS555248cd2020-05-13 11:15:19 -040092 # ASSETS
AGS520a28762020-06-05 16:28:07 -040093 ANDROID_PROJECT_ASSETS=./../../client-android/ring-android/app/src/main/assets
AGS555248cd2020-05-13 11:15:19 -040094 # LIBS FOLDER
AGS520a28762020-06-05 16:28:07 -040095 ANDROID_PROJECT_LIBS=./../../client-android/ring-android/app/src/main/libs/$CURRENT_ABI
AGS555248cd2020-05-13 11:15:19 -040096 #NDK SOURCES FOR cpufeatures
97 NDK_SOURCES=${ANDROID_NDK}/sources/android
AGS520a28762020-06-05 16:28:07 -040098
AGS555248cd2020-05-13 11:15:19 -040099 #=========================================================
100 # LD_FLAGS
101 #=========================================================
102 if [ $CURRENT_ABI = armeabi-v7a ]
103 then
104 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
105 elif [ $CURRENT_ABI = arm64-v8a ]
106 then
107 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
108 elif [ $CURRENT_ABI = x86_64 ]
109 then
110 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
111 fi
AGS520a28762020-06-05 16:28:07 -0400112
AGS555248cd2020-05-13 11:15:19 -0400113 #=========================================================
114 # Compile CPU FEATURES, NEEDED FOR OPENCV
115 #=========================================================
116 $CC -c $NDK_SOURCES/cpufeatures/cpu-features.c -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
117
118 #=========================================================
119 # Compile the plugin
120 #=========================================================
AGS520a28762020-06-05 16:28:07 -0400121
AGS555248cd2020-05-13 11:15:19 -0400122 # Create so destination folder
123 mkdir -p lib/$CURRENT_ABI
124
125 # Create so destination folder
126 $CXX --std=c++14 -O3 -g -fPIC \
AGS51aa4c6d2020-05-20 15:49:11 -0400127 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
AGS555248cd2020-05-13 11:15:19 -0400128 -shared \
129 -Wall -Wextra \
130 -Wno-unused-variable \
131 -Wno-unused-function \
132 -Wno-unused-parameter \
AGS51aa4c6d2020-05-20 15:49:11 -0400133 -DTFLITE \
AGS555248cd2020-05-13 11:15:19 -0400134 -I"." \
135 -I${DAEMON_SRC} \
136 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
137 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
138 -I${LIBS_DIR}/_tensorflow_distribution/include/flatbuffers \
139 -I${LIBS_DIR}/_tensorflow_distribution/include \
140 -I${PLUGINS_LIB} \
141 main.cpp \
142 videoSubscriber.cpp \
143 pluginProcessor.cpp \
144 pluginMediaHandler.cpp \
145 TFInference.cpp \
146 pluginInference.cpp \
147 pluginParameters.cpp \
148 cpu-features.o \
149 -L${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/ \
150 -L${LIBS_DIR}/_tensorflow_distribution/lib/${CURRENT_ABI}/ \
151 -lswscale \
152 -lavutil \
153 -lopencv_imgcodecs \
154 -lopencv_imgproc \
155 -lopencv_core \
156 -llibpng \
157 -ltensorflowlite \
158 -llog -lz \
159 --sysroot=$ANDROID_SYSROOT \
160 -o lib/$CURRENT_ABI/${SO_FILE_NAME}
161 # (above) Always put opencv_core after all other opencv libs when linking statically
162 # (above) Put libavutil after other ffmpeg libraries
AGS520a28762020-06-05 16:28:07 -0400163
AGS555248cd2020-05-13 11:15:19 -0400164 cp ${LIBS_DIR}/_tensorflow_distribution/lib/${CURRENT_ABI}/libtensorflowlite.so lib/$CURRENT_ABI
165}
166
agsantos5aa39652020-08-11 18:18:04 -0400167
168mkdir ./data/models
169cp ./modelsSRC/mobilenet_v2_deeplab_v3_256_myquant.tflite ./data/models/mModel.tflite
170cp ./preferences-tflite.json ./data/preferences.json
171
AGS520a28762020-06-05 16:28:07 -0400172# Build the so
AGS555248cd2020-05-13 11:15:19 -0400173for i in ${ANDROID_ABI}; do
174 CURRENT_ABI=$i
175 buildlib
176done
177
178#Export the plugin data folder
179mkdir -p ${DESTINATION_PATH}/jpl/${PLUGIN_NAME}/
180zip -r ${JPL_FILE_NAME} data manifest.json lib
181mv ${JPL_FILE_NAME} ${DESTINATION_PATH}/jpl/${PLUGIN_NAME}/
182
183# Cleanup
184# Remove cpu-features object after compilation
185rm cpu-features.o
186rm -rf lib
agsantos5aa39652020-08-11 18:18:04 -0400187rm -r ./data/models
188rm ./data/preferences.json