@ -6,10 +6,11 @@ usage()
{
echo " Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir <directory>] "
echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86"
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."
echo " for FreeBSD can be: freebsd12, freebsd13"
echo " for illumos can be: illumos"
echo " for Haiku can be: haiku."
echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine"
echo " for alpine can be specified with version: alpineX.YY or alpineedge"
echo " for FreeBSD can be: freebsd12, freebsd13"
echo " for illumos can be: illumos"
echo " for Haiku can be: haiku."
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD"
echo "llvmx[.y] - optional, LLVM version for LLVM related packages."
echo "--skipunmount - optional, will skip the unmount of rootfs folder."
@ -54,7 +55,7 @@ __AlpinePackages+=" gettext-dev"
__AlpinePackages += " icu-dev"
__AlpinePackages += " libunwind-dev"
__AlpinePackages += " lttng-ust-dev"
__AlpinePackages += " compiler-rt-static "
__AlpinePackages += " compiler-rt"
__AlpinePackages += " numactl-dev"
# runtime libraries' dependencies
@ -145,20 +146,13 @@ while :; do
__Keyring = "--keyring /usr/share/keyrings/raspbian-archive-keyring.gpg"
fi
; ;
ppc64le)
__BuildArch = ppc64le
__UbuntuArch = ppc64el
__UbuntuRepo = "http://ports.ubuntu.com/ubuntu-ports/"
__UbuntuPackages = " ${ __UbuntuPackages // libunwind8-dev/ } "
__UbuntuPackages = " ${ __UbuntuPackages // libomp-dev/ } "
__UbuntuPackages = " ${ __UbuntuPackages // libomp5/ } "
unset __LLDB_Package
; ;
riscv64)
__BuildArch = riscv64
__AlpineArch = riscv64
__AlpinePackages = " ${ __AlpinePackages // lldb-dev/ } "
__QEMUArch = riscv64
__UbuntuArch = riscv64
__UbuntuRepo = "http://deb.debian.org/debian-ports"
__CodeName = sid
__UbuntuPackages = " ${ __UbuntuPackages // libunwind8-dev/ } "
unset __LLDB_Package
@ -166,8 +160,21 @@ while :; do
__Keyring = "--keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
fi
; ;
ppc64le)
__BuildArch = ppc64le
__AlpineArch = ppc64le
__QEMUArch = ppc64le
__UbuntuArch = ppc64el
__UbuntuRepo = "http://ports.ubuntu.com/ubuntu-ports/"
__UbuntuPackages = " ${ __UbuntuPackages // libunwind8-dev/ } "
__UbuntuPackages = " ${ __UbuntuPackages // libomp-dev/ } "
__UbuntuPackages = " ${ __UbuntuPackages // libomp5/ } "
unset __LLDB_Package
; ;
s390x)
__BuildArch = s390x
__AlpineArch = s390x
__QEMUArch = s390x
__UbuntuArch = s390x
__UbuntuRepo = "http://ports.ubuntu.com/ubuntu-ports/"
__UbuntuPackages = " ${ __UbuntuPackages // libunwind8-dev/ } "
@ -186,6 +193,7 @@ while :; do
x86)
__BuildArch = x86
__UbuntuArch = i386
__AlpineArch = x86
__UbuntuRepo = "http://archive.ubuntu.com/ubuntu/"
; ;
lldb*)
@ -240,34 +248,59 @@ while :; do
; ;
jessie) # Debian 8
__CodeName = jessie
__UbuntuRepo = "http://ftp.debian.org/debian/"
if [ [ -z " $__UbuntuRepo " ] ] ; then
__UbuntuRepo = "http://ftp.debian.org/debian/"
fi
; ;
stretch) # Debian 9
__CodeName = stretch
__UbuntuRepo = "http://ftp.debian.org/debian/"
__LLDB_Package = "liblldb-6.0-dev"
if [ [ -z " $__UbuntuRepo " ] ] ; then
__UbuntuRepo = "http://ftp.debian.org/debian/"
fi
; ;
buster) # Debian 10
__CodeName = buster
__UbuntuRepo = "http://ftp.debian.org/debian/"
__LLDB_Package = "liblldb-6.0-dev"
if [ [ -z " $__UbuntuRepo " ] ] ; then
__UbuntuRepo = "http://ftp.debian.org/debian/"
fi
; ;
bullseye) # Debian 11
__CodeName = bullseye
if [ [ -z " $__UbuntuRepo " ] ] ; then
__UbuntuRepo = "http://ftp.debian.org/debian/"
fi
; ;
sid) # Debian sid
__CodeName = sid
if [ [ -z " $__UbuntuRepo " ] ] ; then
__UbuntuRepo = "http://ftp.debian.org/debian/"
fi
; ;
tizen)
__CodeName =
__UbuntuRepo =
__Tizen = tizen
; ;
alpine| alpine3.13)
alpine* )
__CodeName = alpine
__UbuntuRepo =
__AlpineVersion = 3.13
__AlpinePackages += " llvm10-libs"
; ;
alpine3.14)
__CodeName = alpine
__UbuntuRepo =
__AlpineVersion = 3.14
__AlpinePackages += " llvm11-libs"
version = " ${ lowerI /alpine/ } "
if [ [ " $version " = = "edge" ] ] ; then
__AlpineVersion = edge
else
parts = ( ${ version //./ } )
__AlpineMajorVersion = " ${ parts [0] } "
__AlpineMinoVersion = " ${ parts [1] } "
__AlpineVersion = " $__AlpineMajorVersion . $__AlpineMinoVersion "
fi
; ;
freebsd12)
__CodeName = freebsd
@ -310,10 +343,41 @@ while :; do
shift
done
case " $__AlpineVersion " in
3.14) __AlpinePackages += " llvm11-libs" ; ;
3.15) __AlpinePackages += " llvm12-libs" ; ;
3.16) __AlpinePackages += " llvm13-libs" ; ;
3.17) __AlpinePackages += " llvm15-libs" ; ;
edge) __AlpineLlvmLibsLookup = 1 ; ;
*)
if [ [ " $__AlpineArch " = ~ s390x| ppc64le ] ] ; then
echo boo
__AlpineVersion = 3.15 # minimum version that supports lldb-dev
__AlpinePackages += " llvm12-libs"
elif [ [ " $__AlpineArch " = = "x86" ] ] ; then
__AlpineVersion = 3.17 # minimum version that supports lldb-dev
__AlpinePackages += " llvm15-libs"
elif [ [ " $__AlpineArch " = = "riscv64" ] ] ; then
__AlpineLlvmLibsLookup = 1
__AlpineVersion = edge # minimum version with APKINDEX.tar.gz (packages archive)
else
__AlpineVersion = 3.13 # 3.13 to maximize compatibility
__AlpinePackages += " llvm10-libs"
if [ [ " $__AlpineArch " = = "armv7" ] ] ; then
__AlpinePackages = " ${ __AlpinePackages //numactl-dev/ } "
fi
fi
esac
if [ [ " $__AlpineVersion " = ~ 3\. 1[ 345] ] ] ; then
# compiler-rt--static was merged in compiler-rt package in alpine 3.16
# for older versions, we need compiler-rt--static, so replace the name
__AlpinePackages = " ${ __AlpinePackages /compiler-rt/compiler-rt-static } "
fi
if [ [ " $__BuildArch " = = "armel" ] ] ; then
__LLDB_Package = "lldb-3.5-dev"
elif [ [ " $__BuildArch " = = "arm" && " $__AlpineVersion " = = "3.13" ] ] ; then
__AlpinePackages = " ${ __AlpinePackages //numactl-dev/ } "
fi
__UbuntuPackages += " ${ __LLDB_Package :- } "
@ -341,18 +405,41 @@ mkdir -p "$__RootfsDir"
__RootfsDir = " $( cd " $__RootfsDir " && pwd ) "
if [ [ " $__CodeName " = = "alpine" ] ] ; then
__ApkToolsVersion = 2.9. 1
__ApkToolsVersion = 2.12.1 1
__ApkToolsDir = " $( mktemp -d) "
wget " https://github.com/alpinelinux/apk-tools/releases/download/v $__ApkToolsVersion /apk-tools- $__ApkToolsVersion -x86_64-linux.tar.gz " -P " $__ApkToolsDir "
tar -xf " $__ApkToolsDir /apk-tools- $__ApkToolsVersion -x86_64-linux.tar.gz " -C " $__ApkToolsDir "
wget " https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic//v $__ApkToolsVersion /x86_64/apk.static " -P " $__ApkToolsDir "
chmod +x " $__ApkToolsDir /apk.static "
mkdir -p " $__RootfsDir " /usr/bin
cp -v " /usr/bin/qemu- $__QEMUArch -static " " $__RootfsDir /usr/bin "
" $__ApkToolsDir /apk-tools- $__ApkToolsVersion /apk " \
-X " http://dl-cdn.alpinelinux.org/alpine/v $__AlpineVersion /main " \
-X " http://dl-cdn.alpinelinux.org/alpine/v $__AlpineVersion /community " \
-U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " --initdb \
add $__AlpinePackages
if [ [ " $__AlpineVersion " = = "edge" ] ] ; then
version = edge
else
version = " v $__AlpineVersion "
fi
# initialize DB
" $__ApkToolsDir /apk.static " \
-X " http://dl-cdn.alpinelinux.org/alpine/ $version /main " \
-X " http://dl-cdn.alpinelinux.org/alpine/ $version /community " \
-U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " --initdb add
if [ [ " $__AlpineLlvmLibsLookup " = = 1 ] ] ; then
__AlpinePackages += " $( " $__ApkToolsDir /apk.static " \
-X " http://dl-cdn.alpinelinux.org/alpine/ $version /main " \
-X " http://dl-cdn.alpinelinux.org/alpine/ $version /community " \
-U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " \
search 'llvm*-libs' | sort | tail -1 | sed 's/-[^-]*//2g' ) "
fi
# install all packages in one go
" $__ApkToolsDir /apk.static " \
-X " http://dl-cdn.alpinelinux.org/alpine/ $version /main " \
-X " http://dl-cdn.alpinelinux.org/alpine/ $version /community " \
-U --allow-untrusted --root " $__RootfsDir " --arch " $__AlpineArch " \
add $__AlpinePackages
rm -r " $__ApkToolsDir "
elif [ [ " $__CodeName " = = "freebsd" ] ] ; then