blob: 2300dc3cea8403004eb70b1076ed6fb13a6ce017 [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"
18# DESTINATION_PATH=/home/${USER}/Projects/ring-plugins
19DESTINATION_PATH="./../build/"
20PLUGINS_LIB="../lib"
21
22#=========================================================
23# Check if the ANDROID_ABI was provided
24# if not, set default
25#=========================================================
26if [ -z $ANDROID_ABI ]; then
27 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
28 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
29fi
30
31buildlib() {
32 echo $CURRENT_ABI
33 #=========================================================
34 # ANDROID TOOLS
35 #=========================================================
36 export HOST_TAG=linux-x86_64
37 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
38
39 if [ $CURRENT_ABI = armeabi-v7a ]
40 then
41 export AR=$TOOLCHAIN/bin/arm-linux-android-ar
42 export AS=$TOOLCHAIN/bin/arm-linux-android-as
43 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
44 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
45 export LD=$TOOLCHAIN/bin/arm-linux-android-ld
46 export RANLIB=$TOOLCHAIN/bin/arm-linux-android-ranlib
47 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
48 export ANDROID_SYSROOT=/home/${USER}/Projects/ring-android-project/client-android/android-toolchain-21-arm/sysroot
49
50 elif [ $CURRENT_ABI = arm64-v8a ]
51 then
52 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
53 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
54 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
55 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
56 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
57 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
58 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
59 export ANDROID_SYSROOT=/home/${USER}/Projects/ring-android-project/client-android/android-toolchain-21-arm64/sysroot
60
61 elif [ $CURRENT_ABI = x86_64 ]
62 then
63 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
64 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
65 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
66 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
67 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
68 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
69 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
70 export ANDROID_SYSROOT=/home/${USER}/Projects/ring-android-project/client-android/android-toolchain-21-x86_64/sysroot
71
72 else
73 echo "ABI NOT OK" >&2
74 exit 1
75 fi
76
77 #=========================================================
78 # CONTRIBS
79 #=========================================================
80 if [ $CURRENT_ABI = armeabi-v7a ]
81 then
82 CONTRIB_PLATFORM=arm-linux-androideabi
83
84 elif [ $CURRENT_ABI = arm64-v8a ]
85 then
86 CONTRIB_PLATFORM=aarch64-linux-android
87
88 elif [ $CURRENT_ABI = x86_64 ]
89 then
90 CONTRIB_PLATFORM=x86_64-linux-android
91 fi
92
93 # ASSETS
94 ANDROID_PROJECT_ASSETS=/home/${USER}/Projects/ring-android-project/client-android/ring-android/app/src/main/assets
95 # LIBS FOLDER
96 ANDROID_PROJECT_LIBS=/home/${USER}/Projects/ring-android-project/client-android/ring-android/app/src/main/libs/$CURRENT_ABI
97 #NDK SOURCES FOR cpufeatures
98 NDK_SOURCES=${ANDROID_NDK}/sources/android
99
100 #=========================================================
101 # LD_FLAGS
102 #=========================================================
103 if [ $CURRENT_ABI = armeabi-v7a ]
104 then
105 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
106 elif [ $CURRENT_ABI = arm64-v8a ]
107 then
108 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
109 elif [ $CURRENT_ABI = x86_64 ]
110 then
111 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
112 fi
113
114 #=========================================================
115 # Compile CPU FEATURES, NEEDED FOR OPENCV
116 #=========================================================
117 $CC -c $NDK_SOURCES/cpufeatures/cpu-features.c -o cpu-features.o -o cpu-features.o --sysroot=$ANDROID_SYSROOT
118
119 #=========================================================
120 # Compile the plugin
121 #=========================================================
122
123 # Create so destination folder
124 mkdir -p lib/$CURRENT_ABI
125
126 # Create so destination folder
127 $CXX --std=c++14 -O3 -g -fPIC \
128 -Wl,-Bsymbolic \
129 -shared \
130 -Wall -Wextra \
131 -Wno-unused-variable \
132 -Wno-unused-function \
133 -Wno-unused-parameter \
134 -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