2018-11-08 01:51:56 +00:00
#!/usr/bin/env bash
usage( )
{
2019-05-15 12:11:39 +00:00
echo " Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfsdir <directory>] "
2018-11-08 01:51:56 +00:00
echo "BuildArch can be: arm(default), armel, arm64, x86"
2019-05-08 12:25:49 +00:00
echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine"
2018-11-08 01:51:56 +00:00
echo "--skipunmount - optional, will skip the unmount of rootfs folder."
exit 1
}
2019-05-08 12:25:49 +00:00
__LinuxCodeName = xenial
2018-11-08 01:51:56 +00:00
__CrossDir = $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd )
__InitialDir = $PWD
__BuildArch = arm
__UbuntuArch = armhf
__UbuntuRepo = "http://ports.ubuntu.com/"
2019-05-08 12:25:49 +00:00
__LLDB_Package = "liblldb-3.9-dev"
2018-11-08 01:51:56 +00:00
__SkipUnmount = 0
# base development support
__UbuntuPackages = "build-essential"
__AlpinePackages = "alpine-base"
__AlpinePackages += " build-base"
__AlpinePackages += " linux-headers"
__AlpinePackages += " lldb-dev"
__AlpinePackages += " llvm-dev"
# symlinks fixer
__UbuntuPackages += " symlinks"
# CoreCLR and CoreFX dependencies
__UbuntuPackages += " libicu-dev"
__UbuntuPackages += " liblttng-ust-dev"
__UbuntuPackages += " libunwind8-dev"
__AlpinePackages += " gettext-dev"
__AlpinePackages += " icu-dev"
__AlpinePackages += " libunwind-dev"
__AlpinePackages += " lttng-ust-dev"
# CoreFX dependencies
__UbuntuPackages += " libcurl4-openssl-dev"
__UbuntuPackages += " libkrb5-dev"
__UbuntuPackages += " libssl-dev"
__UbuntuPackages += " zlib1g-dev"
__AlpinePackages += " curl-dev"
__AlpinePackages += " krb5-dev"
__AlpinePackages += " openssl-dev"
__AlpinePackages += " zlib-dev"
__UnprocessedBuildArgs =
2019-05-08 12:25:49 +00:00
while :; do
if [ $# -le 0 ] ; then
break
fi
lowerI = " $( echo $1 | awk '{print tolower($0)}' ) "
2018-11-08 01:51:56 +00:00
case $lowerI in
-?| -h| --help)
usage
exit 1
; ;
arm)
__BuildArch = arm
__UbuntuArch = armhf
__AlpineArch = armhf
__QEMUArch = arm
; ;
arm64)
__BuildArch = arm64
__UbuntuArch = arm64
__AlpineArch = aarch64
__QEMUArch = aarch64
; ;
armel)
__BuildArch = armel
__UbuntuArch = armel
__UbuntuRepo = "http://ftp.debian.org/debian/"
__LinuxCodeName = jessie
; ;
x86)
__BuildArch = x86
__UbuntuArch = i386
__UbuntuRepo = "http://archive.ubuntu.com/ubuntu/"
; ;
lldb3.6)
__LLDB_Package = "lldb-3.6-dev"
; ;
lldb3.8)
__LLDB_Package = "lldb-3.8-dev"
; ;
lldb3.9)
__LLDB_Package = "liblldb-3.9-dev"
; ;
lldb4.0)
__LLDB_Package = "liblldb-4.0-dev"
; ;
2019-05-08 12:25:49 +00:00
lldb5.0)
__LLDB_Package = "liblldb-5.0-dev"
; ;
lldb6.0)
__LLDB_Package = "liblldb-6.0-dev"
; ;
2018-11-08 01:51:56 +00:00
no-lldb)
unset __LLDB_Package
; ;
2019-05-08 12:25:49 +00:00
trusty) # Ubuntu 14.04
2018-11-08 01:51:56 +00:00
if [ " $__LinuxCodeName " != "jessie" ] ; then
2019-05-08 12:25:49 +00:00
__LinuxCodeName = trusty
2018-11-08 01:51:56 +00:00
fi
; ;
2019-05-15 12:11:39 +00:00
xenial) # Ubuntu 16.04
2018-11-08 01:51:56 +00:00
if [ " $__LinuxCodeName " != "jessie" ] ; then
__LinuxCodeName = xenial
fi
; ;
2019-05-15 12:11:39 +00:00
zesty) # Ubuntu 17.04
2018-11-08 01:51:56 +00:00
if [ " $__LinuxCodeName " != "jessie" ] ; then
__LinuxCodeName = zesty
fi
; ;
2019-05-08 12:25:49 +00:00
bionic) # Ubuntu 18.04
2018-11-08 01:51:56 +00:00
if [ " $__LinuxCodeName " != "jessie" ] ; then
__LinuxCodeName = bionic
fi
; ;
2019-05-08 12:25:49 +00:00
jessie) # Debian 8
2018-11-08 01:51:56 +00:00
__LinuxCodeName = jessie
__UbuntuRepo = "http://ftp.debian.org/debian/"
; ;
2019-05-15 12:11:39 +00:00
stretch) # Debian 9
__LinuxCodeName = stretch
__UbuntuRepo = "http://ftp.debian.org/debian/"
__LLDB_Package = "liblldb-6.0-dev"
; ;
buster) # Debian 10
__LinuxCodeName = buster
__UbuntuRepo = "http://ftp.debian.org/debian/"
__LLDB_Package = "liblldb-6.0-dev"
; ;
2018-11-08 01:51:56 +00:00
tizen)
if [ " $__BuildArch " != "armel" ] ; then
echo "Tizen is available only for armel."
usage;
exit 1;
fi
__LinuxCodeName =
__UbuntuRepo =
__Tizen = tizen
; ;
alpine)
__LinuxCodeName = alpine
__UbuntuRepo =
; ;
--skipunmount)
__SkipUnmount = 1
; ;
2019-05-08 12:25:49 +00:00
--rootfsdir| -rootfsdir)
shift
__RootfsDir = $1
; ;
2018-11-08 01:51:56 +00:00
*)
2019-05-08 12:25:49 +00:00
__UnprocessedBuildArgs = " $__UnprocessedBuildArgs $1 "
2018-11-08 01:51:56 +00:00
; ;
esac
2019-05-08 12:25:49 +00:00
shift
2018-11-08 01:51:56 +00:00
done
if [ " $__BuildArch " = = "armel" ] ; then
__LLDB_Package = "lldb-3.5-dev"
fi
__UbuntuPackages += " ${ __LLDB_Package :- } "
2019-05-08 12:25:49 +00:00
if [ -z " $__RootfsDir " ] && [ ! -z " $ROOTFS_DIR " ] ; then
2018-11-08 01:51:56 +00:00
__RootfsDir = $ROOTFS_DIR
fi
2019-05-08 12:25:49 +00:00
if [ -z " $__RootfsDir " ] ; then
2019-06-05 12:10:31 +00:00
__RootfsDir = " $__CrossDir /../../../.tools/rootfs/ $__BuildArch "
2019-05-08 12:25:49 +00:00
fi
2018-11-08 01:51:56 +00:00
if [ -d " $__RootfsDir " ] ; then
if [ $__SkipUnmount = = 0 ] ; then
umount $__RootfsDir /*
fi
rm -rf $__RootfsDir
fi
if [ [ " $__LinuxCodeName " = = "alpine" ] ] ; then
__ApkToolsVersion = 2.9.1
__AlpineVersion = 3.7
__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
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 \
-X http://dl-cdn.alpinelinux.org/alpine/edge/testing \
2019-06-22 12:29:08 +00:00
-X http://dl-cdn.alpinelinux.org/alpine/edge/main \
2018-11-08 01:51:56 +00:00
-U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \
add $__AlpinePackages
rm -r $__ApkToolsDir
elif [ [ -n $__LinuxCodeName ] ] ; then
qemu-debootstrap --arch $__UbuntuArch $__LinuxCodeName $__RootfsDir $__UbuntuRepo
cp $__CrossDir /$__BuildArch /sources.list.$__LinuxCodeName $__RootfsDir /etc/apt/sources.list
chroot $__RootfsDir apt-get update
chroot $__RootfsDir apt-get -f -y install
chroot $__RootfsDir apt-get -y install $__UbuntuPackages
chroot $__RootfsDir symlinks -cr /usr
if [ $__SkipUnmount = = 0 ] ; then
umount $__RootfsDir /*
fi
if [ [ " $__BuildArch " = = "arm" && " $__LinuxCodeName " = = "trusty" ] ] ; then
pushd $__RootfsDir
patch -p1 < $__CrossDir /$__BuildArch /trusty.patch
patch -p1 < $__CrossDir /$__BuildArch /trusty-lttng-2.4.patch
popd
fi
elif [ " $__Tizen " = = "tizen" ] ; then
ROOTFS_DIR = $__RootfsDir $__CrossDir /$__BuildArch /tizen-build-rootfs.sh
else
echo "Unsupported target platform."
usage;
exit 1
fi