script: fix wrong exit location
[platform/kernel/linux-amlogic.git] / build-amlogic.sh
1 #!/bin/bash
2
3 CROSS_COMPILE=${CROSS_COMPILE:-aarch64-linux-gnu-}
4 ARM_ARCH=arm64
5 NCPUS=`cat /proc/cpuinfo | grep processor | wc -l`
6
7 # Check this system has ccache
8 check_ccache()
9 {
10         type ccache
11         if [ "$?" -eq "0" ]; then
12                 CCACHE=ccache
13         fi
14 }
15
16 clean_output()
17 {
18         if [ -d output ]; then
19                 rm -rf output/*
20         else
21                 mkdir -p output
22         fi
23 }
24
25 set_names()
26 {
27         case $1 in
28         c4|n2)
29                 CONFIG=odroidg12
30                 DTB1=meson64_odroidc4.dtb
31                 DTB2=meson64_odroidn2_drm.dtb
32                 OUT_DIR=odroid
33                 ;;
34
35         vim3|vim3l)
36                 CONFIG=kvims
37                 DTB1=kvim3_linux.dtb
38                 DTB2=kvim3l_linux.dtb
39                 OUT_DIR=kvim
40                 ;;
41         esac
42 }
43
44 set_extra_version()
45 {
46         # set EXTRAVERSION for each board
47         sed -i "s/^EXTRAVERSION.*/EXTRAVERSION = -TIZEN-amlogic-${OUT_DIR}/" Makefile
48 }
49
50 clear_extra_version()
51 {
52         # clear EXTRAVERSION
53         sed -i "s/^EXTRAVERSION.*/EXTRAVERSION =/" Makefile
54 }
55
56 build_kernel()
57 {
58         rm -f arch/arm64/boot/Image*
59
60         [ -d output/${OUT_DIR} ] || mkdir -p output/${OUT_DIR}
61
62         if ! [ -e .config ]; then
63                 make tizen_${CONFIG}_defconfig
64         fi
65         make -j $NCPUS Image.gz dtbs
66         if [ ! -f "./arch/arm64/boot/Image.gz" ]; then
67                 echo "Build fail"
68                 clear_extra_version
69                 exit 1
70         fi
71
72         cp arch/arm64/boot/dts/amlogic/${DTB1} ./output/
73         cp arch/arm64/boot/dts/amlogic/${DTB2} ./output/
74         cp arch/arm64/boot/Image.gz ./output/${OUT_DIR}/
75 }
76
77 check_ext4_tool()
78 {
79         [ -e /usr/bin/make_ext4fs ] && USE_MAKE_EXT4FS=1
80         if [ "$USE_MAKE_EXT4FS" != "1" ]; then
81                 # get sudo permission for mount
82                 sudo echo "dummy" > /dev/null
83         fi
84 }
85
86 mk_modules()
87 {
88         MOD_DIR="usr/tmp_mod"
89
90         [ -d ${MOD_DIR} ] || mkdir ${MOD_DIR}
91
92         make -j $NCPUS modules
93         make modules_install INSTALL_MOD_PATH=${MOD_DIR} INSTALL_MOD_STRIP=1
94 }
95
96 mk_modules_image()
97 {
98         MOD_DIR="usr/tmp_mod"
99         MOD_IMG="usr/modules.img"
100         MOD_SIZE=100
101
102         if [ "$USE_MAKE_EXT4FS" == "1" ]; then
103                 /usr/bin/make_ext4fs -b 4096 -L modules -l ${MOD_SIZE}M $MOD_IMG ${MOD_DIR}/lib/modules/
104         else
105                 dd if=/dev/zero of=${MOD_IMG} bs=1M count=${MOD_SIZE}
106                 mkfs.ext4 -F -b 4096 -L modules ${MOD_IMG}
107
108                 [ -d ${MOD_DIR}/mnt ] || mkdir ${MOD_DIR}/mnt
109
110                 sudo mount -o loop ${MOD_IMG} ${MOD_DIR}/mnt
111                 sudo cp -rf ${MOD_DIR}/lib/modules/* ${MOD_DIR}/mnt
112                 sudo -n chown root:root ${MOD_DIR}/mnt -R
113                 sync
114                 sudo umount ${MOD_DIR}/mnt
115         fi
116         cp usr/modules.img ./output
117
118         rm -rf ${MOD_DIR}
119         rm -rf ${MOD_IMG}
120 }
121
122 create_tar()
123 {
124         # Create boot tarball for the lthor flashing
125         DATE=`date +%Y%m%d`
126         BOOT_TARBALL=tizen-local-${DATE}-boot-arm64-${BOARDS}.tar.gz
127
128         cd ./output/
129         OUTPUT_FILES=`find * -type f`
130         cd ..
131         tar czf output/${BOOT_TARBALL} -C output ${OUTPUT_FILES}
132         if [ "$?" != "0" ]; then
133                 echo "Failed to create boot tarball"
134                 exit 1
135         fi
136
137         echo "Crated output/${BOOT_TARBALL}"
138 }
139
140 case $1 in
141 c4|n2|vim3|vim3l)
142         BOARDS=$1
143         ;;
144
145 all)
146         # in kernel tree, c4 and n2 are built as a result
147         # and vim3 and vim3l are built as a result.
148         BOARDS="c4 vim3"
149         ;;
150
151 *)
152         echo "linux kernel building script for tizen amlogic boards"
153         echo "usage: $0 target"
154         echo "where target is one of: c4 n2 vim3 vim3l all"
155         exit
156         ;;
157 esac
158
159 check_ext4_tool
160 check_ccache
161 clean_output
162
163 export ARCH=${ARM_ARCH}
164 export CROSS_COMPILE="$CCACHE $CROSS_COMPILE"
165
166 if [ "$1" = "all" ]; then
167         echo "It will remove local .config to build entire boards"
168 else
169         if [ -e .config ]; then
170                 CHECK_ODROID=`grep CONFIG_ARCH_MESON64_ODROID_COMMON=y .config`
171                 if [ "$BOARDS" = "c4" ] || [ "$BOARDS" = "n2" ]; then
172                         if [ "z${CHECK_ODROID}" = "z" ]; then
173                                 echo "There is local .config, but it is differen from ${BOARD}."
174                                 echo "Please try after removing .config."
175                                 exit
176                         fi
177                 else
178                         if [ "z${CHECK_ODROID}" != "z" ]; then
179                                 echo "There is local .config, but it is differen from ${BOARD}."
180                                 echo "Please try after removing .config."
181                                 exit
182                         fi
183                 fi
184                 echo "There is local .config and build with the file."
185         fi
186 fi
187
188 for BOARD in $BOARDS
189 do
190         if [ "$1" = "all" ]; then
191                 rm -f .config
192         fi
193         set_names $BOARD
194         set_extra_version
195         build_kernel
196         mk_modules
197 done
198 clear_extra_version
199 mk_modules_image
200
201 if [ "$1" = "all" ]; then
202         BOARDS=amlogic
203 fi
204 create_tar