16f3a5cad7dd70d27b28db394029d784a0598ff0
[platform/core/ml/nnfw.git] / tools / cross / install_rootfs.sh
1 #!/usr/bin/env bash
2 usage()
3 {
4     echo "Usage: $0 [BuildArch] [LinuxCodeName] [--setproxy=IP] [--skipunmount]"
5     echo "BuildArch can be: arm(default), aarch64 and armel"
6     echo "LinuxCodeName - optional, Code name for Linux, can be: bionic(default), focal, jammy"
7     echo "                          If BuildArch is armel, this can be tizen(default)"
8     echo "--setproxy=IP - optional, IP is the proxy server IP address or url with portnumber"
9     echo "                           default no proxy. Example: --setproxy=127.1.2.3:8080"
10     echo "--skipunmount - optional, will skip the unmount of rootfs folder."
11     exit 1
12 }
13
14 __CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
15 __InitialDir=$PWD
16 __UbuntuRepo="http://ports.ubuntu.com/"
17
18 __BuildArch=arm
19 __QemuArch=armhf
20 __LinuxCodeName=bionic
21 __SkipUnmount=0
22 __IsProxySet=0
23 __Apt=""
24 # base development support
25 # install cmake to find cmake package configuration for target file system
26 __UbuntuPackages="build-essential"
27 __UbuntuPackages+=" cmake"
28
29 # other development supports
30 __UbuntuPackages+=" ocl-icd-opencl-dev"
31 __UbuntuPackages+=" libhdf5-dev"
32 __UbuntuPackages+=" libboost-all-dev"
33 __UbuntuPackages+=" libglib2.0-dev"
34
35 # symlinks fixer
36 __UbuntuPackages+=" symlinks"
37
38 __UnprocessedBuildArgs=
39
40 for i in "$@" ; do
41     lowerI="$(echo $i | awk '{print tolower($0)}')"
42     case $lowerI in
43         -?|-h|--help)
44             usage
45             exit 1
46             ;;
47         arm)
48             __BuildArch=arm
49             __QemuArch=armhf
50             ;;
51         aarch64)
52             __BuildArch=aarch64
53             __QemuArch=arm64
54             ;;
55         armel)
56             __BuildArch=armel
57             __Tizen=tizen
58             __QemuArch=
59             __UbuntuRepo=
60             __LinuxCodeName=
61             ;;
62         tizen)
63             if [ "$__BuildArch" != "armel" ]; then
64                 echo "Tizen rootfs is available only for armel."
65                 usage;
66                 exit 1;
67             fi
68             __Tizen=tizen
69             __QemuArch=
70             __UbuntuRepo=
71             __LinuxCodeName=
72             ;;
73         bionic)
74             __LinuxCodeName=bionic
75             ;;
76         focal)
77             __LinuxCodeName=focal
78             ;;
79         jammy)
80             __LinuxCodeName=jammy
81             ;;
82         --setproxy*)
83             proxyip="${i#*=}"
84             __Apt="Acquire::http::proxy \"http://$proxyip/\";\n"
85             __Apt+="Acquire::https::proxy \"http://$proxyip/\";\n"
86             __Apt+="Acquire::ftp::proxy \"ftp://$proxyip/\";"
87             __IsProxySet=1
88             ;;
89         --skipunmount)
90             __SkipUnmount=1
91             ;;
92         *)
93             __UnprocessedBuildArgs="$__UnprocessedBuildArgs $i"
94             ;;
95     esac
96 done
97
98 set -x
99
100 __RootfsDir="$__CrossDir/rootfs/$__BuildArch"
101
102 if [[ -n "$ROOTFS_DIR" ]]; then
103     __RootfsDir=$ROOTFS_DIR
104 fi
105
106 if [ -d "$__RootfsDir" ]; then
107     if [ $__SkipUnmount == 0 ]; then
108         umount $__RootfsDir/*
109     fi
110     rm -rf $__RootfsDir
111 fi
112
113 if [ $__IsProxySet == 1 ] && [ "$__Tizen" != "tizen" ]; then
114     mkdir -p $__RootfsDir/etc/apt/apt.conf.d
115     echo -e "$__Apt" >> $__RootfsDir/etc/apt/apt.conf.d/90proxy
116 fi
117
118 if [[ -n $__LinuxCodeName ]]; then
119     qemu-debootstrap --arch $__QemuArch $__LinuxCodeName $__RootfsDir $__UbuntuRepo
120     cp $__CrossDir/$__BuildArch/sources.list.$__LinuxCodeName $__RootfsDir/etc/apt/sources.list
121     chroot $__RootfsDir apt-get update
122     chroot $__RootfsDir apt-get -f -y install
123     chroot $__RootfsDir apt-get -y install $__UbuntuPackages
124     machine=$(chroot $__RootfsDir gcc -dumpmachine)
125     chroot $__RootfsDir ln -s /usr/lib/${machine}/libhdf5_serial.a /usr/lib/${machine}/libhdf5.a
126     chroot $__RootfsDir ln -s /usr/lib/${machine}/libhdf5_serial.so /usr/lib/${machine}/libhdf5.so
127     chroot $__RootfsDir symlinks -cr /usr
128
129     if [ $__SkipUnmount == 0 ]; then
130         umount $__RootfsDir/*
131     fi
132 elif [ "$__Tizen" == "tizen" ]; then
133     ROOTFS_DIR=$__RootfsDir $__CrossDir/$__BuildArch/tizen-build-rootfs.sh
134 else
135     echo "Unsupported target platform."
136     usage;
137     exit 1
138 fi