blob: 852049069dfe9fb54ea2d9be54b8dbf9cc3d49b2 (
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
122
123
124
125
126
127
128
129
130
131
132
133
|
#!/bin/bash
# Copyright (C) 2016 Andrew Jiang (TunnelBear Inc.)
# Convenience script for generating shapeshifter-dispatcher binaries for Android devices
# adapted for Bitmask by cyberta
BUILD_LIBRARY=false;
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 [[ "$1" == "createLibrary" ]]; then
BUILD_LIBRARY=true
fi
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..."
if [[ BUILD_LIBRARY ]]; then
./android_build_shapeshifter_lib.sh || quit "Failed to cross-compile shapeshifter-dispatcher-library"
else
./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"
fi
echo "Build succeeded!"
done
fi
|