-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.sh
executable file
·120 lines (98 loc) · 2.59 KB
/
build.sh
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
#!/bin/sh
set -e
APP=zpp-crc32c
OPTS='-Drelease-safe'
[ -z "$ZIG_BIN" ] && ZIG_BIN=zig
CMD="$1"
case "$CMD" in
dist)
#noop
;;
tag)
TAG="$2"
[ -n "$TAG" ] || { echo '2nd arg (tag) is required.'; exit 1; }
git tag $TAG && git push origin $TAG && echo "# Tagged $TAG" && exit 0
;;
clean)
rm -rf zig-* dist/$APP-* && exit 0
;;
run*)
shift && zig build $CMD $OPTS $@ && exit 0
;;
*)
if [ -n "$CMD" ]; then
echo "Unknown command \"$CMD\"" && exit 1
else
zig build $OPTS $@ && exit 0
fi
;;
esac
DIST_DIR=dist
DIST_VERSION=$2
[ -n "$DIST_VERSION" ] && OPTS="$OPTS -Dversion=$DIST_VERSION"
#TODO add 'aarch64-windows-gnu' when zig has tier1 support for that
TARGETS='x86_64-linux-gnu.2.23 aarch64-linux-gnu.2.23 x86_64-macos-gnu aarch64-macos-gnu x86_64-windows-gnu'
cross_compile_target(){
TARGET=$1
NAME=${TARGET%%-gnu*}
TARGET_DIR=$APP-$NAME
echo "$DIST_DIR/$TARGET_DIR ... -Dtarget=$TARGET $OPTS"
$ZIG_BIN build -p "$DIST_DIR/$TARGET_DIR" -Dtarget=$TARGET $OPTS
}
archive_target(){
NAME=${1%%-gnu*}
TARGET_DIR=$APP-$NAME
case "$NAME" in
*-windows*)
[ -e "$TARGET_DIR.zip" ] && rm $TARGET_DIR.zip
rm $TARGET_DIR/bin/*.pdb
zip -r $TARGET_DIR.zip $TARGET_DIR
;;
*)
[ -e "$TARGET_DIR.tar.gz" ] && rm $TARGET_DIR.tar.gz
tar -cvzf $TARGET_DIR.tar.gz $TARGET_DIR
;;
esac
}
for T in $TARGETS; do
cross_compile_target $T
done
cd $DIST_DIR
for T in $TARGETS; do
archive_target $T
done
[ -n "$DIST_VERSION" ] || exit 0
REPO_USER=zpplibs
REPO_NAME=zpp-crc32c
AUTH_USER=dyu
AUTH_TOKEN=$3
[ -n "$AUTH_TOKEN" ] || { echo "3rd arg (github auth token) is required for release."; exit 1; }
upload_target(){
NAME=${1%%-gnu*}
TARGET_DIR=$APP-$NAME
FILE_SUFFIX='.tar.gz'
case "$NAME" in
*-windows*)
FILE_SUFFIX='.zip'
;;
esac
UPLOAD_FILE=$TARGET_DIR$FILE_SUFFIX
echo "### Uploading $UPLOAD_FILE"
GITHUB_TOKEN=$AUTH_TOKEN GITHUB_AUTH_USER=$AUTH_USER github-release upload \
--user $REPO_USER \
--repo $REPO_NAME \
--tag v$DIST_VERSION \
--name $UPLOAD_FILE \
--file $UPLOAD_FILE
}
echo "# Tagging v$DIST_VERSION"
GITHUB_TOKEN=$AUTH_TOKEN GITHUB_AUTH_USER=$AUTH_USER github-release release \
--user $REPO_USER \
--repo $REPO_NAME \
--tag v$DIST_VERSION \
--name "$APP-v$DIST_VERSION" \
--description "$APP binaries for linux/macos/windows"
for T in $TARGETS; do
upload_target $T
done
echo v$DIST_VERSION released!