blob: 75f14c11d4ccd85d102a9be9499fc3f8e307932f [file] [log] [blame]
agsantosd09cc6d2020-11-06 17:34:46 -05001#! /bin/bash
2# Build the plugin for the project
3set -e
4export OSTYPE
agsantos1bbc7cc2021-05-20 16:43:35 -04005ARCH=$(uname -m)
agsantosd09cc6d2020-11-06 17:34:46 -05006EXTRAPATH=''
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"
agsantos1bbc7cc2021-05-20 16:43:35 -040026PLATFORM=$(uname)
agsantosd09cc6d2020-11-06 17:34:46 -050027
agsantos1bbc7cc2021-05-20 16:43:35 -040028if [ "${PLATFORM}" = "Linux" ]; then
agsantosd09cc6d2020-11-06 17:34:46 -050029 PLATFORM="linux-gnu"
agsantos1bbc7cc2021-05-20 16:43:35 -040030 CONTRIB_PLATFORM_CURT=${ARCH}
31 echo "Building with ${PLATFORM}"
32elif [ "${PLATFORM}" = "Darwin" ]; then
33 PLATFORM="darwin"
34 SO_FILE_NAME="lib${PLUGIN_NAME}.dylib"
35 alias nproc='sysctl -n hw.logicalcpu'
36 CONTRIB_PLATFORM_CURT=${ARCH}-apple
37 CONTRIB_PLATFORM_EXTRA=$(uname -r)
38 echo "Building with ${PLATFORM}"
agsantosd09cc6d2020-11-06 17:34:46 -050039fi
40
41while getopts t:c:p OPT; do
42 case "$OPT" in
43 t)
44 PLATFORM="${OPTARG}"
45 ;;
46 c)
47 PROCESSOR="${OPTARG}"
48 ;;
49 p)
50 ;;
51 \?)
52 exit 1
53 ;;
54 esac
55done
56
57if [ "${PLATFORM}" = "linux-gnu" ] || [ "${PLATFORM}" = "redhat-linux" ]
58then
59 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
60
agsantosd09cc6d2020-11-06 17:34:46 -050061 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
62
63 # Compile
64 clang++ -std=c++17 -shared -fPIC \
65 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
66 -Wall -Wextra \
67 -Wno-unused-variable \
68 -Wno-unused-function \
69 -Wno-unused-parameter \
70 -I"." \
71 -I"${DAEMON_SRC}" \
72 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
73 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
74 -I"${PLUGINS_LIB}" \
75 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -050076 ./../lib/frameUtils.cpp \
agsantosd09cc6d2020-11-06 17:34:46 -050077 CoinCircleMediaHandler.cpp \
78 CenterCircleVideoSubscriber.cpp \
79 CenterCircleMediaHandler.cpp \
80 CoinCircleVideoSubscriber.cpp \
81 main.cpp \
82 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
83 -l:libswscale.a \
84 -l:libavutil.a \
85 -lopencv_imgproc \
86 -lopencv_core \
87 -lva \
agsantos1bbc7cc2021-05-20 16:43:35 -040088 -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
89
90elif [ "${PLATFORM}" = "darwin" ]
91then
92 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME}
93
94 CONTRIB_PLATFORM=${CONTRIB_PLATFORM_CURT}-${PLATFORM}
95
96 # Compile
97 clang++ -std=c++17 -shared -fPIC \
98 -Wl,-no_compact_unwind -Wl,-framework,CoreFoundation \
99 -Wl,-framework,Security -Wl,-framework,VideoToolbox \
100 -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo \
101 -Wl,-framework,OpenCl -Wl,-framework,Accelerate \
102 -Wl,-rpath,"\${ORIGIN}" \
103 -Wall -Wextra \
104 -Wno-unused-variable \
105 -Wno-unused-function \
106 -Wno-unused-parameter \
107 -I"." \
108 -I"${DAEMON_SRC}" \
109 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/include" \
110 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/include/opencv4" \
111 -I"${PLUGINS_LIB}" \
112 ./../lib/accel.cpp \
113 ./../lib/frameUtils.cpp \
114 CoinCircleMediaHandler.cpp \
115 CenterCircleVideoSubscriber.cpp \
116 CenterCircleMediaHandler.cpp \
117 CoinCircleVideoSubscriber.cpp \
118 main.cpp \
119 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}${CONTRIB_PLATFORM_EXTRA}/lib/" \
120 -lswscale \
121 -lavutil \
122 -lopencv_imgproc \
123 -lopencv_core \
124 -lvpx -lx264 -lbz2 -liconv -lz -lspeex -lopus \
125 -o "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
126
127 install_name_tool -id "@loader_path/${SO_FILE_NAME}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
128
129 if [ -n "${APPLE_SIGN_CERTIFICATE}" ]; then
130 codesign --force --verify --timestamp -o runtime --sign "${APPLE_SIGN_CERTIFICATE}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
131 ditto -c -k --rsrc "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}" "build-local/${SO_FILE_NAME}.zip"
132 LIBRARYNAME=${PLUGIN_NAME} sh ./../notarize.sh
133 cd ..
134 ditto -x -k "build-local/${SO_FILE_NAME}.zip" "build-local/notarized"
135 cp "build-local/notarized/${SO_FILE_NAME}" "build-local/jpl/lib/${CONTRIB_PLATFORM}/${SO_FILE_NAME}"
136 fi
agsantosd09cc6d2020-11-06 17:34:46 -0500137
138elif [ "${PLATFORM}" = "android" ]
139then
140 python3 ./../SDK/jplManipulation.py --preassemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM}
141
142 if [ -z "$ANDROID_NDK" ]; then
143 ANDROID_NDK="/home/${USER}/Android/Sdk/ndk/21.1.6352462"
144 echo "ANDROID_NDK not provided, building with ${ANDROID_NDK}"
145 fi
146
147 #=========================================================
148 # Check if the ANDROID_ABI was provided
149 # if not, set default
150 #=========================================================
151 if [ -z "$ANDROID_ABI" ]; then
152 ANDROID_ABI="armeabi-v7a arm64-v8a x86_64"
153 echo "ANDROID_ABI not provided, building for ${ANDROID_ABI}"
154 fi
155
156 buildlib() {
157 echo "$CURRENT_ABI"
158
159 #=========================================================
160 # ANDROID TOOLS
161 #=========================================================
162 export HOST_TAG=linux-x86_64
163 export TOOLCHAIN=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_TAG
164
165 if [ "$CURRENT_ABI" = armeabi-v7a ]
166 then
agsantos7ad7a3a2021-01-19 12:57:54 -0500167 export AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
168 export AS=$TOOLCHAIN/bin/arm-linux-androideabi-as
agsantosd09cc6d2020-11-06 17:34:46 -0500169 export CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang
170 export CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++
agsantos7ad7a3a2021-01-19 12:57:54 -0500171 export LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
172 export RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
agsantosd09cc6d2020-11-06 17:34:46 -0500173 export STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
174 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm/sysroot
175
176 elif [ "$CURRENT_ABI" = arm64-v8a ]
177 then
178 export AR=$TOOLCHAIN/bin/aarch64-linux-android-ar
179 export AS=$TOOLCHAIN/bin/aarch64-linux-android-as
180 export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
181 export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++
182 export LD=$TOOLCHAIN/bin/aarch64-linux-android-ld
183 export RANLIB=$TOOLCHAIN/bin/aarch64-linux-android-ranlib
184 export STRIP=$TOOLCHAIN/bin/aarch64-linux-android-strip
185 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-arm64/sysroot
186
187 elif [ "$CURRENT_ABI" = x86_64 ]
188 then
189 export AR=$TOOLCHAIN/bin/x86_64-linux-android-ar
190 export AS=$TOOLCHAIN/bin/x86_64-linux-android-as
191 export CC=$TOOLCHAIN/bin/x86_64-linux-android21-clang
192 export CXX=$TOOLCHAIN/bin/x86_64-linux-android21-clang++
193 export LD=$TOOLCHAIN/bin/x86_64-linux-android-ld
194 export RANLIB=$TOOLCHAIN/bin/x86_64-linux-android-ranlib
195 export STRIP=$TOOLCHAIN/bin/x86_64-linux-android-strip
196 export ANDROID_SYSROOT=${DAEMON}/../client-android/android-toolchain-21-x86_64/sysroot
197
198 else
199 echo "ABI NOT OK" >&2
200 exit 1
201 fi
202
203 #=========================================================
204 # CONTRIBS
205 #=========================================================
206 if [ "$CURRENT_ABI" = armeabi-v7a ]
207 then
208 CONTRIB_PLATFORM=arm-linux-androideabi
209
210 elif [ "$CURRENT_ABI" = arm64-v8a ]
211 then
212 CONTRIB_PLATFORM=aarch64-linux-android
213
214 elif [ "$CURRENT_ABI" = x86_64 ]
215 then
216 CONTRIB_PLATFORM=x86_64-linux-android
217 fi
218
219 #NDK SOURCES FOR cpufeatures
220 NDK_SOURCES=${ANDROID_NDK}/sources/android
221
222 #=========================================================
223 # LD_FLAGS
224 #=========================================================
225 if [ "$CURRENT_ABI" = armeabi-v7a ]
226 then
227 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi -L${ANDROID_SYSROOT}/usr/lib/arm-linux-androideabi/21"
228 elif [ "$CURRENT_ABI" = arm64-v8a ]
229 then
230 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android -L${ANDROID_SYSROOT}/usr/lib/aarch64-linux-android/21"
231 elif [ "$CURRENT_ABI" = x86_64 ]
232 then
233 export EXTRA_LDFLAGS="${EXTRA_LDFLAGS} -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android -L${ANDROID_SYSROOT}/usr/lib/x86_64-linux-android/21"
234 fi
235
236 #=========================================================
237 # Compile the plugin
238 #=========================================================
239
240 # Create so destination folder
agsantosc9181b42020-11-26 12:03:04 -0500241 $CXX --std=c++17 -O3 -g -fPIC \
agsantosd09cc6d2020-11-06 17:34:46 -0500242 -Wl,-Bsymbolic,-rpath,"\${ORIGIN}" \
243 -shared \
244 -Wall -Wextra \
245 -Wno-unused-variable \
246 -Wno-unused-function \
247 -Wno-unused-parameter \
248 -I"." \
249 -I"${DAEMON_SRC}" \
250 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include" \
251 -I"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/include/opencv4" \
252 -I"${PLUGINS_LIB}" \
253 ./../lib/accel.cpp \
agsantosc9181b42020-11-26 12:03:04 -0500254 ./../lib/frameUtils.cpp \
agsantosd09cc6d2020-11-06 17:34:46 -0500255 CoinCircleMediaHandler.cpp \
256 CenterCircleVideoSubscriber.cpp \
257 CenterCircleMediaHandler.cpp \
258 CoinCircleVideoSubscriber.cpp \
259 main.cpp \
260 -L"${CONTRIB_PATH}/${CONTRIB_PLATFORM}/lib/" \
261 -lswscale \
262 -lavutil \
263 -lopencv_imgproc \
264 -lopencv_core \
265 -llog -lz \
266 --sysroot=$ANDROID_SYSROOT \
267 -o "build-local/jpl/lib/$CURRENT_ABI/${SO_FILE_NAME}"
268 }
269
270 # Build the so
271 for i in ${ANDROID_ABI}; do
272 CURRENT_ABI=$i
273 buildlib
274 done
275fi
276
277python3 ./../SDK/jplManipulation.py --assemble --plugin=${PLUGIN_NAME} --distribution=${PLATFORM} --extraPath=${EXTRAPATH}