Added scripts for build iOS monero dependencies

M committed Sep 13, 2021 at 19:33 UTC b81f4679860de7914de046c691bcc208227bbb7a
11 files changed +233 -19
cw_monero/ios/Classes/monero_api.cpp
+3 -2
@@ -8,13 +8,14 @@
8 #include "thread"
9 #include "CwWalletListener.h"
10 #if __APPLE__
11 -#include "../External/android/monero/include/wallet2_api.h"
11 +// Fix for randomx on ios
12 +void __clear_cache(void* start, void* end) { }
13 +#include "../External/ios/include/wallet2_api.h"
14 #else
15 #include "../External/android/x86/include/wallet2_api.h"
16 #endif
17
18 using namespace std::chrono_literals;
17 -
19 #ifdef __cplusplus
20 extern "C"
21 {
cw_monero/ios/cw_monero.podspec
+16 -16
@@ -14,41 +14,41 @@ Pod::Spec.new do |s|
14 s.source_files = 'Classes/**/*'
15 s.public_header_files = 'Classes/**/*.h, Classes/*.h, External/ios/libs/monero/include/src/**/*.h, External/ios/libs/monero/include/contrib/**/*.h, External/ios/libs/monero/include/External/ios/**/*.h'
16 s.dependency 'Flutter'
17 - s.platform = :ios, '9.0'
17 + s.platform = :ios, '10.0'
18 s.swift_version = '4.0'
19 s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'arm64', 'ENABLE_BITCODE' => 'NO' }
20 s.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/Classes/*.h" }
21
22 s.subspec 'OpenSSL' do |openssl|
23 - openssl.preserve_paths = 'External/ios/libs/OpenSSL/include/openssl/*.h', 'External/ios/libs/OpenSSL/include/LICENSE'
24 - openssl.vendored_libraries = 'External/ios/libs/OpenSSL/lib/libcrypto.a', 'External/ios/libs/OpenSSL/lib/libssl.a'
23 + openssl.preserve_paths = 'External/ios/include/*.h'
24 + openssl.vendored_libraries = 'External/ios/lib/libcrypto.a', 'External/ios/lib/libssl.a'
25 openssl.libraries = 'ssl', 'crypto'
26 - openssl.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/libs/OpenSSL/include/**" }
26 + openssl.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
27 end
28
29 s.subspec 'Monero' do |monero|
30 - monero.preserve_paths = 'External/ios/libs/monero/include/src/**/*.h', 'External/ios/libs/monero/include/External/ios/**/*.h', 'External/ios/libs/monero/include/contrib/**/*.h'
31 - monero.vendored_libraries = 'External/ios/libs/monero/libs/lib-ios/*.a'
32 - monero.libraries = 'easylogging', 'epee', 'unbound', 'wallet_merged', 'lmdb', 'randomx'
33 - monero.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/libs/monero/include/src/**" }
30 + monero.preserve_paths = 'External/ios/include/**/*.h'
31 + monero.vendored_libraries = 'External/ios/lib/libeasylogging.a', 'External/ios/lib/libepee.a', 'External/ios/lib/liblmdb.a', 'External/ios/lib/librandomx.a', 'External/ios/lib/libunbound.a', 'External/ios/lib/libwallet_merged.a', 'libcryptonote_basic.a', 'libcryptonote_format_utils_basic.a'
32 + monero.libraries = 'easylogging', 'epee', 'unbound', 'wallet_merged', 'lmdb', 'randomx', 'cryptonote_basic', 'cryptonote_format_utils_basic'
33 + monero.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include" }
34 end
35
36 s.subspec 'Boost' do |boost|
37 - boost.preserve_paths = 'External/ios/libs/boost/include/**/*.h', 'External/ios/libs/boost/include/**/*.h'
38 - boost.vendored_libraries = 'External/ios/libs/boost/build/libs/universal/*.a'
39 - boost.libraries = 'boost', 'boost_wserialization', 'boost_thread', 'boost_system', 'boost_signals', 'boost_serialization', 'boost_regex', 'boost_random', 'boost_program_options', 'boost_locale', 'boost_graph', 'boost_filesystem', 'boost_date_time', 'boost_chrono'
40 - boost.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/libs/boost/include/**" }
37 + boost.preserve_paths = 'External/ios/include/**/*.h', 'External/ios/include/**/*.h'
38 + boost.vendored_libraries = 'External/ios/lib/libboost_chrono.a', 'External/ios/lib/libboost_date_time.a', 'External/ios/lib/libboost_filesystem.a', 'External/ios/lib/libboost_graph.a', 'External/ios/lib/libboost_locale.a', 'External/ios/lib/libboost_program_options.a', 'External/ios/lib/libboost_random.a', 'External/ios/lib/libboost_regex.a', 'External/ios/lib/libboost_serialization.a', 'External/ios/lib/libboost_system.a', 'External/ios/lib/libboost_thread.a', 'External/ios/lib/libboost_wserialization.a'
39 + boost.libraries = 'boost_wserialization', 'boost_thread', 'boost_system', 'boost_serialization', 'boost_regex', 'boost_random', 'boost_program_options', 'boost_locale', 'boost_graph', 'boost_filesystem', 'boost_date_time', 'boost_chrono'
40 + boost.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
41 end
42
43 s.subspec 'Sodium' do |sodium|
44 - sodium.preserve_paths = 'External/ios/libs/sodium/include/**/*.h'
45 - sodium.vendored_libraries = 'External/ios/libs/sodium/lib/libsodium.a'
44 + sodium.preserve_paths = 'External/ios/include/**/*.h'
45 + sodium.vendored_libraries = 'External/ios/lib/libsodium.a'
46 sodium.libraries = 'sodium'
47 - sodium.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/libs/sodium/include/**" }
47 + sodium.xcconfig = { 'HEADER_SEARCH_PATHS' => "${PODS_ROOT}/#{s.name}/External/ios/include/**" }
48 end
49
50 s.subspec 'lmdb' do |lmdb|
51 - lmdb.vendored_libraries = 'External/ios/libs/lmdb/liblmdb.a'
51 + lmdb.vendored_libraries = 'External/ios/lib/liblmdb.a'
52 lmdb.libraries = 'lmdb'
53 end
54 end
ios/Podfile.lock
+1 -1
@@ -165,7 +165,7 @@ SPEC CHECKSUMS:
165 BigInt: f668a80089607f521586bbe29513d708491ef2f7
166 connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
167 CryptoSwift: 093499be1a94b0cae36e6c26b70870668cb56060
168 - cw_monero: 78f369253cc913efc23db9cf6be81a11eaf40fe1
168 + cw_monero: c79d5530b828b8013c1db421f1be8bab687f7b7e
169 devicelocale: b22617f40038496deffba44747101255cee005b0
170 DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d
171 DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
scripts/ios/build_all.sh new
+9
@@ -0,0 +1,9 @@
1 +#!/bin/sh
2 +
3 +. ./config.sh
4 +./install_missing_headers.sh
5 +./build_openssl.sh
6 +./build_boost.sh
7 +./build_sodium.sh
8 +./build_zmq.sh
9 +./build_monero.sh
\ No newline at end of file
scripts/ios/build_boost.sh new
+23
@@ -0,0 +1,23 @@
1 +#!/bin/sh
2 +
3 +. ./config.sh
4 +
5 +MIN_IOS_VERSION=10.0
6 +BOOST_URL="https://github.com/cake-tech/Apple-Boost-BuildScript.git"
7 +BOOST_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/Apple-Boost-BuildScript"
8 +BOOST_VERSION=1.74.0
9 +BOOST_LIBS="random regex graph random chrono thread filesystem system date_time locale serialization program_options"
10 +
11 +echo "============================ Boost ============================"
12 +
13 +echo "Cloning Apple-Boost-BuildScript from - $BOOST_URL"
14 +git clone -b build $BOOST_URL $BOOST_DIR_PATH
15 +cd $BOOST_DIR_PATH
16 +./boost.sh -ios \
17 + --min-ios-version ${MIN_IOS_VERSION} \
18 + --boost-libs "${BOOST_LIBS}" \
19 + --boost-version ${BOOST_VERSION} \
20 + --no-framework
21 +
22 +mv ${BOOST_DIR_PATH}/build/boost/${BOOST_VERSION}/ios/release/prefix/include/* $EXTERNAL_IOS_INCLUDE_DIR
23 +mv ${BOOST_DIR_PATH}/build/boost/${BOOST_VERSION}/ios/release/prefix/lib/* $EXTERNAL_IOS_LIB_DIR
\ No newline at end of file
scripts/ios/build_monero.sh new
+61
@@ -0,0 +1,61 @@
1 +#!/bin/sh
2 +
3 +. ./config.sh
4 +
5 +MONERO_URL="https://github.com/monero-project/monero.git"
6 +MONERO_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/monero"
7 +MONERO_VERSION=tags/v0.17.2.3
8 +BUILD_TYPE=release
9 +PREFIX=${EXTERNAL_IOS_DIR}
10 +
11 +echo "Cloning monero from - $MONERO_URL to - $MONERO_DIR_PATH"
12 +git clone $MONERO_URL $MONERO_DIR_PATH
13 +cd $MONERO_DIR_PATH
14 +git checkout $MONERO_VERSION
15 +git submodule update --init --force
16 +mkdir -p build
17 +cd ..
18 +
19 +ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
20 +if [ -z $INSTALL_PREFIX ]; then
21 + INSTALL_PREFIX=${ROOT_DIR}/monero
22 +fi
23 +
24 +for arch in "arm64" #"armv7" "arm64"
25 +do
26 +
27 +echo "Building IOS ${arch}"
28 +export CMAKE_INCLUDE_PATH="${PREFIX}/include"
29 +export CMAKE_LIBRARY_PATH="${PREFIX}/lib"
30 +
31 +case $arch in
32 + "armv7" )
33 + DEST_LIB=../../lib-armv7;;
34 + "arm64" )
35 + DEST_LIB=../../lib-armv8-a;;
36 +esac
37 +
38 +rm -r monero/build > /dev/null
39 +
40 +mkdir -p monero/build/${BUILD_TYPE}
41 +pushd monero/build/${BUILD_TYPE}
42 +cmake -D IOS=ON \
43 + -DARCH=${arch} \
44 + -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
45 + -DSTATIC=ON \
46 + -DBUILD_GUI_DEPS=ON \
47 + -DINSTALL_VENDORED_LIBUNBOUND=ON \
48 + -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} \
49 + -DUSE_DEVICE_TREZOR=OFF \
50 + ../..
51 +make -j4 && make install
52 +cp external/randomx/librandomx.a ${DEST_LIB}
53 +cp src/cryptonote_basic/libcryptonote_basic.a ${DEST_LIB}
54 +cp src/cryptonote_basic/libcryptonote_format_utils_basic.a ${DEST_LIB}
55 +popd
56 +
57 +done
58 +
59 +#only for arm64
60 +cp ${MONERO_DIR_PATH}/lib-armv8-a/* $EXTERNAL_IOS_LIB_DIR
61 +cp ${MONERO_DIR_PATH}/include/wallet/api/* $EXTERNAL_IOS_INCLUDE_DIR
\ No newline at end of file
scripts/ios/build_openssl.sh new
+16
@@ -0,0 +1,16 @@
1 +#!/bin/sh
2 +
3 +. ./config.sh
4 +
5 +OPEN_SSL_URL="https://github.com/x2on/OpenSSL-for-iPhone.git"
6 +OPEN_SSL_DIR_PATH="${EXTERNAL_IOS_SOURCE_DIR}/OpenSSL"
7 +
8 +echo "============================ OpenSSL ============================"
9 +
10 +echo "Cloning Open SSL from - $OPEN_SSL_URL"
11 +git clone $OPEN_SSL_URL $OPEN_SSL_DIR_PATH
12 +cd $OPEN_SSL_DIR_PATH
13 +./build-libssl.sh --version=1.1.1k --archs="x86_64 arm64 armv7s armv7" --targets="ios64-cross-arm64" --deprecated
14 +
15 +mv ${OPEN_SSL_DIR_PATH}/include/* $EXTERNAL_IOS_INCLUDE_DIR
16 +mv ${OPEN_SSL_DIR_PATH}/lib/* $EXTERNAL_IOS_LIB_DIR
\ No newline at end of file
scripts/ios/build_sodium.sh new
+16
@@ -0,0 +1,16 @@
1 +#!/bin/sh
2 +
3 +. ./config.sh
4 +
5 +SODIUM_PATH="${EXTERNAL_IOS_SOURCE_DIR}/libsodium"
6 +SODIUM_URL="https://github.com/jedisct1/libsodium.git"
7 +
8 +echo "============================ SODIUM ============================"
9 +
10 +echo "Cloning SODIUM from - $SODIUM_URL"
11 +git clone $SODIUM_URL $SODIUM_PATH --branch stable
12 +cd $SODIUM_PATH
13 +./dist-build/ios.sh
14 +
15 +mv ${SODIUM_PATH}/libsodium-ios/include/* $EXTERNAL_IOS_INCLUDE_DIR
16 +mv ${SODIUM_PATH}/libsodium-ios/lib/* $EXTERNAL_IOS_LIB_DIR
\ No newline at end of file
scripts/ios/build_zmq.sh new
+13
@@ -0,0 +1,13 @@
1 +#!/bin/sh
2 +
3 +. ./config.sh
4 +
5 +ZMQ_PATH="${EXTERNAL_IOS_SOURCE_DIR}/libzmq"
6 +ZMQ_URL="https://github.com/zeromq/libzmq.git"
7 +
8 +echo "============================ ZMQ ============================"
9 +
10 +echo "Cloning ZMQ from - $ZMQ_URL"
11 +git clone $ZMQ_URL $ZMQ_PATH
12 +
13 +cp ${ZMQ_PATH}/include/* $EXTERNAL_IOS_INCLUDE_DIR
\ No newline at end of file
scripts/ios/config.sh new
+12
@@ -0,0 +1,12 @@
1 +#!/bin/sh
2 +
3 +export IOS_SCRIPTS_DIR=`pwd`
4 +export CW_ROOT=${IOS_SCRIPTS_DIR}/../..
5 +export EXTERNAL_DIR=${CW_ROOT}/cw_monero/ios/External
6 +export EXTERNAL_IOS_DIR=${EXTERNAL_DIR}/ios
7 +export EXTERNAL_IOS_SOURCE_DIR=${EXTERNAL_IOS_DIR}/sources
8 +export EXTERNAL_IOS_LIB_DIR=${EXTERNAL_IOS_DIR}/lib
9 +export EXTERNAL_IOS_INCLUDE_DIR=${EXTERNAL_IOS_DIR}/include
10 +
11 +mkdir -p $EXTERNAL_IOS_LIB_DIR
12 +mkdir -p $EXTERNAL_IOS_INCLUDE_DIR
\ No newline at end of file
scripts/ios/install_missing_headers.sh new
+63
@@ -0,0 +1,63 @@
1 +#!/bin/bash
2 +
3 +. ./config.sh
4 +
5 +echo "Installing missing headers"
6 +
7 +# vmmeter
8 +mkdir -p ${EXTERNAL_IOS_INCLUDE_DIR}/sys
9 +
10 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/sys/vmmeter.h ]; then
11 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/vmmeter.h ${EXTERNAL_IOS_INCLUDE_DIR}/sys/vmmeter.h
12 +fi
13 +
14 +# netinet
15 +mkdir -p ${EXTERNAL_IOS_INCLUDE_DIR}/netinet
16 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/netinet/ip_var.h ]; then
17 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet/ip_var.h ${EXTERNAL_IOS_INCLUDE_DIR}/netinet/ip_var.h
18 +fi
19 +
20 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/netinet/udp_var.h ]; then
21 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/netinet/udp_var.h ${EXTERNAL_IOS_INCLUDE_DIR}/netinet/udp_var.h
22 +fi
23 +
24 +# IOKit
25 +mkdir -p ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit
26 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOTypes.h ]; then
27 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOTypes.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOTypes.h
28 +fi
29 +
30 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOKitLib.h ]; then
31 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitLib.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOKitLib.h
32 +fi
33 +
34 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOReturn.h ]; then
35 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOReturn.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOReturn.h
36 +fi
37 +
38 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/OSMessageNotification.h ]; then
39 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/OSMessageNotification.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/OSMessageNotification.h
40 +fi
41 +
42 +# IOKit/ps
43 +mkdir -p ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/ps
44 +
45 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/ps/IOPSKeys.h ]; then
46 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/ps/IOPSKeys.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/ps/IOPSKeys.h
47 +fi
48 +
49 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/ps/IOPowerSources.h ]; then
50 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/ps/IOPowerSources.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/ps/IOPowerSources.h
51 +fi
52 +
53 +
54 +# libkern
55 +mkdir -p ${EXTERNAL_IOS_INCLUDE_DIR}/libkern
56 +
57 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/libkern/OSTypes.h ]; then
58 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/libkern/OSTypes.h ${EXTERNAL_IOS_INCLUDE_DIR}/libkern/OSTypes.h
59 +fi
60 +
61 +if [ ! -f ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOKitKeys.h ]; then
62 + cp /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitKeys.h ${EXTERNAL_IOS_INCLUDE_DIR}/IOKit/IOKitKeys.h
63 +fi