blob: 953f7a3a178823e6fcb6db258e72ffab92ac385e [file] [log] [blame]
agsantosd09cc6d2020-11-06 17:34:46 -05001#! /bin/bash
2# Build the plugin for the project
3set -e
4export OSTYPE
5ARCH=$(arch)
6EXTRAPATH=''
7# Flags:
8
9# -p: number of processors to use
10# -c: Runtime plugin cpu/gpu setting.
11# -t: target platform.
12
13
14if [ -z "${DAEMON}" ]; then
15 DAEMON="./../../daemon"
16 echo "DAEMON not provided, building with ${DAEMON}"
17fi
18
19PLUGIN_NAME="HelloWorld"
20JPL_FILE_NAME="${PLUGIN_NAME}.jpl"
21SO_FILE_NAME="lib${PLUGIN_NAME}.so"
22DAEMON_SRC="${DAEMON}/src"
23CONTRIB_PATH="${DAEMON}/contrib"
24PLUGINS_LIB="../lib"
25LIBS_DIR="./../contrib/Libs"
26
27if [ -z "${PLATFORM}" ]; then
28 PLATFORM="linux-gnu"
29 echo "PLATFORM not provided, building with ${PLATFORM}"
30 echo "Other options: redhat-linux"
31fi
32
33while getopts t:c:p OPT; do
34 case "$OPT" in
35 t)
36 PLATFORM="${OPTARG}"
37 ;;
38 c)
39 PROCESSOR="${OPTARG}"
40 ;;
41 p)
42 ;;
43 \?)
44 exit 1
45 ;;
46 esac
47done
48
49if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ]
50then
51 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
52
53 CONTRIB_PLATFORM_CURT=${ARCH}
54 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
55
56 # Compile
57 clang++ -std=c++17 -shared -fPIC \
58 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
59 -Wall -Wextra \
60 -Wno-unused-variable \
61 -Wno-unused-function \
62 -Wno-unused-parameter \
63 -I"." \
64 -I"${DAEMON_SRC}" \
65 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
66 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
67 -I"${PLUGINS_LIB}" \
68 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -050069 ./../lib/frameUtils.cpp \
agsantosd09cc6d2020-11-06 17:34:46 -050070 CoinCircleMediaHandler.cpp \
71 CenterCircleVideoSubscriber.cpp \
72 CenterCircleMediaHandler.cpp \
73 CoinCircleVideoSubscriber.cpp \
74 main.cpp \
75 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
76 -l:libswscale.a \
77 -l:libavutil.a \
78 -lopencv_imgproc \
79 -lopencv_core \
80 -lva \
81 -o "build-local/jpl/lib/${CONTRIB_PLATFORM_CURT}-linux-gnu/${SO_FILE_NAME}"
82
83elif [ "${PLATFORM}" = "android" ]
84then
85 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
86
87 if [ -z "$ANDROID_NDK" ]; then
88 ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
89 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
90 fi
91
92 #=========================================================
93 # Check if the ANDROID_ABI was provided
94 # if not, set default
95 #=========================================================
96 if [ -z "$ANDROID_ABI" ]; then
97 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
98 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
99 fi
100
101 buildlib() {
102 echo "$CURRENT_ABI"
103
104 #=========================================================
105 # ANDROID TOOLS
106 #=========================================================
107 export HOST_TAG=linux-x86_64
108 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
109
110 if [ "$CURRENT_ABI" = armeabi-v7a ]
111 then
agsantos7ad7a3a2021-01-19 12:57:54 -0500112 export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
113 export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
agsantosd09cc6d2020-11-06 17:34:46 -0500114 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
115 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
agsantos7ad7a3a2021-01-19 12:57:54 -0500116 export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
117 export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
agsantosd09cc6d2020-11-06 17:34:46 -0500118 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
119 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
120
121 elif [ "$CURRENT_ABI" = arm64-v8a ]
122 then
123 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
124 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
125 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
126 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
127 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
128 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
129 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
130 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm64/sysroot
131
132 elif [ "$CURRENT_ABI" = x86_64 ]
133 then
134 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
135 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
136 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
137 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
138 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
139 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
140 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
141 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-x86_64/sysroot
142
143 else
144 echo "ABI NOT OK" >&2
145 exit 1
146 fi
147
148 #=========================================================
149 # CONTRIBS
150 #=========================================================
151 if [ "$CURRENT_ABI" = armeabi-v7a ]
152 then
153 CONTRIB_PLATFORM=arm-linux-androideabi
154
155 elif [ "$CURRENT_ABI" = arm64-v8a ]
156 then
157 CONTRIB_PLATFORM=aarch64-linux-android
158
159 elif [ "$CURRENT_ABI" = x86_64 ]
160 then
161 CONTRIB_PLATFORM=x86_64-linux-android
162 fi
163
164 #NDK SOURCES FOR cpufeatures
165 NDK_SOURCES=${ANDROID_NDK}/sources/android
166
167 #=========================================================
168 # LD_FLAGS
169 #=========================================================
170 if [ "$CURRENT_ABI" = armeabi-v7a ]
171 then
172 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
173 elif [ "$CURRENT_ABI" = arm64-v8a ]
174 then
175 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
176 elif [ "$CURRENT_ABI" = x86_64 ]
177 then
178 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
179 fi
180
181 #=========================================================
182 # Compile the plugin
183 #=========================================================
184
185 # Create so destination folder
agsantosc9181b42020-11-26 12:03:04 -0500186 $CXX --std=c++17 -O3 -g -fPIC \
agsantosd09cc6d2020-11-06 17:34:46 -0500187 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
188 -shared \
189 -Wall -Wextra \
190 -Wno-unused-variable \
191 -Wno-unused-function \
192 -Wno-unused-parameter \
193 -I"." \
194 -I"${DAEMON_SRC}" \
195 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
196 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
197 -I"${PLUGINS_LIB}" \
198 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500199 ./../lib/frameUtils.cpp \
agsantosd09cc6d2020-11-06 17:34:46 -0500200 CoinCircleMediaHandler.cpp \
201 CenterCircleVideoSubscriber.cpp \
202 CenterCircleMediaHandler.cpp \
203 CoinCircleVideoSubscriber.cpp \
204 main.cpp \
205 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
206 -lswscale \
207 -lavutil \
208 -lopencv_imgproc \
209 -lopencv_core \
210 -llog -lz \
211 --sysroot=$ANDROID_SYSROOT \
212 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
213 }
214
215 # Build the so
216 for i in ${ANDROID_ABI}; do
217 CURRENT_ABI=$i
218 buildlib
219 done
220fi
221
222python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${EXTRAPATH}