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++