blob: 8170f18fd3a3533e60d7bdbf90d0adfc476b68e3 [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
12PLUGIN_NAME="foregroungsegmentation"
13JPL_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
26 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
27 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
47 export ANDROID_SYSROOT=/home/${USER}/Projects/ring-android-project/client-android/android-toolchain-21-arm/sysroot
48
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
58 export ANDROID_SYSROOT=/home/${USER}/Projects/ring-android-project/client-android/android-toolchain-21-arm64/sysroot
59
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
69 export ANDROID_SYSROOT=/home/${USER}/Projects/ring-android-project/client-android/android-toolchain-21-x86_64/sysroot
70
71 else
72 echo "ABI NOT OK" >&2
73 exit 1
74 fi
75
76 #=========================================================
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
91
92 # ASSETS
93 ANDROID_PROJECT_ASSETS=/home/${USER}/Projects/ring-android-project/client-android/ring-android/app/src/main/assets
94 # LIBS FOLDER
95 ANDROID_PROJECT_LIBS=/home/${USER}/Projects/ring-android-project/client-android/ring-android/app/src/main/libs/$CURRENT_ABI
96 #NDK SOURCES FOR cpufeatures
97 NDK_SOURCES=${ANDROID_NDK}/sources/android
98
99 #=========================================================
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
112
113 #=========================================================
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 #=========================================================
121
122 # 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
163
164 cp ${LIBS_DIR}/_tensorflow_distribution/lib/${CURRENT_ABI}/libtensorflowlite.so lib/$CURRENT_ABI
165}
166
167# Build the so
168for i in ${ANDROID_ABI}; do
169 CURRENT_ABI=$i
170 buildlib
171done
172
173#Export the plugin data folder
174mkdir -p ${DESTINATION_PATH}/jpl/${PLUGIN_NAME}/
175zip -r ${JPL_FILE_NAME} data manifest.json lib
176mv ${JPL_FILE_NAME} ${DESTINATION_PATH}/jpl/${PLUGIN_NAME}/
177
178# Cleanup
179# Remove cpu-features object after compilation
180rm cpu-features.o
181rm -rf lib