@@ -6,10 +6,11 @@ usage()
66{
77 echo " Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir <directory>]"
88 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."
1314 echo " lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
1415 echo " llvmx[.y] - optional, LLVM version for LLVM related packages."
1516 echo " --skipunmount - optional, will skip the unmount of rootfs folder."
@@ -54,7 +55,7 @@ __AlpinePackages+=" gettext-dev"
5455__AlpinePackages+=" icu-dev"
5556__AlpinePackages+=" libunwind-dev"
5657__AlpinePackages+=" lttng-ust-dev"
57- __AlpinePackages+=" compiler-rt-static "
58+ __AlpinePackages+=" compiler-rt"
5859__AlpinePackages+=" numactl-dev"
5960
6061# runtime libraries' dependencies
@@ -145,29 +146,35 @@ while :; do
145146 __Keyring=" --keyring /usr/share/keyrings/raspbian-archive-keyring.gpg"
146147 fi
147148 ;;
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- ;;
157149 riscv64)
158150 __BuildArch=riscv64
151+ __AlpineArch=riscv64
152+ __AlpinePackages=" ${__AlpinePackages// lldb-dev/ } "
153+ __QEMUArch=riscv64
159154 __UbuntuArch=riscv64
160155 __UbuntuRepo=" http://deb.debian.org/debian-ports"
161- __CodeName=sid
162156 __UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
163157 unset __LLDB_Package
164158
165159 if [[ -e " /usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then
166160 __Keyring=" --keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
167161 fi
168162 ;;
163+ ppc64le)
164+ __BuildArch=ppc64le
165+ __AlpineArch=ppc64le
166+ __QEMUArch=ppc64le
167+ __UbuntuArch=ppc64el
168+ __UbuntuRepo=" http://ports.ubuntu.com/ubuntu-ports/"
169+ __UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
170+ __UbuntuPackages=" ${__UbuntuPackages// libomp-dev/ } "
171+ __UbuntuPackages=" ${__UbuntuPackages// libomp5/ } "
172+ unset __LLDB_Package
173+ ;;
169174 s390x)
170175 __BuildArch=s390x
176+ __AlpineArch=s390x
177+ __QEMUArch=s390x
171178 __UbuntuArch=s390x
172179 __UbuntuRepo=" http://ports.ubuntu.com/ubuntu-ports/"
173180 __UbuntuPackages=" ${__UbuntuPackages// libunwind8-dev/ } "
@@ -186,6 +193,7 @@ while :; do
186193 x86)
187194 __BuildArch=x86
188195 __UbuntuArch=i386
196+ __AlpineArch=x86
189197 __UbuntuRepo=" http://archive.ubuntu.com/ubuntu/"
190198 ;;
191199 lldb* )
@@ -240,34 +248,59 @@ while :; do
240248 ;;
241249 jessie) # Debian 8
242250 __CodeName=jessie
243- __UbuntuRepo=" http://ftp.debian.org/debian/"
251+
252+ if [[ -z " $__UbuntuRepo " ]]; then
253+ __UbuntuRepo=" http://ftp.debian.org/debian/"
254+ fi
244255 ;;
245256 stretch) # Debian 9
246257 __CodeName=stretch
247- __UbuntuRepo=" http://ftp.debian.org/debian/"
248258 __LLDB_Package=" liblldb-6.0-dev"
259+
260+ if [[ -z " $__UbuntuRepo " ]]; then
261+ __UbuntuRepo=" http://ftp.debian.org/debian/"
262+ fi
249263 ;;
250264 buster) # Debian 10
251265 __CodeName=buster
252- __UbuntuRepo=" http://ftp.debian.org/debian/"
253266 __LLDB_Package=" liblldb-6.0-dev"
267+
268+ if [[ -z " $__UbuntuRepo " ]]; then
269+ __UbuntuRepo=" http://ftp.debian.org/debian/"
270+ fi
271+ ;;
272+ bullseye) # Debian 11
273+ __CodeName=bullseye
274+
275+ if [[ -z " $__UbuntuRepo " ]]; then
276+ __UbuntuRepo=" http://ftp.debian.org/debian/"
277+ fi
278+ ;;
279+ sid) # Debian sid
280+ __CodeName=sid
281+
282+ if [[ -z " $__UbuntuRepo " ]]; then
283+ __UbuntuRepo=" http://ftp.debian.org/debian/"
284+ fi
254285 ;;
255286 tizen)
256287 __CodeName=
257288 __UbuntuRepo=
258289 __Tizen=tizen
259290 ;;
260- alpine|alpine3.13 )
291+ alpine* )
261292 __CodeName=alpine
262293 __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"
294+ version=" ${lowerI/ alpine/ } "
295+
296+ if [[ " $version " == " edge" ]]; then
297+ __AlpineVersion=edge
298+ else
299+ parts=(${version// ./ } )
300+ __AlpineMajorVersion=" ${parts[0]} "
301+ __AlpineMinoVersion=" ${parts[1]} "
302+ __AlpineVersion=" $__AlpineMajorVersion .$__AlpineMinoVersion "
303+ fi
271304 ;;
272305 freebsd12)
273306 __CodeName=freebsd
@@ -310,10 +343,41 @@ while :; do
310343 shift
311344done
312345
346+ case " $__AlpineVersion " in
347+ 3.14) __AlpinePackages+=" llvm11-libs" ;;
348+ 3.15) __AlpinePackages+=" llvm12-libs" ;;
349+ 3.16) __AlpinePackages+=" llvm13-libs" ;;
350+ 3.17) __AlpinePackages+=" llvm15-libs" ;;
351+ edge) __AlpineLlvmLibsLookup=1 ;;
352+ * )
353+ if [[ " $__AlpineArch " =~ s390x| ppc64le ]]; then
354+ echo boo
355+ __AlpineVersion=3.15 # minimum version that supports lldb-dev
356+ __AlpinePackages+=" llvm12-libs"
357+ elif [[ " $__AlpineArch " == " x86" ]]; then
358+ __AlpineVersion=3.17 # minimum version that supports lldb-dev
359+ __AlpinePackages+=" llvm15-libs"
360+ elif [[ " $__AlpineArch " == " riscv64" ]]; then
361+ __AlpineLlvmLibsLookup=1
362+ __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
363+ else
364+ __AlpineVersion=3.13 # 3.13 to maximize compatibility
365+ __AlpinePackages+=" llvm10-libs"
366+
367+ if [[ " $__AlpineArch " == " armv7" ]]; then
368+ __AlpinePackages=" ${__AlpinePackages// numactl-dev/ } "
369+ fi
370+ fi
371+ esac
372+
373+ if [[ " $__AlpineVersion " =~ 3\. 1[345] ]]; then
374+ # compiler-rt--static was merged in compiler-rt package in alpine 3.16
375+ # for older versions, we need compiler-rt--static, so replace the name
376+ __AlpinePackages=" ${__AlpinePackages/ compiler-rt/ compiler-rt-static} "
377+ fi
378+
313379if [[ " $__BuildArch " == " armel" ]]; then
314380 __LLDB_Package=" lldb-3.5-dev"
315- elif [[ " $__BuildArch " == " arm" && " $__AlpineVersion " == " 3.13" ]]; then
316- __AlpinePackages=" ${__AlpinePackages// numactl-dev/ } "
317381fi
318382
319383__UbuntuPackages+=" ${__LLDB_Package:- } "
@@ -341,18 +405,41 @@ mkdir -p "$__RootfsDir"
341405__RootfsDir=" $( cd " $__RootfsDir " && pwd ) "
342406
343407if [[ " $__CodeName " == " alpine" ]]; then
344- __ApkToolsVersion=2.9.1
408+ __ApkToolsVersion=2.12.11
345409 __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 "
410+
411+ wget " https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic//v$__ApkToolsVersion /x86_64/apk.static" -P " $__ApkToolsDir "
412+ chmod +x " $__ApkToolsDir /apk.static"
413+
348414 mkdir -p " $__RootfsDir " /usr/bin
349415 cp -v " /usr/bin/qemu-$__QEMUArch -static" " $__RootfsDir /usr/bin"
350416
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
417+ if [[ " $__AlpineVersion " == " edge" ]]; then
418+ version=edge
419+ else
420+ version=" v$__AlpineVersion "
421+ fi
422+
423+ # initialize DB
424+ " $__ApkToolsDir /apk.static" \
425+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
426+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
427+ -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " --initdb add
428+
429+ if [[ " $__AlpineLlvmLibsLookup " == 1 ]]; then
430+ __AlpinePackages+=" $( " $__ApkToolsDir /apk.static" \
431+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
432+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
433+ -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " \
434+ search ' llvm*-libs' | sort | tail -1 | sed ' s/-[^-]*//2g' ) "
435+ fi
436+
437+ # install all packages in one go
438+ " $__ApkToolsDir /apk.static" \
439+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /main" \
440+ -X " http://dl-cdn.alpinelinux.org/alpine/$version /community" \
441+ -U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " \
442+ add $__AlpinePackages
356443
357444 rm -r " $__ApkToolsDir "
358445elif [[ " $__CodeName " == " freebsd" ]]; then
0 commit comments