forked from OpenIPC/firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuilding.sh
executable file
·303 lines (241 loc) · 7.34 KB
/
building.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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
#!/bin/bash
#
# OpenIPC.org (c)
#
#
# Constants
#
MAX_KERNEL_SIZE=0x200000 # 2MiB, 2097152
MAX_KERNEL_SIZE_ULTIMATE=0x300000 # 3MiB, 3145728
MAX_KERNEL_SIZE_EXPERIMENTAL=0x3E8480 # ~3.9MiB, 4097152
MAX_ROOTFS_SIZE=0x500000 # 5MiB, 5242880
MAX_ROOTFS_SIZE_ULTIMATE=0xA00000 # 10MiB, 10485760
_d=$(date +"%y.%m.%d")
OPENIPC_VER=$(echo OpenIPC v${_d:0:1}.${_d:1})
unset _d
SRC_CACHE_DIR="/tmp/buildroot_dl"
#
# Functions
#
echo_c() {
# 30 grey, 31 red, 32 green, 33 yellow, 34 blue, 35 magenta, 36 cyan,37 white
echo -e "\e[1;$1m$2\e[0m"
}
log_and_run() {
_command=$1
echo_c 35 "$_command"
$_command
unset _command
}
clone() {
sudo apt-get update -y
sudo apt-get install -y automake autotools-dev bc build-essential curl fzf git libtool rsync unzip
git clone --depth=1 https://github.com/OpenIPC/firmware.git
}
fresh() {
BR_VER=$1
if [ -d "$SRC_CACHE_DIR" ]; then
echo_c 36 "Found cache directory."
else
echo_c 31 "Cache directory not found."
echo_c 34 "Creating cache directory ..."
log_and_run "mkdir -p ${SRC_CACHE_DIR}"
echo_c 34 "Done.\n"
fi
if [ -d "buildroot-${BR_VER}" ]; then
echo_c 36 "Found existing Buildroot directory."
if [ -d "buildroot-${BR_VER}/dl" ]; then
echo_c 36 "Found existing Buildroot downloads directory."
echo_c 34 "Copying Buildroot downloads to cache directory ..."
log_and_run "cp -rvf buildroot-${BR_VER}/dl/* ${SRC_CACHE_DIR}"
echo_c 34 "Done.\n"
fi
echo_c 34 "Cleaning source directory."
echo_c 35 "make distclean"
make distclean
echo_c 34 "Done.\n"
else
echo_c 31 "Buildroot sources not found."
fi
echo_c 34 "Downloading Buildroot sources to cache directory ..."
log_and_run "curl --continue-at - --output ${SRC_CACHE_DIR}/buildroot-${BR_VER}.tar.gz https://buildroot.org/downloads/buildroot-${BR_VER}.tar.gz"
echo_c 34 "Done.\n"
echo_c 34 "Extracting a fresh copy of Buildroot from Buildroot sources ..."
log_and_run "tar xvf ${SRC_CACHE_DIR}/buildroot-${BR_VER}.tar.gz"
echo_c 34 "Done.\n"
echo_c 34 "Copying cached source files back to Buildroot ..."
log_and_run "mkdir -p buildroot-${BR_VER}/dl/"
log_and_run "cp -rvf ${SRC_CACHE_DIR}/* buildroot-${BR_VER}/dl/"
echo_c 34 "Done.\n"
# make prepare
echo_c 33 "Start building OpenIPC Firmware ${OPENIPC_VER} for ${SOC}."
echo "The start-stop times" >/tmp/openipc_buildtime.txt
date >>/tmp/openipc_buildtime.txt
}
should_fit() {
filename=$1
maxsize=$2
filesize=$(stat --printf="%s" ./output/images/$filename)
if [[ $filesize -gt $maxsize ]]; then
export TG_NOTIFY="Warning: $filename is too large: $filesize vs $maxsize"
echo_c 31 "Warning: $filename is too large: $filesize vs $maxsize"
exit 1
fi
}
rename() {
if grep -q ultimate_defconfig ./output/.config || grep -q fpv_defconfig ./output/.config; then
should_fit uImage $MAX_KERNEL_SIZE_ULTIMATE
should_fit rootfs.squashfs $MAX_ROOTFS_SIZE_ULTIMATE
else
should_fit uImage $MAX_KERNEL_SIZE
should_fit rootfs.squashfs $MAX_ROOTFS_SIZE
fi
mv -v ./output/images/uImage ./output/images/uImage.${SOC}
mv -v ./output/images/rootfs.squashfs ./output/images/rootfs.squashfs.${SOC}
mv -v ./output/images/rootfs.cpio ./output/images/rootfs.${SOC}.cpio
mv -v ./output/images/rootfs.tar ./output/images/rootfs.${SOC}.tar
date >>/tmp/openipc_buildtime.txt
echo_c 31 "\n\n$(cat /tmp/openipc_buildtime.txt)\n\n"
}
rename_initramfs() {
should_fit uImage $MAX_KERNEL_SIZE_EXPERIMENTAL
mv -v ./output/images/uImage ./output/images/uImage.initramfs.${SOC}
mv -v ./output/images/rootfs.cpio ./output/images/rootfs.${SOC}.cpio
mv -v ./output/images/rootfs.tar ./output/images/rootfs.${SOC}.tar
date >>/tmp/openipc_buildtime.txt
echo_c 31 "\n\n$(cat /tmp/openipc_buildtime.txt)\n\n"
}
autoup_rootfs() {
echo_c 34 "\nDownloading u-boot created by OpenIPC"
curl --location --output ./output/images/u-boot-${SOC}-universal.bin \
https://github.com/OpenIPC/firmware/releases/download/latest/u-boot-${SOC}-universal.bin
echo_c 34 "\nMaking autoupdate u-boot image"
./output/host/bin/mkimage -A arm -O linux -T firmware -n "$OPENIPC_VER" \
-a 0x0 -e 0x50000 -d ./output/images/u-boot-${SOC}-universal.bin \
./output/images/autoupdate-uboot.img
echo_c 34 "\nMaking autoupdate kernel image"
./output/host/bin/mkimage -A arm -O linux -T kernel -C none -n "$OPENIPC_VER" \
-a 0x50000 -e 0x250000 -d ./output/images/uImage.${SOC} \
./output/images/autoupdate-kernel.img
echo_c 34 "\nMaking autoupdate rootfs image"
./output/host/bin/mkimage -A arm -O linux -T filesystem -n "$OPENIPC_VER" \
-a 0x250000 -e 0x750000 -d ./output/images/rootfs.squashfs.${SOC} \
./output/images/autoupdate-rootfs.img
}
#################################################################################
FUNCS=(
ambarella-s3l
ak3916ev300
ak3918ev300
fh8833v100
fh8852v100
fh8852v200
fh8852v210
fh8856v100
fh8856v200
fh8856v210
fh8858v200
fh8858v210
gk7101
gk7101s
gk7102
gk7102s
gk7202v300
gk7205v200 gk7205v200_fpv gk7205v200_ultimate
gk7205v210
gk7205v300 gk7205v300_fpv gk7205v300_ultimate
gk7605v100
gm8135
gm8136
hi3516cv100
hi3518ev100
hi3516cv200
hi3518ev200 hi3518ev200_ultimate
hi3516cv300 hi3516cv300_ultimate
hi3516ev100
hi3516av100 hi3516av100_ultimate
hi3516dv100 hi3516dv100_ultimate
hi3519v101
hi3516av200 hi3516av200_ultimate
hi3516av300
hi3516cv500
hi3516dv300
hi3516dv200
hi3516ev200 hi3516ev200_fpv hi3516ev200_ultimate hi3516ev200_eltis
hi3516ev300 hi3516ev300_fpv hi3516ev300_ultimate hi3516ev300_dev hi3516ev300_glibc hi3516ev300_tehshield
hi3518ev300 hi3518ev300_ultimate
hi3536cv100
hi3536dv100 hi3536dv100_vixand
msc313e msc313e_baresip
msc316dc
msc316dm
nt98562
nt98566
rv1109
rv1126
ssc325
ssc333
ssc335 ssc335_blackbird ssc335_goodcam ssc335_initramfs ssc335_musl ssc335_portal ssc335_rotek ssc335_tiandy
ssc337 ssc337_kama
ssc335de
ssc337de
t10
t20
t30
t31 t31_ultimate
xm510
xm530
xm550
)
copy_function() {
test -n "$(declare -f "$1")" || return
eval "${_/$1/$2}"
}
uni_build() {
[ -z "$BOARD" ] && BOARD=$FUNCNAME
SOC=$(echo $BOARD | cut -d '_' -f 1)
set -e
if [ "$(echo $BOARD | cut -sd '_' -f 2)" == "" ]; then
BOARD="${BOARD}_lite"
fi
if [ "$BOARD" == "hi3518ev200_lite" ]; then
NEED_AUTOUP=1
fi
echo_c 33 "\n SoC: $SOC\nBoard: $BOARD\n"
if [ "all" = "${COMMAND}" ]; then
fresh $(make BOARD=${BOARD} buildroot-version)
fi
log_and_run "make BOARD=${BOARD} ${COMMAND}"
if [ "all" = "${COMMAND}" ]; then
if [ "$BOARD" == "ssc335_initramfs" ]; then
rename_initramfs
else
rename
fi
if [ ! -z "$NEED_AUTOUP" ]; then
autoup_rootfs
fi
fi
}
for i in "${FUNCS[@]}"; do
copy_function uni_build $i
done
#######
if [ $# -eq 0 ]; then
if ! command -v fzf >/dev/null 2>&1; then
echo -ne "Usage: $0 <variant>\nVariants:"
for i in "${FUNCS[@]}"; do echo -n " ${i}"; done
echo
exit 1
else
SELECTED=$(find . -path "*/br-ext-chip-*" -name "*_defconfig" | fzf)
[ -z "$SELECTED" ] && exit 1
BOARD=$(echo $SELECTED | cut -d / -f 4 | awk -F_ '{printf "%s_%s", $1, $2}')
fi
else
BOARD=$1
fi
COMMAND=$2
[ -z "$COMMAND" ] && COMMAND=all
echo_c 37 "Building OpenIPC for ${BOARD}"
uni_build $BOARD $COMMAND