1#!/bin/bash -i
2set -e
3
4##################################################
5### SET THE PATH TO YOUR ANDROID NDK DIRECTORY ###
6##################################################
7if [ -z "$NDK_ROOT" ]; then
8    NDK_ROOT=${HOME}/android-ndk
9fi
10##################################################
11# PATH OF THE MEGA SDK RELATIVE TO jni/mega/sdk OR ABSOLUTE
12MEGASDK_ROOT=../../../../../../../../..
13##################################################
14##################################################
15# LIST OF ARCHS TO BE BUILT.
16if [ -z "${BUILD_ARCHS}" ]; then
17    # If no environment variable is defined, use all archs.
18    BUILD_ARCHS="x86 armeabi-v7a x86_64 arm64-v8a"
19fi
20##################################################
21
22if [ ! -d "${NDK_ROOT}" ]; then
23    echo "* NDK_ROOT not set. Please download ndk r16b and export NDK_ROOT variable or create a link at ${HOME}/android-ndk and try again."
24    exit 1
25fi
26
27NDK_BUILD=${NDK_ROOT}/ndk-build
28JNI_PATH=`pwd`
29CC=`${NDK_ROOT}/ndk-which gcc`
30LIBDIR=${JNI_PATH}/../obj/local/armeabi
31JAVA_OUTPUT_PATH=${JNI_PATH}/../java
32APP_PLATFORM=`grep APP_PLATFORM Application.mk | cut -d '=' -f 2`
33ANDROID_API=21
34LOG_FILE=/dev/null
35
36CRYPTOPP=cryptopp
37CRYPTOPP_VERSION=820
38CRYPTOPP_SOURCE_FILE=cryptopp${CRYPTOPP_VERSION}.zip
39CRYPTOPP_SOURCE_FOLDER=${CRYPTOPP}/${CRYPTOPP}
40CRYPTOPP_DOWNLOAD_URL=http://www.cryptopp.com/${CRYPTOPP_SOURCE_FILE}
41CRYPTOPP_SHA1="b042d2f0c93410abdec7c12bcd92787d019f8da1"
42
43SQLITE=sqlite
44SQLITE_VERSION=3300100
45SQLITE_YEAR=2019
46SQLITE_BASE_NAME=sqlite-amalgamation-${SQLITE_VERSION}
47SQLITE_SOURCE_FILE=${SQLITE_BASE_NAME}.zip
48SQLITE_SOURCE_FOLDER=${SQLITE}/${SQLITE}
49SQLITE_DOWNLOAD_URL=https://www.sqlite.org/${SQLITE_YEAR}/${SQLITE_SOURCE_FILE}
50SQLITE_SHA1="ff9b4e140fe0764bc7bc802facf5ac164443f517"
51
52CURL=curl
53CURL_VERSION=7.67.0
54C_ARES_VERSION=1.15.0
55CURL_EXTRA="--disable-smb --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-sspi"
56CURL_SOURCE_FILE=curl-${CURL_VERSION}.tar.gz
57CURL_SOURCE_FOLDER=curl-${CURL_VERSION}
58CURL_DOWNLOAD_URL=http://curl.haxx.se/download/${CURL_SOURCE_FILE}
59CURL_SHA1="a91652f1eaa810866dce55b2d177c5b20f4aa7a7"
60
61ARES_SOURCE_FILE=c-ares-${C_ARES_VERSION}.tar.gz
62ARES_SOURCE_FOLDER=c-ares-${C_ARES_VERSION}
63ARES_CONFIGURED=${CURL}/${ARES_SOURCE_FOLDER}/Makefile.inc
64ARES_DOWNLOAD_URL=http://c-ares.haxx.se/download/${ARES_SOURCE_FILE}
65ARES_SHA1="74a50c02b7f051c4fb66c0f60f187350f196d908"
66
67OPENSSL=openssl
68OPENSSL_VERSION=1.1.1d
69OPENSSL_SOURCE_FILE=openssl-${OPENSSL_VERSION}.tar.gz
70OPENSSL_SOURCE_FOLDER=${OPENSSL}-${OPENSSL_VERSION}
71OPENSSL_DOWNLOAD_URL=https://www.openssl.org/source/old/${OPENSSL_VERSION%?}/${OPENSSL_SOURCE_FILE}
72OPENSSL_PREFIX=${JNI_PATH}/${OPENSSL}/${OPENSSL_SOURCE_FOLDER}
73OPENSSL_SHA1="056057782325134b76d1931c48f2c7e6595d7ef4"
74
75SODIUM=sodium
76SODIUM_VERSION=1.0.18
77SODIUM_SOURCE_FILE=libsodium-${SODIUM_VERSION}.tar.gz
78SODIUM_SOURCE_FOLDER=libsodium-${SODIUM_VERSION}
79SODIUM_DOWNLOAD_URL=https://download.libsodium.org/libsodium/releases/${SODIUM_SOURCE_FILE}
80SODIUM_SHA1="795b73e3f92a362fabee238a71735579bf46bb97"
81
82LIBUV=libuv
83LIBUV_VERSION=1.8.0
84LIBUV_SOURCE_FILE=libuv-v${LIBUV_VERSION}.tar.gz
85LIBUV_SOURCE_FOLDER=libuv-v${LIBUV_VERSION}
86LIBUV_DOWNLOAD_URL=http://dist.libuv.org/dist/v${LIBUV_VERSION}/${LIBUV_SOURCE_FILE}
87LIBUV_SHA1="91ea51844ec0fac1c6358a7ad3e8bba128e9d0cc"
88
89MEDIAINFO=mediainfo
90MEDIAINFO_VERSION=4ee7f77c087b29055f48d539cd679de8de6f9c48
91MEDIAINFO_SOURCE_FILE=${MEDIAINFO_VERSION}.zip
92MEDIAINFO_SOURCE_FOLDER=MediaInfoLib-${MEDIAINFO_VERSION}
93MEDIAINFO_DOWNLOAD_URL=https://github.com/meganz/MediaInfoLib/archive/${MEDIAINFO_SOURCE_FILE}
94MEDIAINFO_SHA1="30927c761418e807d8d3b64e171a6c9ab9659c2e"
95
96ZENLIB=ZenLib
97ZENLIB_VERSION=6694a744d82d942c4a410f25f916561270381889
98ZENLIB_SOURCE_FILE=${ZENLIB_VERSION}.zip
99ZENLIB_SOURCE_FOLDER=ZenLib-${ZENLIB_VERSION}
100ZENLIB_DOWNLOAD_URL=https://github.com/MediaArea/ZenLib/archive/${ZENLIB_SOURCE_FILE}
101ZENLIB_SHA1="1af04654c9618f54ece624a0bad881a3cfef3692"
102
103function downloadCheckAndUnpack()
104{
105    local URL=$1
106    local FILENAME=$2
107    local SHA1=$3
108    local TARGETPATH=$4
109
110    if [[ -f ${FILENAME} ]]; then
111        echo "* Already downloaded: '${FILENAME}'"
112        local CURRENTSHA1=`sha1sum ${FILENAME} | cut -d " " -f 1`
113        if [ "${SHA1}" != "${CURRENTSHA1}" ]; then
114            echo "* Invalid hash. Redownloading..."
115            wget -O ${FILENAME} ${URL} &>> ${LOG_FILE}
116        fi
117    else
118        echo "* Downloading '${FILENAME}' ..."
119        wget -O ${FILENAME} ${URL} &>> ${LOG_FILE}
120    fi
121
122    local NEWSHA1=`sha1sum ${FILENAME} | cut -d " " -f 1`
123    if [ "${SHA1}" != "${NEWSHA1}" ]; then
124        echo "* Invalid hash. It is ${NEWSHA1} but it should be ${SHA1}. Aborting..."
125        exit 1
126    fi
127
128    if [[ "${FILENAME}" =~ \.tar\.[^\.]+$ ]]; then
129        echo "* Extracting TAR file..."
130        tar --overwrite -xf ${FILENAME} -C ${TARGETPATH} &>> ${LOG_FILE}
131    elif [[ "${FILENAME}" =~ \.zip$ ]]; then
132        echo "* Extracting ZIP file..."
133    	unzip -o ${FILENAME} -d ${TARGETPATH} &>> ${LOG_FILE}
134    else
135        echo "* Dont know how to extract '${FILENAME}'"
136        exit 1
137    fi
138
139    echo "* Extraction finished"
140}
141
142function createMEGABindings
143{
144    mkdir mega/sdk &>> ${LOG_FILE} || true
145    rm mega/sdk/src &>> ${LOG_FILE} || true
146    ln -s ${MEGASDK_ROOT}/src mega/sdk/src &>> ${LOG_FILE} || true
147    rm mega/sdk/include &>> ${LOG_FILE} || true
148    ln -s ${MEGASDK_ROOT}/include mega/sdk/include &>> ${LOG_FILE} || true
149    rm mega/sdk/bindings &>> ${LOG_FILE} || true
150    ln -s ${MEGASDK_ROOT}/bindings mega/sdk/bindings &>> ${LOG_FILE} || true
151    rm mega/sdk/third_party &>> ${LOG_FILE} || true
152    ln -s ${MEGASDK_ROOT}/third_party mega/sdk/third_party &>> ${LOG_FILE} || true
153
154    echo "* Creating MEGA Java bindings"
155    mkdir -p ../java/nz/mega/sdk
156    swig -c++ -Imega/sdk/include -java -package nz.mega.sdk -outdir ${JAVA_OUTPUT_PATH}/nz/mega/sdk -o bindings/megasdk.cpp -DHAVE_LIBUV -DENABLE_CHAT mega/sdk/bindings/megaapi.i &>> ${LOG_FILE}
157}
158
159
160if (( $# != 1 )); then
161    echo "Usage: $0 <all | bindings | clean | clean_mega>";
162    exit 0
163fi
164
165if [ "$1" == "bindings" ]; then
166    createMEGABindings
167    echo "* Bindings ready!"
168    echo "* Running ndk-build"
169    ${NDK_BUILD} -j8
170    echo "* ndk-build finished"
171    echo "* Task finished OK"
172    exit 0
173fi
174
175if [ "$1" == "clean_mega" ]; then
176    echo "* Deleting Java bindings"
177    make -C mega -f MakefileBindings clean JAVA_BASE_OUTPUT_PATH=${JAVA_OUTPUT_PATH} &>> ${LOG_FILE}
178    rm -rf megachat/megachat.cpp megachat/megachat.h
179    echo "* Deleting tarballs"
180    rm -rf ../obj/local/armeabi
181    rm -rf ../obj/local/x86
182    rm -rf ../obj/local/arm64-v8a
183    rm -rf ../obj/local/x86_64
184    echo "* Task finished OK"
185    exit 0
186fi
187
188if [ "$1" == "clean" ]; then
189    echo "* Deleting Java bindings"
190    make -C mega -f MakefileBindings clean JAVA_BASE_OUTPUT_PATH=${JAVA_OUTPUT_PATH} &>> ${LOG_FILE}
191    rm -rf megachat/megachat.cpp megachat/megachat.h
192
193    echo "* Deleting source folders"
194    rm -rf ${CRYPTOPP_SOURCE_FOLDER}
195    rm -rf ${SQLITE_SOURCE_FOLDER} ${SQLITE}/${SQLITE_BASE_NAME}
196    rm -rf ${CURL}/${CURL_SOURCE_FOLDER}
197    rm -rf ${CURL}/${CURL}
198    rm -rf ${CURL}/${ARES_SOURCE_FOLDER}
199    rm -rf ${CURL}/ares
200    rm -rf ${OPENSSL}/${OPENSSL_SOURCE_FOLDER}
201    rm -rf ${OPENSSL}/${OPENSSL}
202    rm -rf ${SODIUM}/${SODIUM_SOURCE_FOLDER}
203    rm -rf ${SODIUM}/${SODIUM}
204    rm -rf ${LIBUV}/${LIBUV_SOURCE_FOLDER}
205    rm -rf ${LIBUV}/${LIBUV}
206    rm -rf ${MEDIAINFO}/${ZENLIB_SOURCE_FOLDER}
207    rm -rf ${MEDIAINFO}/${ZENLIB}
208    rm -rf ${MEDIAINFO}/${MEDIAINFO_SOURCE_FOLDER}
209    rm -rf ${MEDIAINFO}/${MEDIAINFO}
210
211    echo "* Deleting tarballs"
212    rm -rf ${CRYPTOPP}/${CRYPTOPP_SOURCE_FILE}
213    rm -rf ${CRYPTOPP}/${CRYPTOPP_SOURCE_FILE}.ready
214    rm -rf ${SQLITE}/${SQLITE_SOURCE_FILE}
215    rm -rf ${SQLITE}/${SQLITE_SOURCE_FILE}.ready
216    rm -rf ${CURL}/${CURL_SOURCE_FILE}
217    rm -rf ${CURL}/${ARES_SOURCE_FILE}
218    rm -rf ${CURL}/${CURL_SOURCE_FILE}.ready
219    rm -rf ${OPENSSL}/${OPENSSL_SOURCE_FILE}
220    rm -rf ${OPENSSL}/${OPENSSL_SOURCE_FILE}.ready
221    rm -rf ${SODIUM}/${SODIUM_SOURCE_FILE}
222    rm -rf ${SODIUM}/${SODIUM_SOURCE_FILE}.ready
223    rm -rf ${LIBUV}/${LIBUV_SOURCE_FILE}
224    rm -rf ${LIBUV}/${LIBUV_SOURCE_FILE}.ready
225    rm -rf ${MEDIAINFO}/${ZENLIB_SOURCE_FILE}
226    rm -rf ${MEDIAINFO}/${ZENLIB_SOURCE_FILE}.ready
227    rm -rf ${MEDIAINFO}/${MEDIAINFO_SOURCE_FILE}
228    rm -rf ${MEDIAINFO}/${MEDIAINFO_SOURCE_FILE}.ready
229
230    echo "* Deleting object files"
231    rm -rf ../obj/local/armeabi-v7a
232    rm -rf ../obj/local/arm64-v8a
233    rm -rf ../obj/local/x86
234    rm -rf ../obj/local/x86_64
235
236    echo "* Deleting libraries"
237    rm -rf ../libs/armeabi-v7a
238    rm -rf ../libs/arm64-v8a
239    rm -rf ../libs/x86
240    rm -rf ../libs/x86_64
241
242    echo "* Task finished OK"
243    exit 0
244fi
245
246if [ "$1" != "all" ]; then
247    echo "Usage: $0 <all | bindings | clean | clean_mega>";
248    exit 1
249fi
250
251echo "* Building ${BUILD_ARCHS} arch(s)"
252
253echo "* Setting up MEGA"
254createMEGABindings
255echo "* MEGA is ready"
256
257echo "* Setting up libsodium"
258if [ ! -f ${SODIUM}/${SODIUM_SOURCE_FILE}.ready ]; then
259    downloadCheckAndUnpack ${SODIUM_DOWNLOAD_URL} ${SODIUM}/${SODIUM_SOURCE_FILE} ${SODIUM_SHA1} ${SODIUM}
260    ln -sf ${SODIUM_SOURCE_FOLDER} ${SODIUM}/${SODIUM}
261    pushd ${SODIUM}/${SODIUM} &>> ${LOG_FILE}
262    export ANDROID_NDK_HOME=${NDK_ROOT}
263    export NDK_PLATFORM=${APP_PLATFORM}
264    ./autogen.sh &>> ${LOG_FILE}
265    echo "#include <limits.h>" >>  src/libsodium/include/sodium/export.h
266    sed -i 's/enable-minimal/enable-minimal --disable-pie/g' dist-build/android-build.sh
267
268    if [ -n "`echo ${BUILD_ARCHS} | grep -w armeabi-v7a`" ]; then
269        echo "* Prebuilding libsodium for ARMv7"
270        dist-build/android-armv7-a.sh &>> ${LOG_FILE}
271        ln -sf libsodium-android-armv7-a libsodium-android-armeabi-v7a
272    fi
273
274    if [ -n "`echo ${BUILD_ARCHS} | grep -w arm64-v8a`" ]; then
275        echo "* Prebuilding libsodium for ARMv8"
276        dist-build/android-armv8-a.sh &>> ${LOG_FILE}
277        ln -sf libsodium-android-armv8-a libsodium-android-arm64-v8a
278    fi
279
280    if [ -n "`echo ${BUILD_ARCHS} | grep -w x86`" ]; then
281        echo "* Prebuilding libsodium for x86"
282        dist-build/android-x86.sh &>> ${LOG_FILE}
283        ln -sf libsodium-android-i686 libsodium-android-x86
284    fi
285
286    if [ -n "`echo ${BUILD_ARCHS} | grep -w x86_64`" ]; then
287        echo "* Prebuilding libsodium for x86_64"
288        dist-build/android-x86_64.sh &>> ${LOG_FILE}
289        ln -sf libsodium-android-westmere libsodium-android-x86_64
290    fi
291
292    popd &>> ${LOG_FILE}
293    touch ${SODIUM}/${SODIUM_SOURCE_FILE}.ready
294fi
295echo "* libsodium is ready"
296
297echo "* Setting up Crypto++"
298if [ ! -f ${CRYPTOPP}/${CRYPTOPP_SOURCE_FILE}.ready ]; then
299    mkdir -p ${CRYPTOPP}/${CRYPTOPP}
300    downloadCheckAndUnpack ${CRYPTOPP_DOWNLOAD_URL} ${CRYPTOPP}/${CRYPTOPP_SOURCE_FILE} ${CRYPTOPP_SHA1} ${CRYPTOPP}/${CRYPTOPP}
301    cp ${NDK_ROOT}/sources/android/cpufeatures/cpu-features.h ${CRYPTOPP}/${CRYPTOPP}/
302    touch ${CRYPTOPP}/${CRYPTOPP_SOURCE_FILE}.ready
303fi
304echo "* Crypto++ is ready"
305
306echo "* Setting up SQLite"
307if [ ! -f ${SQLITE}/${SQLITE_SOURCE_FILE}.ready ]; then
308    downloadCheckAndUnpack ${SQLITE_DOWNLOAD_URL} ${SQLITE}/${SQLITE_SOURCE_FILE} ${SQLITE_SHA1} ${SQLITE}
309    ln -fs ${SQLITE_BASE_NAME} ${SQLITE_SOURCE_FOLDER}
310    touch ${SQLITE}/${SQLITE_SOURCE_FILE}.ready
311fi
312echo "* SQLite is ready"
313
314echo "* Setting up libuv"
315if [ ! -f ${LIBUV}/${LIBUV_SOURCE_FILE}.ready ]; then
316    downloadCheckAndUnpack ${LIBUV_DOWNLOAD_URL} ${LIBUV}/${LIBUV_SOURCE_FILE} ${LIBUV_SHA1} ${LIBUV}
317    ln -sf ${LIBUV_SOURCE_FOLDER} ${LIBUV}/${LIBUV}
318    touch ${LIBUV}/${LIBUV_SOURCE_FILE}.ready
319fi
320echo "* libuv is ready"
321
322echo "* Setting up ZenLib"
323if [ ! -f ${MEDIAINFO}/${ZENLIB_SOURCE_FILE}.ready ]; then
324    downloadCheckAndUnpack ${ZENLIB_DOWNLOAD_URL} ${MEDIAINFO}/${ZENLIB_SOURCE_FILE} ${ZENLIB_SHA1} ${MEDIAINFO}
325    ln -sf ${ZENLIB_SOURCE_FOLDER} ${MEDIAINFO}/${ZENLIB}
326    cp mega/sdk/include/mega/mega_glob.h ${MEDIAINFO}/${ZENLIB}/Source/ZenLib/glob.h
327    touch ${MEDIAINFO}/${ZENLIB_SOURCE_FILE}.ready
328fi
329echo "* ZenLib is ready"
330
331echo "* Setting up MediaInfo"
332if [ ! -f ${MEDIAINFO}/${MEDIAINFO_SOURCE_FILE}.ready ]; then
333    downloadCheckAndUnpack ${MEDIAINFO_DOWNLOAD_URL} ${MEDIAINFO}/${MEDIAINFO_SOURCE_FILE} ${MEDIAINFO_SHA1} ${MEDIAINFO}
334    ln -sf ${MEDIAINFO_SOURCE_FOLDER} ${MEDIAINFO}/${MEDIAINFO}
335    touch ${MEDIAINFO}/${MEDIAINFO_SOURCE_FILE}.ready
336fi
337echo "* MediaInfo is ready"
338
339echo "* Setting up OpenSSL"
340if [ ! -f ${OPENSSL}/${OPENSSL_SOURCE_FILE}.ready ]; then
341    downloadCheckAndUnpack ${OPENSSL_DOWNLOAD_URL} ${OPENSSL}/${OPENSSL_SOURCE_FILE} ${OPENSSL_SHA1} ${OPENSSL}
342    ln -sf ${OPENSSL_SOURCE_FOLDER} ${OPENSSL}/${OPENSSL}
343    pushd ${OPENSSL}/${OPENSSL} &>> ${LOG_FILE}
344    ORIG_PATH=$PATH
345
346    if [ -n "`echo ${BUILD_ARCHS} | grep -w x86`" ]; then
347        echo "* Prebuilding OpenSSL for x86"
348        export ANDROID_NDK_HOME=${NDK_ROOT}
349        PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/:$ORIG_PATH
350        mkdir openssl-android-x86/
351        ./Configure android-x86 -D__ANDROID_API__=${ANDROID_API} --openssldir=${PWD}/openssl-android-x86/ --prefix=${PWD}/openssl-android-x86/ &>> ${LOG_FILE}
352        make -j8 &>> ${LOG_FILE}
353        make install &>> ${LOG_FILE}
354        make clean &>> ${LOG_FILE}
355    fi
356
357    if [ -n "`echo ${BUILD_ARCHS} | grep -w armeabi-v7a`" ]; then
358        echo "* Prebuilding OpenSSL for ARMv7"
359        export ANDROID_NDK_HOME=${NDK_ROOT}
360        PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/:$ORIG_PATH
361        mkdir openssl-android-armeabi-v7a
362        ./Configure android-arm -latomic -D__ANDROID_API__=${ANDROID_API} --openssldir=${PWD}/openssl-android-armeabi-v7a/ --prefix=${PWD}/openssl-android-armeabi-v7a/ &>> ${LOG_FILE}
363        make -j8 &>> ${LOG_FILE}
364        make install &>> ${LOG_FILE}
365        make clean &>> ${LOG_FILE}
366    fi
367
368    if [ -n "`echo ${BUILD_ARCHS} | grep -w x86_64`" ]; then
369        echo "* Prebuilding OpenSSL for x86_64"
370        export ANDROID_NDK_HOME=${NDK_ROOT}
371        PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/:$ORIG_PATH
372        mkdir openssl-android-x86_64/
373        ./Configure android-x86_64 -D__ANDROID_API__=${ANDROID_API} --openssldir=${PWD}/openssl-android-x86_64/ --prefix=${PWD}/openssl-android-x86_64/ &>> ${LOG_FILE}
374        make -j8 &>> ${LOG_FILE}
375        make install &>> ${LOG_FILE}
376        make clean &>> ${LOG_FILE}
377    fi
378
379    if [ -n "`echo ${BUILD_ARCHS} | grep -w arm64-v8a`" ]; then
380        echo "* Prebuilding OpenSSL for ARMv8"
381        export ANDROID_NDK_HOME=${NDK_ROOT}
382        PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/:$ORIG_PATH
383        mkdir -p openssl-android-arm64-v8a
384        ./Configure android-arm64 -latomic -D__ANDROID_API__=${ANDROID_API} --openssldir=${PWD}/openssl-android-arm64-v8a/ --prefix=${PWD}/openssl-android-arm64-v8a/ &>> ${LOG_FILE}
385        make -j8 &>> ${LOG_FILE}
386        make install &>> ${LOG_FILE}
387        make clean &>> ${LOG_FILE}
388    fi
389
390    popd &>> ${LOG_FILE}
391    PATH=$ORIG_PATH
392    touch ${OPENSSL}/${OPENSSL_SOURCE_FILE}.ready
393fi
394echo "* OpenSSL is ready"
395
396echo "* Setting up cURL with c-ares"
397if [ ! -f ${CURL}/${CURL_SOURCE_FILE}.ready ]; then
398    echo "* Setting up cURL"
399    downloadCheckAndUnpack ${CURL_DOWNLOAD_URL} ${CURL}/${CURL_SOURCE_FILE} ${CURL_SHA1} ${CURL}
400    ln -sf ${CURL_SOURCE_FOLDER} ${CURL}/${CURL}
401    echo "* cURL is ready"
402
403    echo "* Setting up c-ares"
404    downloadCheckAndUnpack ${ARES_DOWNLOAD_URL} ${CURL}/${ARES_SOURCE_FILE} ${ARES_SHA1} ${CURL}
405    ln -sf ${ARES_SOURCE_FOLDER} ${CURL}/ares
406    ln -sf ../${ARES_SOURCE_FOLDER} ${CURL}/${CURL_SOURCE_FOLDER}/ares
407    echo "* c-ares is ready"
408    touch ${CURL}/${CURL_SOURCE_FILE}.ready
409fi
410echo "* cURL with c-ares is ready"
411
412echo "* All dependencies are prepared!"
413
414echo "* Building SDK"
415rm -rf ../tmpLibs
416mkdir ../tmpLibs
417if [ -n "`echo ${BUILD_ARCHS} | grep -w x86`" ]; then
418    echo "* Running ndk-build x86"
419    ${NDK_BUILD} V=1 -j8 APP_ABI=x86 &>> ${LOG_FILE}
420    mv ../libs/x86 ../tmpLibs/
421    echo "* ndk-build finished for x86"
422fi
423
424if [ -n "`echo ${BUILD_ARCHS} | grep -w armeabi-v7a`" ]; then
425    echo "* Running ndk-build arm 32bits (armeabi-v7a)"
426    ${NDK_BUILD} V=1 -j8 APP_ABI=armeabi-v7a &>> ${LOG_FILE}
427    mv ../libs/armeabi-v7a ../tmpLibs/
428    echo "* ndk-build finished for arm 32bits (armeabi-v7a)"
429fi
430
431if [ -n "`echo ${BUILD_ARCHS} | grep -w x86_64`" ]; then
432    echo "* Running ndk-build x86_64"
433    ${NDK_BUILD} V=1 -j8 APP_ABI=x86_64 &>> ${LOG_FILE}
434    mv ../libs/x86_64 ../tmpLibs/
435    echo "* ndk-build finished for x86_64"
436fi
437
438if [ -n "`echo ${BUILD_ARCHS} | grep -w arm64-v8a`" ]; then
439    echo "* Running ndk-build arm 64bits (arm64-v8a)"
440    ${NDK_BUILD} V=1 -j8 APP_ABI=arm64-v8a &>> ${LOG_FILE}
441    mv ../libs/arm64-v8a ../tmpLibs/
442    echo "* ndk-build finished for arm 64bits (arm64-v8a)"
443fi
444mv ../tmpLibs/* ../libs/
445rmdir ../tmpLibs/
446
447echo "* Task finished OK"
448