[master] Update dependencies from dotnet/arcade dotnet/core-setup dotnet/corefx ...
[mono-project.git] / eng / common / cross / build-rootfs.sh
blobd7d5d7d5f449d73e81c9e08a3be3202d783b324c
1 #!/usr/bin/env bash
3 usage()
5 echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfsdir <directory>]"
6 echo "BuildArch can be: arm(default), armel, arm64, x86"
7 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."
8 echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine"
9 echo "--skipunmount - optional, will skip the unmount of rootfs folder."
10 exit 1
13 __LinuxCodeName=xenial
14 __CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
15 __InitialDir=$PWD
16 __BuildArch=arm
17 __UbuntuArch=armhf
18 __UbuntuRepo="http://ports.ubuntu.com/"
19 __LLDB_Package="liblldb-3.9-dev"
20 __SkipUnmount=0
22 # base development support
23 __UbuntuPackages="build-essential"
25 __AlpinePackages="alpine-base"
26 __AlpinePackages+=" build-base"
27 __AlpinePackages+=" linux-headers"
28 __AlpinePackages+=" lldb-dev"
29 __AlpinePackages+=" llvm-dev"
31 # symlinks fixer
32 __UbuntuPackages+=" symlinks"
34 # CoreCLR and CoreFX dependencies
35 __UbuntuPackages+=" libicu-dev"
36 __UbuntuPackages+=" liblttng-ust-dev"
37 __UbuntuPackages+=" libunwind8-dev"
39 __AlpinePackages+=" gettext-dev"
40 __AlpinePackages+=" icu-dev"
41 __AlpinePackages+=" libunwind-dev"
42 __AlpinePackages+=" lttng-ust-dev"
44 # CoreFX dependencies
45 __UbuntuPackages+=" libcurl4-openssl-dev"
46 __UbuntuPackages+=" libkrb5-dev"
47 __UbuntuPackages+=" libssl-dev"
48 __UbuntuPackages+=" zlib1g-dev"
50 __AlpinePackages+=" curl-dev"
51 __AlpinePackages+=" krb5-dev"
52 __AlpinePackages+=" openssl-dev"
53 __AlpinePackages+=" zlib-dev"
55 __UnprocessedBuildArgs=
56 while :; do
57 if [ $# -le 0 ]; then
58 break
61 lowerI="$(echo $1 | awk '{print tolower($0)}')"
62 case $lowerI in
63 -?|-h|--help)
64 usage
65 exit 1
67 arm)
68 __BuildArch=arm
69 __UbuntuArch=armhf
70 __AlpineArch=armhf
71 __QEMUArch=arm
73 arm64)
74 __BuildArch=arm64
75 __UbuntuArch=arm64
76 __AlpineArch=aarch64
77 __QEMUArch=aarch64
79 armel)
80 __BuildArch=armel
81 __UbuntuArch=armel
82 __UbuntuRepo="http://ftp.debian.org/debian/"
83 __LinuxCodeName=jessie
85 x86)
86 __BuildArch=x86
87 __UbuntuArch=i386
88 __UbuntuRepo="http://archive.ubuntu.com/ubuntu/"
90 lldb3.6)
91 __LLDB_Package="lldb-3.6-dev"
93 lldb3.8)
94 __LLDB_Package="lldb-3.8-dev"
96 lldb3.9)
97 __LLDB_Package="liblldb-3.9-dev"
99 lldb4.0)
100 __LLDB_Package="liblldb-4.0-dev"
102 lldb5.0)
103 __LLDB_Package="liblldb-5.0-dev"
105 lldb6.0)
106 __LLDB_Package="liblldb-6.0-dev"
108 no-lldb)
109 unset __LLDB_Package
111 trusty) # Ubuntu 14.04
112 if [ "$__LinuxCodeName" != "jessie" ]; then
113 __LinuxCodeName=trusty
116 xenial) # Ubuntu 16.04
117 if [ "$__LinuxCodeName" != "jessie" ]; then
118 __LinuxCodeName=xenial
121 zesty) # Ubuntu 17.04
122 if [ "$__LinuxCodeName" != "jessie" ]; then
123 __LinuxCodeName=zesty
126 bionic) # Ubuntu 18.04
127 if [ "$__LinuxCodeName" != "jessie" ]; then
128 __LinuxCodeName=bionic
131 jessie) # Debian 8
132 __LinuxCodeName=jessie
133 __UbuntuRepo="http://ftp.debian.org/debian/"
135 stretch) # Debian 9
136 __LinuxCodeName=stretch
137 __UbuntuRepo="http://ftp.debian.org/debian/"
138 __LLDB_Package="liblldb-6.0-dev"
140 buster) # Debian 10
141 __LinuxCodeName=buster
142 __UbuntuRepo="http://ftp.debian.org/debian/"
143 __LLDB_Package="liblldb-6.0-dev"
145 tizen)
146 if [ "$__BuildArch" != "armel" ]; then
147 echo "Tizen is available only for armel."
148 usage;
149 exit 1;
151 __LinuxCodeName=
152 __UbuntuRepo=
153 __Tizen=tizen
155 alpine)
156 __LinuxCodeName=alpine
157 __UbuntuRepo=
159 --skipunmount)
160 __SkipUnmount=1
162 --rootfsdir|-rootfsdir)
163 shift
164 __RootfsDir=$1
167 __UnprocessedBuildArgs="$__UnprocessedBuildArgs $1"
169 esac
171 shift
172 done
174 if [ "$__BuildArch" == "armel" ]; then
175 __LLDB_Package="lldb-3.5-dev"
177 __UbuntuPackages+=" ${__LLDB_Package:-}"
179 if [ -z "$__RootfsDir" ] && [ ! -z "$ROOTFS_DIR" ]; then
180 __RootfsDir=$ROOTFS_DIR
183 if [ -z "$__RootfsDir" ]; then
184 __RootfsDir="$__CrossDir/../../../.tools/rootfs/$__BuildArch"
187 if [ -d "$__RootfsDir" ]; then
188 if [ $__SkipUnmount == 0 ]; then
189 umount $__RootfsDir/*
191 rm -rf $__RootfsDir
194 if [[ "$__LinuxCodeName" == "alpine" ]]; then
195 __ApkToolsVersion=2.9.1
196 __AlpineVersion=3.7
197 __ApkToolsDir=$(mktemp -d)
198 wget https://github.com/alpinelinux/apk-tools/releases/download/v$__ApkToolsVersion/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -P $__ApkToolsDir
199 tar -xf $__ApkToolsDir/apk-tools-$__ApkToolsVersion-x86_64-linux.tar.gz -C $__ApkToolsDir
200 mkdir -p $__RootfsDir/usr/bin
201 cp -v /usr/bin/qemu-$__QEMUArch-static $__RootfsDir/usr/bin
202 $__ApkToolsDir/apk-tools-$__ApkToolsVersion/apk \
203 -X http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion/main \
204 -X http://dl-cdn.alpinelinux.org/alpine/v$__AlpineVersion/community \
205 -X http://dl-cdn.alpinelinux.org/alpine/edge/testing \
206 -X http://dl-cdn.alpinelinux.org/alpine/edge/main \
207 -U --allow-untrusted --root $__RootfsDir --arch $__AlpineArch --initdb \
208 add $__AlpinePackages
209 rm -r $__ApkToolsDir
210 elif [[ -n $__LinuxCodeName ]]; then
211 qemu-debootstrap --arch $__UbuntuArch $__LinuxCodeName $__RootfsDir $__UbuntuRepo
212 cp $__CrossDir/$__BuildArch/sources.list.$__LinuxCodeName $__RootfsDir/etc/apt/sources.list
213 chroot $__RootfsDir apt-get update
214 chroot $__RootfsDir apt-get -f -y install
215 chroot $__RootfsDir apt-get -y install $__UbuntuPackages
216 chroot $__RootfsDir symlinks -cr /usr
218 if [ $__SkipUnmount == 0 ]; then
219 umount $__RootfsDir/*
222 if [[ "$__BuildArch" == "arm" && "$__LinuxCodeName" == "trusty" ]]; then
223 pushd $__RootfsDir
224 patch -p1 < $__CrossDir/$__BuildArch/trusty.patch
225 patch -p1 < $__CrossDir/$__BuildArch/trusty-lttng-2.4.patch
226 popd
228 elif [ "$__Tizen" == "tizen" ]; then
229 ROOTFS_DIR=$__RootfsDir $__CrossDir/$__BuildArch/tizen-build-rootfs.sh
230 else
231 echo "Unsupported target platform."
232 usage;
233 exit 1