forked from YouROK/TorrServer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild-all.sh
More file actions
executable file
·131 lines (113 loc) · 3.12 KB
/
build-all.sh
File metadata and controls
executable file
·131 lines (113 loc) · 3.12 KB
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
#!/bin/bash
PLATFORMS=(
'linux/amd64'
'linux/arm64'
'linux/arm7'
'linux/arm5'
'linux/386'
'windows/amd64'
'windows/386'
'darwin/amd64'
'darwin/arm64'
'freebsd/amd64'
'freebsd/arm7'
'linux/mips'
'linux/mipsle'
'linux/mips64'
'linux/mips64le'
'linux/riscv64'
)
type setopt >/dev/null 2>&1
set_goarm() {
if [[ "$1" =~ arm([5,7]) ]]; then
GOARCH="arm"
GOARM="${BASH_REMATCH[1]}"
GO_ARM="GOARM=${GOARM}"
else
GOARM=""
GO_ARM=""
fi
}
# use softfloat for mips builds
set_gomips() {
if [[ "$1" =~ mips ]]; then
if [[ "$1" =~ mips(64) ]]; then MIPS64="${BASH_REMATCH[1]}"; fi
GO_MIPS="GOMIPS${MIPS64}=softfloat"
else
GO_MIPS=""
fi
}
GOBIN="go"
$GOBIN version
LDFLAGS="'-s -w -checklinkname=0'"
FAILURES=""
ROOT=${PWD}
OUTPUT="${ROOT}/dist/TorrServer"
#### Build web
echo "Build web"
export NODE_OPTIONS=--openssl-legacy-provider
$GOBIN run gen_web.go
#### Update api docs
echo "Build docs"
$GOBIN install github.com/swaggo/swag/cmd/swag@latest
cd "${ROOT}/server" || exit 1
swag init -g web/server.go
#### Build server
echo "Build server"
cd "${ROOT}/server" || exit 1
$GOBIN clean -i -r -cache # --modcache
$GOBIN mod tidy
BUILD_FLAGS="-ldflags=${LDFLAGS} -tags=nosqlite -trimpath"
#####################################
### X86 build section
#####
for PLATFORM in "${PLATFORMS[@]}"; do
GOOS=${PLATFORM%/*}
GOARCH=${PLATFORM#*/}
set_goarm "$GOARCH"
set_gomips "$GOARCH"
BIN_FILENAME="${OUTPUT}-${GOOS}-${GOARCH}${GOARM}"
if [[ "${GOOS}" == "windows" ]]; then BIN_FILENAME="${BIN_FILENAME}.exe"; fi
CMD="GOOS=${GOOS} GOARCH=${GOARCH} ${GO_ARM} ${GO_MIPS} ${GOBIN} build ${BUILD_FLAGS} -o ${BIN_FILENAME} ./cmd"
echo "${CMD}"
eval "$CMD" || FAILURES="${FAILURES} ${GOOS}/${GOARCH}${GOARM}"
# CMD="../upx -q ${BIN_FILENAME}"; # upx --brute produce much smaller binaries
# echo "compress with ${CMD}"
# eval "$CMD"
done
#####################################
### Android build section
#####
declare -a COMPILERS=(
"arm7:armv7a-linux-androideabi21-clang"
"arm64:aarch64-linux-android21-clang"
"386:i686-linux-android21-clang"
"amd64:x86_64-linux-android21-clang"
)
export NDK_VERSION="25.2.9519653" # 25.1.8937393
#export NDK_TOOLCHAIN=${ANDROID_HOME}/ndk/${NDK_VERSION}/toolchains/llvm/prebuilt/darwin-x86_64
#export NDK_TOOLCHAIN="${PWD}/../android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64"
export NDK_TOOLCHAIN=/Users/yourok/Projects/AndroidNDK
GOOS=android
for V in "${COMPILERS[@]}"; do
GOARCH=${V%:*}
COMPILER=${V#*:}
export CC="$NDK_TOOLCHAIN/bin/$COMPILER"
export CXX="$NDK_TOOLCHAIN/bin/$COMPILER++"
set_goarm "$GOARCH"
BIN_FILENAME="${OUTPUT}-${GOOS}-${GOARCH}${GOARM}"
CMD="GOOS=${GOOS} GOARCH=${GOARCH} ${GO_ARM} CGO_ENABLED=1 ${GOBIN} build ${BUILD_FLAGS} -o ${BIN_FILENAME} ./cmd"
echo "${CMD}"
eval "${CMD}" || FAILURES="${FAILURES} ${GOOS}/${GOARCH}${GOARM}"
# CMD="../upx -q ${BIN_FILENAME}"; # upx --brute produce much smaller binaries
# echo "compress with ${CMD}"
# eval "$CMD"
done
# eval errors
if [[ "${FAILURES}" != "" ]]; then
echo ""
echo "failed on: ${FAILURES}"
exit 1
fi
cd "${ROOT}/docker/lite" || exit 1
./makedocker.sh