Added build scripts for android.

M committed Mar 16, 2021 at 20:18 UTC a319d1e6efe73e968f5147c668a564206d5e50e9
11 files changed +319
scripts/android/build_all.sh new
+8
@@ -0,0 +1,8 @@
1 +# /bin/bash
2 +
3 +./build_iconv.sh
4 +./build_boost.sh
5 +./build_openssl.sh
6 +./build_sodium.sh
7 +./build_zmq.sh
8 +./build_monero.sh
scripts/android/build_boost.sh new
+16
@@ -0,0 +1,16 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +TOOLCHAIN_BASE_DIR=${WORKDIR}/toolchain
5 +ORIGINAL_PATH=$PATH
6 +
7 +for arch in "aarch" "aarch64" "i686" "x86_64"
8 +do
9 +
10 +PREFIX=$WORKDIR/prefix_${arch}
11 +PATH="${TOOLCHAIN_BASE_DIR}_${arch}/bin:${ORIGINAL_PATH}"
12 +
13 +./init_boost.sh $arch
14 +./finish_boost.sh $arch
15 +
16 +done
scripts/android/build_iconv.sh new
+38
@@ -0,0 +1,38 @@
1 +# /bin/bash
2 +
3 +export WORKDIR=/opt/android
4 +export ICONV_FILENAME=libiconv-1.15.tar.gz
5 +export ICONV_FILE_PATH=$WORKDIR/$ICONV_FILENAME
6 +export ICONV_SRC_DIR=$WORKDIR/libiconv-1.15
7 +
8 +wget http://ftp.gnu.org/pub/gnu/libiconv/$ICONV_FILENAME -O $ICONV_FILE_PATH
9 +
10 +ORIGINAL_PATH=$PATH
11 +TOOLCHAIN_BASE_DIR=${WORKDIR}/toolchain
12 +
13 +for arch in aarch aarch64 i686 x86_64
14 +do
15 +
16 +PREFIX=${WORKDIR}/prefix_${arch}
17 +PATH="${TOOLCHAIN_BASE_DIR}_${arch}/bin:${ORIGINAL_PATH}"
18 +
19 +case $arch in
20 + "aarch" )
21 + CLANG=arm-linux-androideabi-clang
22 + CXXLANG=arm-linux-androideabi-clang++
23 + HOST="arm-linux-android";;
24 + * )
25 + CLANG=${arch}-linux-android-clang
26 + CXXLANG=${arch}-linux-android-clang++
27 + HOST="${arch}-linux-android";;
28 +esac
29 +
30 +cd $WORKDIR
31 +rm -rf $ICONV_SRC_DIR
32 +tar -xzf $ICONV_FILE_PATH -C $WORKDIR
33 +cd $ICONV_SRC_DIR
34 +CC=${CLANG} CXX=${CXXLANG} ./configure --build=x86_64-linux-gnu --host=${HOST} --prefix=${PREFIX} --disable-rpath
35 +make
36 +make install
37 +
38 +done
scripts/android/build_monero.sh new
+70
@@ -0,0 +1,70 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +TOOLCHAIN_BASE_DIR=${WORKDIR}/toolchain
5 +ORIGINAL_PATH=$PATH
6 +MONERO_BRANCH=v0.17.1.9-android
7 +MONERO_SRC_DIR=${WORKDIR}/monero
8 +
9 +git clone https://github.com/cake-tech/monero.git ${MONERO_SRC_DIR} --branch ${MONERO_BRANCH}
10 +cd $MONERO_SRC_DIR
11 +git submodule init
12 +git submodule update
13 +
14 +for arch in "aarch" "aarch64" "i686" "x86_64"
15 +do
16 +FLAGS=""
17 +PREFIX=${WORKDIR}/prefix_${arch}
18 +ANDROID_STANDALONE_TOOLCHAIN_PATH="${TOOLCHAIN_BASE_DIR}_${arch}"
19 +PATH="${ANDROID_STANDALONE_TOOLCHAIN_PATH}/bin:${ORIGINAL_PATH}"
20 +DEST_LIB_DIR=${PREFIX}/lib/monero
21 +DEST_INCLUDE_DIR=${PREFIX}/include
22 +export CMAKE_INCLUDE_PATH="${PREFIX}/include"
23 +export CMAKE_LIBRARY_PATH="${PREFIX}/lib"
24 +
25 +mkdir -p $DEST_LIB_DIR
26 +mkdir -p $DEST_INCLUDE_DIR
27 +
28 +case $arch in
29 + "aarch" )
30 + CLANG=arm-linux-androideabi-clang
31 + CXXLANG=arm-linux-androideabi-clang++
32 + BUILD_64=OFF
33 + TAG="android-armv7"
34 + ARCH="armv7-a"
35 + ARCH_ABI="armeabi-v7a"
36 + FLAGS="-D CMAKE_ANDROID_ARM_MODE=ON -D NO_AES=true";;
37 + "aarch64" )
38 + CLANG=aarch64-linux-androideabi-clang
39 + CXXLANG=aarch64-linux-androideabi-clang++
40 + BUILD_64=ON
41 + TAG="android-armv8"
42 + ARCH="armv8-a"
43 + ARCH_ABI="arm64-v8a";;
44 + "i686" )
45 + CLANG=i686-linux-androideabi-clang
46 + CXXLANG=i686-linux-androideabi-clang++
47 + BUILD_64=OFF
48 + TAG="android-x86"
49 + ARCH="i686"
50 + ARCH_ABI="x86";;
51 + "x86_64" )
52 + CLANG=x86_64-linux-androideabi-clang
53 + CXXLANG=x86_64-linux-androideabi-clang++
54 + BUILD_64=ON
55 + TAG="android-x86_64"
56 + ARCH="x86-64"
57 + ARCH_ABI="x86_64";;
58 +esac
59 +
60 +cd $MONERO_SRC_DIR
61 +rm -rf ./build/release
62 +mkdir -p ./build/release
63 +cd ./build/release
64 +CC=${CLANG} CXX=${CXXLANG} cmake -D USE_DEVICE_TREZOR=OFF -D BUILD_GUI_DEPS=1 -D BUILD_TESTS=OFF -D ARCH=${ARCH} -D STATIC=ON -D BUILD_64=${BUILD_64} -D CMAKE_BUILD_TYPE=release -D ANDROID=true -D INSTALL_VENDORED_LIBUNBOUND=ON -D BUILD_TAG=${TAG} -D CMAKE_SYSTEM_NAME="Android" -D CMAKE_ANDROID_STANDALONE_TOOLCHAIN="${ANDROID_STANDALONE_TOOLCHAIN_PATH}" -D CMAKE_ANDROID_ARCH_ABI=${ARCH_ABI} $FLAGS ../..
65 +make wallet_api -j4
66 +find . -path ./lib -prune -o -name '*.a' -exec cp '{}' lib \;
67 +
68 +cp -r ./lib/* $DEST_LIB_DIR
69 +cp ../../src/wallet/api/wallet2_api.h $DEST_INCLUDE_DIR
70 +done
scripts/android/build_openssl.sh new
+44
@@ -0,0 +1,44 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +OPENSSL_FILENAME=openssl-1.0.2p.tar.gz
5 +OPENSSL_FILE_PATH=$WORKDIR/$OPENSSL_FILENAME
6 +OPENSSL_SRC_DIR=$WORKDIR/openssl-1.0.2p
7 +ZLIB_FILENAME=zlib-1.2.11.tar.gz
8 +ZLIB_FILE_PATH=$WORKDIR/$ZLIB_FILENAME
9 +ZLIB_SRC_DIR=$WORKDIR/zlib-1.2.11
10 +ORIGINAL_PATH=$PATH
11 +TOOLCHAIN_BASE_DIR=${WORKDIR}/toolchain
12 +
13 +wget https://zlib.net/$ZLIB_FILENAME -O $ZLIB_FILE_PATH
14 +tar -xzf $ZLIB_FILE_PATH -C $WORKDIR
15 +cd $ZLIB_SRC_DIR
16 +CC=clang CXX=clang++ ./configure --static
17 +make
18 +
19 +wget https://www.openssl.org/source/$OPENSSL_FILENAME -O $OPENSSL_FILE_PATH
20 +
21 +for arch in "aarch" "aarch64" "i686" "x86_64"
22 +do
23 +
24 +PREFIX=$WORKDIR/prefix_${arch}
25 +PATH="${TOOLCHAIN_BASE_DIR}_${arch}/bin:${ORIGINAL_PATH}"
26 +
27 +case $arch in
28 + "aarch" ) TARGET="armv7";;
29 + * ) TARGET="${arch}";;
30 +esac
31 +
32 +cd $WORKDIR
33 +rm -rf $OPENSSL_SRC_DIR
34 +tar -xzf $OPENSSL_FILE_PATH -C $WORKDIR
35 +cd $OPENSSL_SRC_DIR
36 +sed -i -e "s/mandroid/target\ ${TARGET}\-linux\-android/" Configure
37 +CC=clang CXX=clang++ ./Configure android no-asm no-shared --static --with-zlib-include=${WORKDIR}/zlib --with-zlib-lib=${ZLIB_SRC_DIR} --prefix=${PREFIX} --openssldir=${PREFIX}
38 +make
39 +make install
40 +
41 +
42 +done
43 +
44 +
scripts/android/build_sodium.sh new
+31
@@ -0,0 +1,31 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +TOOLCHAIN_BASE_DIR=${WORKDIR}/toolchain
5 +SODIUM_SRC_DIR=${WORKDIR}/libsodium
6 +SODIUM_BRANCH=1.0.16
7 +ORIGINAL_PATH=$PATH
8 +
9 +for arch in "aarch" "aarch64" "i686" "x86_64"
10 +do
11 +
12 +PREFIX=$WORKDIR/prefix_${arch}
13 +PATH="${TOOLCHAIN_BASE_DIR}_${arch}/bin:${ORIGINAL_PATH}"
14 +
15 +case $arch in
16 + "aarch" ) TARGET="arm";;
17 + "i686" ) TARGET="x86";;
18 + * ) TARGET="${arch}";;
19 +esac
20 +
21 +HOST="${TARGET}-linux-android"
22 +cd $WORKDIR
23 +rm -rf $SODIUM_SRC_DIR
24 +git clone https://github.com/jedisct1/libsodium.git $SODIUM_SRC_DIR -b $SODIUM_BRANCH
25 +cd $SODIUM_SRC_DIR
26 +./autogen.sh
27 +CC=clang CXX=clang++ ./configure --prefix=${PREFIX} --host=${HOST} --enable-static --disable-shared
28 +make
29 +make install
30 +
31 +done
scripts/android/build_zmq.sh new
+34
@@ -0,0 +1,34 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +TOOLCHAIN_BASE_DIR=${WORKDIR}/toolchain
5 +ZMQ_SRC_DIR=$WORKDIR/libzmq
6 +ZMQ_BRANCH=master
7 +ZMQ_COMMIT_HASH=501d0815bf2b0abb93be8214fc66519918ef6c40
8 +ORIGINAL_PATH=$PATH
9 +
10 +
11 +for arch in "aarch" "aarch64" "i686" "x86_64"
12 +do
13 +
14 +PREFIX=$WORKDIR/prefix_${arch}
15 +PATH="${TOOLCHAIN_BASE_DIR}_${arch}/bin:${ORIGINAL_PATH}"
16 +
17 +case $arch in
18 + "aarch" ) TARGET="arm";;
19 + "i686" ) TARGET="x86";;
20 + * ) TARGET="${arch}";;
21 +esac
22 +
23 +HOST="${TARGET}-linux-android"
24 +cd $WORKDIR
25 +rm -rf $ZMQ_SRC_DIR
26 +git clone https://github.com/zeromq/libzmq.git ${ZMQ_SRC_DIR} -b ${ZMQ_BRANCH}
27 +cd $ZMQ_SRC_DIR
28 +git checkout ${ZMQ_COMMIT_HASH}
29 +./autogen.sh
30 +CC=clang CXX=clang++ ./configure --prefix=${PREFIX} --host=${HOST} --enable-static --disable-shared
31 +make
32 +make install
33 +
34 +done
scripts/android/copy_monero_deps.sh new
+34
@@ -0,0 +1,34 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +CW_DIR=${WORKDIR}/cake_wallet
5 +CW_EXRTERNAL_DIR=${CW_DIR}/cw_monero/ios/External/android
6 +
7 +for arch in "aarch" "aarch64" "i686" "x86_64"
8 +do
9 +
10 +PREFIX=${WORKDIR}/prefix_${arch}
11 +ABI=""
12 +
13 +case $arch in
14 + "aarch" )
15 + ABI="armeabi-v7a";;
16 + "aarch64" )
17 + ABI="arm64-v8a";;
18 + "i686" )
19 + ABI="x86";;
20 + "x86_64" )
21 + ABI="x86_64";;
22 +esac
23 +
24 +LIB_DIR=${CW_EXRTERNAL_DIR}/${ABI}/lib
25 +INCLUDE_DIR=${CW_EXRTERNAL_DIR}/${ABI}/include
26 +
27 +mkdir -p $LIB_DIR
28 +mkdir -p $INCLUDE_DIR
29 +
30 +cp -r ${PREFIX}/lib/* $LIB_DIR
31 +cp -r ${PREFIX}/include/* $INCLUDE_DIR
32 +
33 +
34 +done
scripts/android/finish_boost.sh new
+9
@@ -0,0 +1,9 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +ARCH=$1
5 +PREFIX="${WORKDIR}/prefix_${ARCH}"
6 +BOOST_SRC_DIR=$WORKDIR/boost_1_68_0
7 +
8 +cd $BOOST_SRC_DIR
9 +./b2 --build-type=minimal link=static runtime-link=static --with-chrono --with-date_time --with-filesystem --with-program_options --with-regex --with-serialization --with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang threading=multi threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} install
scripts/android/init_boost.sh new
+18
@@ -0,0 +1,18 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +ARCH=$1
5 +PREFIX="${WORKDIR}/prefix_${ARCH}"
6 +BOOST_FILENAME=boost_1_68_0.tar.bz2
7 +BOOST_FILE_PATH=$WORKDIR/$BOOST_FILENAME
8 +BOOST_SRC_DIR=$WORKDIR/boost_1_68_0
9 +
10 +if [ ! -e "$BOOST_FILE_PATH" ]; then
11 + wget https://dl.bintray.com/boostorg/release/1.68.0/source/$BOOST_FILENAME -O $BOOST_FILE_PATH
12 +fi
13 +
14 +cd $WORKDIR
15 +rm -rf $BOOST_SRC_DIR
16 +tar -xvf $BOOST_FILE_PATH -C $WORKDIR
17 +cd $BOOST_SRC_DIR
18 +./bootstrap.sh --prefix=${PREFIX}
scripts/android/install_ndk.sh new
+17
@@ -0,0 +1,17 @@
1 +# /bin/bash
2 +
3 +WORKDIR=/opt/android
4 +ANDROID_NDK_ZIP=${WORKDIR}/android-ndk-r17c.zip
5 +ANDROID_NDK_ROOT=${WORKDIR}/android-ndk-r17c
6 +TOOLCHAIN_DIR=${WORKDIR}/toolchain
7 +TOOLCHAIN_A32_DIR=${TOOLCHAIN_DIR}_aarch
8 +TOOLCHAIN_A64_DIR=${TOOLCHAIN_DIR}_aarch64
9 +TOOLCHAIN_x86_DIR=${TOOLCHAIN_DIR}_i686
10 +TOOLCHAIN_x86_64_DIR=${TOOLCHAIN_DIR}_x86_64
11 +
12 +wget https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip -O /opt/android/android-ndk-r17c.zip
13 +unzip /opt/android/android-ndk-r17c.zip -d $WORKDIR
14 +${ANDROID_NDK_ROOT}/build/tools/make_standalone_toolchain.py --arch arm64 --api 21 --install-dir ${TOOLCHAIN_A64_DIR} --stl=libc++
15 +${ANDROID_NDK_ROOT}/build/tools/make_standalone_toolchain.py --arch arm --api 21 --install-dir ${TOOLCHAIN_A32_DIR} --stl=libc++
16 +${ANDROID_NDK_ROOT}/build/tools/make_standalone_toolchain.py --arch x86 --api 21 --install-dir ${TOOLCHAIN_x86_DIR} --stl=libc++
17 +${ANDROID_NDK_ROOT}/build/tools/make_standalone_toolchain.py --arch x86_64 --api 21 --install-dir ${TOOLCHAIN_x86_64_DIR} --stl=libc++