pack-kernel.sh: fix local version
[firefly-linux-kernel-4.4.55.git] / pack-kernel.sh
1 #!/bin/bash
2 set -e
3
4 FILES=(
5 # arch
6 arch/arm/mach-rk29/clock.c
7 arch/arm/mach-rk29/ddr.c
8 arch/arm/mach-rk29/vpu*.c
9
10 drivers/staging/rk29/ipp/rk29-ipp.c
11 )
12
13 DIRS=(
14 drivers/staging/rk29/vivante/
15 )
16
17 EXCLUDES=(
18 arch/arm/mach-rk2818/*.c
19 arch/arm/mach-rk2818/*.h
20 arch/arm/mach-rk2818/include/mach
21 arch/arm/configs/rk28*
22 drivers/*rk28*.c
23 sound/*rk28*.c
24 sound/*rk28*.h
25 include/*rk28*
26
27 arch/arm/mach-rk29/ddr_reconfig.c
28
29 drivers/staging/rk29/vivante/*.c
30 drivers/staging/rk29/vivante/*.h
31
32 arch/arm/configs/rk29_sdk_yaffs2_defconfig
33
34 arch/arm/mach-rk29/board-malata.c
35 arch/arm/mach-rk29/board-rk29malata-key.c
36 arch/arm/configs/rk29_malata_defconfig
37
38 arch/arm/mach-rk29/board-rk29-winaccord.c
39 arch/arm/configs/rk29_Winaccord_defconfig
40
41 arch/arm/mach-rk29/board-rk29-a22*
42 arch/arm/configs/rk29_a22_defconfig
43
44 arch/arm/mach-rk29/board-rk29-fih*
45 arch/arm/configs/rk29_FIH_defconfig
46
47 arch/arm/mach-rk29/board-rk29-newton*
48 arch/arm/configs/rk29_newton_defconfig
49
50 arch/arm/mach-rk29/board-rk29-p91*
51 arch/arm/configs/rk29_p91_defconfig
52 )
53
54 # ---------------------------------------------------------------------------
55 usage() {
56         echo usage: $0 kerneldir defconfig
57         echo example: $0 . rk29_ddr3sdk_defconfig
58         exit
59 }
60
61 while getopts "h" options; do
62   case $options in
63     h ) usage;;
64   esac
65 done
66 # ---------------------------------------------------------------------------
67
68 # ---------------------------------------------------------------------------
69 kerndir=${1-.}
70 kerndir=$(cd $kerndir; pwd)     # get absolute path
71 [ -d $kerndir ] || usage
72
73 defconfig=${2-rk29_ddr3sdk_defconfig}
74 if [ "$defconfig" = ".config" ]; then
75         [ -f $kerndir/.config ] || usage
76 else
77         [ -f $kerndir/arch/arm/configs/$defconfig ] || usage
78 fi
79 # ---------------------------------------------------------------------------
80
81 # make .uu
82 pushd $kerndir >/dev/null
83
84 declare -a files
85
86 for file in ${FILES[@]}; do
87         [ -e ${file} ] && files=( ${files[@]} ${file} ) || echo No such file: ${file}
88         [ -f ${file/.[cS]/.uu} ] && rm -f ${file/.[cS]/.uu}
89 done
90
91 for d in ${DIRS[@]}; do
92         [ -d $d ] && find $d -type f -name '*.uu' -print0 | xargs -0 rm -f
93 done
94
95 echo build kernel on $kerndir with $defconfig
96 make clean >/dev/null 2>&1
97 make $defconfig >/dev/null 2>&1
98 make -j`grep 'processor' /proc/cpuinfo | wc -l` ${files[@]/.[cS]/.o} ${DIRS[@]}
99
100 for file in ${FILES[@]}; do
101         filename=${file##*/} 
102         base=${filename%%.*}
103         dir=${file%/*}
104         [ -f $dir/$base.o ] && echo UU $dir/$base.uu && uuencode $dir/$base.o $base.o > $dir/$base.uu
105 done
106
107 for d in ${DIRS[@]}; do
108         for file in `find $d -type f -name '*.o'`; do
109                 filename=${file##*/} 
110                 base=${filename%%.*}
111                 dir=${file%/*}
112                 echo UU $dir/$base.uu && uuencode $dir/$base.o $base.o > $dir/$base.uu
113         done
114 done
115
116 make distclean >/dev/null 2>&1
117
118 popd >/dev/null
119
120 # fix local version
121 echo "+" > $kerndir/.scmversion
122
123 # tar kernel
124 pushd $kerndir/../ >/dev/null
125 package=$(basename $kerndir).tar
126 ex=$package.ex
127 > $ex
128 for file in ${FILES[@]}; do
129         echo "$file" >> $ex
130 done
131 for file in ${EXCLUDES[@]}; do
132         echo "$file" >> $ex
133 done
134 echo TAR $(pwd)/$package
135 tar cf $package --numeric-owner --exclude-from $ex --exclude=.git --exclude=`basename $0` $(basename $kerndir)
136 tar rf $package --numeric-owner --exclude=.git toolchain/arm-eabi-4.4.0
137 echo GZIP $(pwd)/$package.gz
138 gzip -9 -c $package > $package.gz
139 rm $ex
140 popd >/dev/null
141
142 rm -f $kerndir/.scmversion
143
144 echo done
145
146