| 1 | #!/bin/bash |
| 2 | |
| 3 | set -e -x |
| 4 | cd "$(dirname "$0")" |
| 5 | # . ./config.sh |
| 6 | |
| 7 | CW_DECRED_DIR=$(realpath ../..)/cw_decred |
| 8 | LIBWALLET_PATH="${PWD}/decred/libwallet" |
| 9 | LIBWALLET_URL="https://github.com/decred/libwallet.git" |
| 10 | LIBWALLET_VERSION="ecc4a5fb9594368777848de42d7e072d62406507" |
| 11 | |
| 12 | if [[ -e $LIBWALLET_PATH ]]; then |
| 13 | rm -fr $LIBWALLET_PATH || true |
| 14 | fi |
| 15 | mkdir -p $LIBWALLET_PATH || true |
| 16 | |
| 17 | git clone $LIBWALLET_URL $LIBWALLET_PATH |
| 18 | cd $LIBWALLET_PATH |
| 19 | git checkout $LIBWALLET_VERSION |
| 20 | |
| 21 | if [[ "x$ANDROID_HOME" == "x" ]]; |
| 22 | then |
| 23 | echo "ANDROID_HOME is missing, please declare it before building (on macos it is usually $HOME/Library/Android/sdk)" |
| 24 | echo "echo > ~/.zprofile" |
| 25 | echo "echo 'export ANDROID_HOME=\"\$HOME/Library/Android/sdk\" > ~/.zprofile" |
| 26 | exit 1 |
| 27 | fi |
| 28 | |
| 29 | if [[ "x$ANDROID_NDK_VERSION" == "x" ]]; |
| 30 | then |
| 31 | echo "ANDROID_NDK_VERSION is missing, please declare it before building" |
| 32 | echo "You have these versions installed on your system currently:" |
| 33 | ls ${ANDROID_HOME}/ndk/ | cat | awk '{ print "- " $1 }' |
| 34 | echo "echo > ~/.zprofile" |
| 35 | echo "echo 'export ANDROID_NDK_VERSION=..... > ~/.zprofile" |
| 36 | exit 1 |
| 37 | fi |
| 38 | |
| 39 | export NDK_BIN_PATH="${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}/toolchains/llvm/prebuilt/$(uname | tr '[:upper:]' '[:lower:]')-x86_64/bin" |
| 40 | export ANDROID_API_VERSION=21 |
| 41 | # export CPATH="$(clang -v 2>&1 | grep "Selected GCC installation" | rev | cut -d' ' -f1 | rev)/include" |
| 42 | |
| 43 | for arch in "aarch" "aarch64" "x86_64" |
| 44 | do |
| 45 | TRIPLET="" |
| 46 | TARGET="" |
| 47 | ARCH_ABI="" |
| 48 | |
| 49 | case $arch in |
| 50 | "aarch") |
| 51 | TRIPLET="armv7a-linux-androideabi" |
| 52 | TARGET="arm" |
| 53 | ARCH_ABI="armeabi-v7a";; |
| 54 | "aarch64") |
| 55 | TRIPLET="aarch64-linux-android" |
| 56 | TARGET="arm64" |
| 57 | ARCH_ABI="arm64-v8a";; |
| 58 | "x86_64") |
| 59 | TRIPLET="x86_64-linux-android" |
| 60 | TARGET="amd64" |
| 61 | ARCH_ABI="x86_64";; |
| 62 | *) |
| 63 | echo "Unknown arch: $arch" |
| 64 | exit 1;; |
| 65 | esac |
| 66 | |
| 67 | # PATH="${TOOLCHAIN_BASE_DIR}_${arch}/bin:${ORIGINAL_PATH}" |
| 68 | if [[ -e ./build ]]; then |
| 69 | rm -fr ./build |
| 70 | fi |
| 71 | |
| 72 | export CGO_LDFLAGS="-O2 -g -s -w -Wl,-z,max-page-size=16384" |
| 73 | CLANG_PATH="${NDK_BIN_PATH}/${TRIPLET}${ANDROID_API_VERSION}-clang" |
| 74 | CGO_ENABLED=1 GOOS=android GOARCH=${TARGET} CC=${CLANG_PATH} CXX=${CLANG_PATH}++ \ |
| 75 | go build -v -buildmode=c-shared -o ./build/${TRIPLET}-libdcrwallet.so ./cgo |
| 76 | |
| 77 | DEST_LIB_DIR=${CW_DECRED_DIR}/android/libs/${ARCH_ABI} |
| 78 | mkdir -p $DEST_LIB_DIR |
| 79 | cp ${LIBWALLET_PATH}/build/${TRIPLET}-libdcrwallet.so $DEST_LIB_DIR/libdcrwallet.so |
| 80 | done |
| 81 | |
| 82 | HEADER_DIR=$CW_DECRED_DIR/lib/api |
| 83 | cp ${LIBWALLET_PATH}/build/${TRIPLET}-libdcrwallet.h $HEADER_DIR/libdcrwallet.h |
| 84 | cd $CW_DECRED_DIR |
| 85 | dart run ffigen |