@@ -6,10 +6,11 @@ usage()
6
6
{
7
7
echo " Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir <directory>]"
8
8
echo " BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
9
- echo " CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine, alpine3.13 or alpine3.14. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
10
- echo " for FreeBSD can be: freebsd12, freebsd13"
11
- echo " for illumos can be: illumos"
12
- echo " for Haiku can be: haiku."
9
+ echo " CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine"
10
+ echo " for alpine can be specified with version: alpineX.YY or alpineedge"
11
+ echo " for FreeBSD can be: freebsd12, freebsd13"
12
+ echo " for illumos can be: illumos"
13
+ echo " for Haiku can be: haiku."
13
14
echo " lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
14
15
echo " llvmx[.y] - optional, LLVM version for LLVM related packages."
15
16
echo " --skipunmount - optional, will skip the unmount of rootfs folder."
@@ -145,35 +146,54 @@ while :; do
145
146
__Keyring=" --keyring /usr/share/keyrings/raspbian-archive-keyring.gpg"
146
147
fi
147
148
;;
148
- ppc64le)
149
- __BuildArch=ppc64le
150
- __UbuntuArch=ppc64el
151
- __UbuntuRepo=" http://ports.ubuntu.com/ubuntu-ports/"
152
- __UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
153
- __UbuntuPackages=" ${__UbuntuPackages// libomp-dev/ } "
154
- __UbuntuPackages=" ${__UbuntuPackages// libomp5/ } "
155
- unset __LLDB_Package
156
- ;;
157
149
riscv64)
158
150
__BuildArch=riscv64
151
+ __AlpineArch=riscv64
152
+ __AlpinePackages=" ${__AlpinePackages// lldb-dev/ } "
153
+ __AlpinePackages=" ${__AlpinePackages// compiler-rt-static/ } "
154
+ __QEMUArch=riscv64
159
155
__UbuntuArch=riscv64
160
156
__UbuntuRepo=" http://deb.debian.org/debian-ports"
161
- __CodeName=sid
162
157
__UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
163
158
unset __LLDB_Package
164
159
165
160
if [[ -e " /usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then
166
161
__Keyring=" --keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
167
162
fi
163
+
164
+ if [[ " $version " != " edge" && ( -z " $__AlpineVersion " || -z " $__AlpineMajorVersion " )]]; then
165
+ __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
166
+ fi
167
+ ;;
168
+ ppc64le)
169
+ __BuildArch=ppc64le
170
+ __AlpineArch=ppc64le
171
+ __QEMUArch=ppc64le
172
+ __UbuntuArch=ppc64el
173
+ __UbuntuRepo=" http://ports.ubuntu.com/ubuntu-ports/"
174
+ __UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
175
+ __UbuntuPackages=" ${__UbuntuPackages// libomp-dev/ } "
176
+ __UbuntuPackages=" ${__UbuntuPackages// libomp5/ } "
177
+ unset __LLDB_Package
178
+
179
+ if [[ " $version " != " edge" && ( -z " $__AlpineVersion " || -z " $__AlpineMajorVersion " )]]; then
180
+ __AlpineVersion=3.15 # minimum version that supports compiler-rt
181
+ fi
168
182
;;
169
183
s390x)
170
184
__BuildArch=s390x
185
+ __AlpineArch=s390x
186
+ __QEMUArch=s390x
171
187
__UbuntuArch=s390x
172
188
__UbuntuRepo=" http://ports.ubuntu.com/ubuntu-ports/"
173
189
__UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
174
190
__UbuntuPackages=" ${__UbuntuPackages// libomp-dev/ } "
175
191
__UbuntuPackages=" ${__UbuntuPackages// libomp5/ } "
176
192
unset __LLDB_Package
193
+
194
+ if [[ " $version " != " edge" && ( -z " $__AlpineVersion " || -z " $__AlpineMajorVersion " )]]; then
195
+ __AlpineVersion=3.15 # minimum version that supports compiler-rt
196
+ fi
177
197
;;
178
198
x64)
179
199
__BuildArch=x64
@@ -252,22 +272,53 @@ while :; do
252
272
__UbuntuRepo=" http://ftp.debian.org/debian/"
253
273
__LLDB_Package=" liblldb-6.0-dev"
254
274
;;
275
+ bullseye) # Debian 11
276
+ __CodeName=bullseye
277
+ __UbuntuRepo=" http://ftp.debian.org/debian/"
278
+ ;;
279
+ sid) # Debian sid
280
+ __CodeName=sid
281
+ __UbuntuRepo=" http://ftp.debian.org/debian/"
282
+ ;;
255
283
tizen)
256
284
__CodeName=
257
285
__UbuntuRepo=
258
286
__Tizen=tizen
259
287
;;
260
- alpine|alpine3.13 )
288
+ alpine* )
261
289
__CodeName=alpine
262
290
__UbuntuRepo=
263
- __AlpineVersion=3.13
264
- __AlpinePackages+=" llvm10-libs"
265
- ;;
266
- alpine3.14)
267
- __CodeName=alpine
268
- __UbuntuRepo=
269
- __AlpineVersion=3.14
270
- __AlpinePackages+=" llvm11-libs"
291
+ version=" ${lowerI/ alpine/ } "
292
+
293
+ if [[ " $version " == " edge" ]]; then
294
+ __AlpineVersion=edge
295
+ else
296
+ parts=(${version// ./ } )
297
+ __AlpineMajorVersion=" ${parts[0]} "
298
+ __AlpineMinoVersion=" ${parts[1]} "
299
+
300
+ if [[ -z " $__AlpineVersion " ]]; then
301
+ __AlpineVersion=" $__AlpineMajorVersion .$__AlpineMinoVersion "
302
+ fi
303
+ fi
304
+
305
+ case " $__AlpineVersion " in
306
+ 3.14) __AlpinePackages+=" llvm11-libs" ;;
307
+ 3.15) __AlpinePackages+=" llvm12-libs" ;;
308
+ 3.16) __AlpinePackages+=" llvm13-libs" ;;
309
+ 3.17) __AlpinePackages+=" llvm15-libs" ;;
310
+ edge) __AlpineLlvmLibsLookup=1 ;;
311
+ * )
312
+ if [[ " $__AlpineArch " =~ " s390x|ppc64le" ]]; then
313
+ __AlpineVersion=3.15 # minimum version that supports compiler-rt
314
+ __AlpinePackages+=" llvm12-libs"
315
+ elif [[ " $__AlpineArch " == " riscv64" ]]; then
316
+ __AlpineLlvmLibsLookup=1
317
+ __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
318
+ else
319
+ __AlpineVersion=3.13 # 3.13 to maximize compatibility
320
+ fi
321
+ esac
271
322
;;
272
323
freebsd12)
273
324
__CodeName=freebsd
@@ -341,18 +392,40 @@ mkdir -p "$__RootfsDir"
341
392
__RootfsDir=" $( cd " $__RootfsDir " && pwd ) "
342
393
343
394
if [[ " $__CodeName " == " alpine" ]]; then
344
- __ApkToolsVersion=2.9.1
395
+ __ApkToolsVersion=2.12.11
345
396
__ApkToolsDir=" $( mktemp -d) "
346
- wget " https://github.com/alpinelinux/apk-tools/releases/download/v$__ApkToolsVersion /apk-tools-$__ApkToolsVersion -x86_64-linux.tar.gz" -P " $__ApkToolsDir "
347
- tar -xf " $__ApkToolsDir /apk-tools-$__ApkToolsVersion -x86_64-linux.tar.gz" -C " $__ApkToolsDir "
397
+
398
+ wget " https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic//v$__ApkToolsVersion /x86_64/apk.static" -P " $__ApkToolsDir "
399
+ chmod +x " $__ApkToolsDir /apk.static"
400
+
348
401
mkdir -p " $__RootfsDir " /usr/bin
349
402
cp -v " /usr/bin/qemu-$__QEMUArch -static" " $__RootfsDir /usr/bin"
350
403
351
- " $__ApkToolsDir /apk-tools-$__ApkToolsVersion /apk" \
352
- -X " http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion /main" \
353
- -X " http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion /community" \
354
- -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " --initdb \
355
- add $__AlpinePackages
404
+ if [[ " $__AlpineVersion " == " edge" ]]; then
405
+ version=edge
406
+ else
407
+ version=" v$__AlpineVersion "
408
+ fi
409
+
410
+ " $__ApkToolsDir /apk.static" \
411
+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
412
+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
413
+ -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " --initdb \
414
+ add $__AlpinePackages
415
+
416
+ if [[ " $__AlpineLlvmLibsLookup " == 1 ]]; then
417
+ " $__ApkToolsDir /apk.static" \
418
+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
419
+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
420
+ -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " \
421
+ search ' llvm*-libs' | sort | tail -1 | while IFS=- read name rest; do
422
+ " $__ApkToolsDir /apk.static" \
423
+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
424
+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
425
+ -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " \
426
+ add " $name -libs"
427
+ done
428
+ fi
356
429
357
430
rm -r " $__ApkToolsDir "
358
431
elif [[ " $__CodeName " == " freebsd" ]]; then
0 commit comments