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