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
|