|
|
@@ -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."
|
|
|
@@ -145,35 +146,54 @@ 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/}"
|
|
|
+ __AlpinePackages="${__AlpinePackages// compiler-rt-static/}"
|
|
|
+ __QEMUArch=riscv64
|
|
|
__UbuntuArch=riscv64
|
|
|
__UbuntuRepo="http://deb.debian.org/debian-ports"
|
|
|
- __CodeName=sid
|
|
|
__UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
|
|
|
unset __LLDB_Package
|
|
|
|
|
|
if [[ -e "/usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then
|
|
|
__Keyring="--keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
|
|
|
fi
|
|
|
+
|
|
|
+ if [[ "$version" != "edge" && ( -z "$__AlpineVersion" || -z "$__AlpineMajorVersion" )]]; then
|
|
|
+ __AlpineVersion=edge # minimum version with APKINDEX.tar.gz (packages archive)
|
|
|
+ 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
|
|
|
+
|
|
|
+ if [[ "$version" != "edge" && ( -z "$__AlpineVersion" || -z "$__AlpineMajorVersion" )]]; then
|
|
|
+ __AlpineVersion=3.15 # minimum version that supports compiler-rt
|
|
|
+ fi
|
|
|
;;
|
|
|
s390x)
|
|
|
__BuildArch=s390x
|
|
|
+ __AlpineArch=s390x
|
|
|
+ __QEMUArch=s390x
|
|
|
__UbuntuArch=s390x
|
|
|
__UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/"
|
|
|
__UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
|
|
|
__UbuntuPackages="${__UbuntuPackages// libomp-dev/}"
|
|
|
__UbuntuPackages="${__UbuntuPackages// libomp5/}"
|
|
|
unset __LLDB_Package
|
|
|
+
|
|
|
+ if [[ "$version" != "edge" && ( -z "$__AlpineVersion" || -z "$__AlpineMajorVersion" )]]; then
|
|
|
+ __AlpineVersion=3.15 # minimum version that supports compiler-rt
|
|
|
+ fi
|
|
|
;;
|
|
|
x64)
|
|
|
__BuildArch=x64
|
|
|
@@ -240,34 +260,80 @@ 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)
|
|
|
- __CodeName=alpine
|
|
|
- __UbuntuRepo=
|
|
|
- __AlpineVersion=3.13
|
|
|
- __AlpinePackages+=" llvm10-libs"
|
|
|
- ;;
|
|
|
- alpine3.14)
|
|
|
+ alpine*)
|
|
|
__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]}"
|
|
|
+
|
|
|
+ if [[ -z "$__AlpineVersion" ]]; then
|
|
|
+ __AlpineVersion="$__AlpineMajorVersion.$__AlpineMinoVersion"
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+
|
|
|
+ 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
|
|
|
+ __AlpineVersion=3.15 # minimum version that supports compiler-rt
|
|
|
+ __AlpinePackages+=" llvm12-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
|
|
|
+ fi
|
|
|
+ esac
|
|
|
;;
|
|
|
freebsd12)
|
|
|
__CodeName=freebsd
|
|
|
@@ -341,18 +407,40 @@ mkdir -p "$__RootfsDir"
|
|
|
__RootfsDir="$( cd "$__RootfsDir" && pwd )"
|
|
|
|
|
|
if [[ "$__CodeName" == "alpine" ]]; then
|
|
|
- __ApkToolsVersion=2.9.1
|
|
|
+ __ApkToolsVersion=2.12.11
|
|
|
__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
|
|
|
+
|
|
|
+ "$__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 $__AlpinePackages
|
|
|
+
|
|
|
+ if [[ "$__AlpineLlvmLibsLookup" == 1 ]]; then
|
|
|
+ "$__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 | while IFS=- read name rest; do
|
|
|
+ "$__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 "$name-libs"
|
|
|
+ done
|
|
|
+ fi
|
|
|
|
|
|
rm -r "$__ApkToolsDir"
|
|
|
elif [[ "$__CodeName" == "freebsd" ]]; then
|