summaryrefslogtreecommitdiff
path: root/go/android_build_shapeshifter_dispatcher.sh
blob: 185da5cce3d3eb4b5bc0287fcb3b4840d64c42f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash

# Copyright (C) 2016 Andrew Jiang (TunnelBear Inc.)
# Convenience script for generating shapeshifter-dispatcher binaries for Android devices
# adapted for Bitmask by cyberta

function quit {
    echo "$1."
    exit 1
}

if [ "$1" == "removeall" ]; then
        echo "removing golang, sources and generated files"
        for folder in /tmp/android-toolchain-*; do
                if [[ -d $folder ]]; then
                        rm -rf $folder
                fi
        done
        if [[ -d "./out" ]]; then
                rm -rf ./out
        fi

        if [[ -d "./bin" ]]; then
                rm -rf ./bin
        fi

        if [[ -d "./golang" ]]; then
                rm -rf ./golang
        fi

        if [[ -d "./src" ]]; then
                rm -rf ./src
        fi
        echo "Done!"

elif [ "$1" == "clean" ]; then
        echo "Cleaning up..."
        for folder in /tmp/android-toolchain-*; do
                if [[ -d $folder ]]; then
                        rm -rf $folder
                fi
        done
        if [[ -d "./out" ]]; then
                rm -rf ./out
        fi

        if [[ -d "./bin" ]]; then
                rm -rf ./bin
        fi
        echo "Done!"
else
        if [ -z $ANDROID_NDK_HOME ]; then
                echo "Android NDK path not specified!"
                echo "Please set \$ANDROID_NDK_HOME before starting this script!"
                exit 1;
        fi

        # Our targets are x86, x86_64, armeabi, armeabi-v7a, armv8;
        # To remove targets, simply delete them from the bracket.
        # NOTE: We are only currently shipping the armeabi-v7a binary
        # on Android, for space reasons.
        targets=(386 amd64 armv5 armv7 arm64)
        export GOOS=android

        for arch in ${targets[@]}; do
                # Initialize variables
                go_arch=$arch
                ndk_arch=$arch
                ndk_platform="android-16"
                suffix=$arch

                if [ "$arch" = "386" ]; then
                        export CGO_ENABLED=1
                        ndk_arch="x86"
                        suffix="x86"
                        binary="i686-linux-android-gcc"
                elif [ "$arch" = "amd64" ]; then
                        ndk_platform="android-21"
                        ndk_arch="x86_64"
                        suffix="x86_64"
                        binary="x86_64-linux-android-gcc"
                elif [ "$arch" = "armv5" ]; then
                        export GOARM=5
                        export CGO_ENABLED=1
                        go_arch="arm"
                        ndk_arch="arm"
                        suffix="armeabi"
                        binary="arm-linux-androideabi-gcc"
                elif [ "$arch" = "armv7" ]; then
                        export GOARM=7
                        export CGO_ENABLED=1
                        go_arch="arm"
                        ndk_arch="arm"
                        suffix="armeabi-v7a"
                        binary="arm-linux-androideabi-gcc"
                elif [ "$arch" = "arm64" ]; then
                        suffix="arm64-v8a"
                        ndk_platform="android-21"
                        binary="aarch64-linux-android-gcc"
                elif [ "$arch" = "mips" ]; then
                        binary="mipsel-linux-android-gcc"
                fi
                export GOARCH=${go_arch}
                export GOPATH=`pwd`
                export NDK_TOOLCHAIN=/tmp/android-toolchain-${ndk_arch}

                # Only generate toolchain if it does not already exist
                if [ ! -d $NDK_TOOLCHAIN ]; then
                        echo "Generating ${suffix} toolchain..."
                        $ANDROID_NDK_HOME/build/tools/make-standalone-toolchain.sh \
                        --arch=${ndk_arch} --platform=${ndk_platform} --install-dir=$NDK_TOOLCHAIN || quit "Failed to generate toolchain"
                        echo "Toolchain generated!"
                fi

                export CC=$NDK_TOOLCHAIN/bin/clang
                echo "Starting compilation for $suffix..."
                ./golang/go/bin/go build -buildmode=pie -ldflags '-w -s -extldflags=-pie' -o ./out/${suffix}/piedispatcher github.com/OperatorFoundation/shapeshifter-dispatcher/shapeshifter-dispatcher || quit "Failed to cross-compile shapeshifter-dispatcher"
                echo "Build succeeded!"

        done
fi