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