Merge remote-tracking branch 'stable/linux-3.0.y' into develop-3.0
[firefly-linux-kernel-4.4.55.git] / pack-kernel.sh
1 #!/bin/bash
2 set -e
3
4 # ---------------------------------------------------------------------------
5 usage() {
6         echo "usage: $0 [rk2928|rk30|rk3066b]"
7         echo "example: $0 rk3066b"
8         exit
9 }
10
11 while getopts "h" options; do
12   case $options in
13     h ) usage;;
14   esac
15 done
16 # ---------------------------------------------------------------------------
17
18 # ---------------------------------------------------------------------------
19 kerndir=$(cd .; pwd)    # get absolute path
20 [ -d $kerndir ] || usage
21
22 arch=${1}
23 FILES=()
24 DIRS=()
25 EXCLUDES=()
26
27 if [ "$arch" == "rk30" ]; then
28
29 FILES=(
30 arch/arm/mach-rk30/clock_data.c
31 arch/arm/mach-rk30/ddr.c
32 )
33
34 EXCLUDES=(
35 arch/arm/mach-rk30/*rk3066b*
36 arch/arm/mach-rk30/include/mach/*rk3066b*
37
38 arch/arm/mach-rk29*/*.c
39 arch/arm/mach-rk29*/*.h
40 arch/arm/mach-rk29*/*.S
41 arch/arm/mach-rk29*/Makefile*
42 arch/arm/mach-rk29*/include
43 arch/arm/configs/rk29*
44
45 arch/arm/mach-rk30/board-rk30-phone-*
46 arch/arm/configs/rk30_phone_*
47
48 arch/arm/configs/rk30_phonepad_c8003*
49 )
50
51 defconfig=rk3066_sdk_defconfig
52
53 elif [ "$arch" == "rk2928" ]; then
54
55 FILES=(
56 arch/arm/mach-rk2928/clock_data.c
57 arch/arm/mach-rk2928/ddr.c
58 )
59
60 EXCLUDES=(
61 arch/arm/mach-rk30/*.c
62 arch/arm/mach-rk30/*.h
63 arch/arm/mach-rk30/*.S
64 arch/arm/mach-rk30/*.inc
65 arch/arm/mach-rk30/Makefile*
66 arch/arm/mach-rk30/include
67 arch/arm/configs/rk30*
68
69 drivers/video/rockchip/lcdc/rk30*
70 drivers/video/rockchip/hdmi/chips/rk30/rk30*
71 drivers/video/rockchip/hdmi/chips/rk30/hdcp/rk30*
72
73 arch/arm/mach-rk2928/board-rk2928-a720*
74 arch/arm/configs/rk2928_a720_defconfig
75
76 arch/arm/mach-rk2928/board-rk2928.c
77 arch/arm/configs/rk2928_defconfig
78
79 arch/arm/mach-rk2928/board-rk2928-phonepad*
80 arch/arm/configs/rk2928_phonepad_defconfig
81 )
82
83 defconfig=rk2928_sdk_defconfig
84
85 elif [ "$arch" == "rk3066b" ]; then
86
87 FILES=(
88 arch/arm/mach-rk30/clock_data-rk3066b.c
89 arch/arm/mach-rk30/ddr.c
90 )
91
92 EXCLUDES=(
93 arch/arm/mach-rk30/clock_data.c
94 arch/arm/mach-rk30/board-rk30-*
95 arch/arm/configs/rk30_*
96 arch/arm/configs/rk3066_*
97
98 arch/arm/mach-rk29*/*.c
99 arch/arm/mach-rk29*/*.h
100 arch/arm/mach-rk29*/*.S
101 arch/arm/mach-rk29*/Makefile*
102 arch/arm/mach-rk29*/include
103 arch/arm/configs/rk29*
104 )
105
106 defconfig=rk3066b_sdk_defconfig
107
108 else
109         echo "unknown arch" && usage
110 fi
111
112 [ -f $kerndir/arch/arm/configs/$defconfig ] || usage
113
114 COMMON_EXCLUDES=(
115 pack-kernel*
116 arch/arm/plat-rk/vpu*.c
117 drivers/staging/rk29/vivante
118 drivers/staging/rk29/ipp/rk29-ipp.c
119 drivers/*rk28*.c
120 include/*rk28*
121 arch/arm/mach-rk29/*.c
122 arch/arm/mach-rk29/*.h
123 arch/arm/mach-rk29/*.S
124 arch/arm/mach-rk29/Makefile*
125 arch/arm/mach-rk29/include
126 arch/arm/mach-rk*/*-fpga*
127 arch/arm/mach-rk*/*-tb*
128 arch/arm/configs/rk29_*
129 arch/arm/configs/*_fpga_*
130 arch/arm/configs/*_tb_*
131 )
132 # ---------------------------------------------------------------------------
133
134 # make .uu
135 pushd $kerndir >/dev/null
136
137 declare -a files
138
139 for file in ${FILES[@]}; do
140         [ -e ${file} ] && files=( ${files[@]} ${file} ) || echo No such file: ${file}
141         [ -f ${file/.[cS]/.uu} ] && rm -f ${file/.[cS]/.uu}
142 done
143
144 for dir in ${DIRS[@]}; do
145         [ -d $dir ] && find $dir -type f -name '*.uu' -print0 | xargs -0 rm -f
146 done
147
148 echo build kernel on $kerndir with $defconfig, arch is $arch
149 make clean >/dev/null 2>&1
150 make $defconfig >/dev/null 2>&1
151
152 make -j`grep 'processor' /proc/cpuinfo | wc -l` ${files[@]/.[cS]/.o} ${DIRS[@]}
153
154 for file in ${FILES[@]}; do
155         filename=${file##*/} 
156         base=${filename%%.*}
157         dir=${file%/*}
158         [ -f $dir/$base.o ] && echo UU $dir/$base.uu && uuencode $dir/$base.o $base.o > $dir/$base.uu
159 done
160
161 for d in ${DIRS[@]}; do
162         for file in `find $d -type f -name '*.o'`; do
163                 filename=${file##*/} 
164                 base=${filename%%.*}
165                 dir=${file%/*}
166                 echo UU $dir/$base.uu && uuencode $dir/$base.o $base.o > $dir/$base.uu
167         done
168 done
169
170 make distclean >/dev/null 2>&1
171
172 popd >/dev/null
173
174 # fix local version
175 echo "+" > $kerndir/.scmversion
176
177 # tar kernel
178 pushd $kerndir/../ >/dev/null
179 package=$(basename $kerndir).tar
180 ex=$package.ex
181 > $ex
182 for file in ${FILES[@]}; do
183         echo "$file" >> $ex
184 done
185 for file in ${EXCLUDES[@]}; do
186         echo "$file" >> $ex
187 done
188 for file in ${COMMON_EXCLUDES[@]}; do
189         echo "$file" >> $ex
190 done
191 echo TAR $(pwd)/$package
192 tar cf $package --numeric-owner --exclude-from $ex --exclude=.git $(basename $kerndir)
193 #tar rf $package --numeric-owner --exclude=.git prebuilt/linux-x86/toolchain/arm-eabi-4.4.0
194 echo GZIP $(pwd)/$package.gz
195 gzip -9 -c $package > $package.gz
196 rm $ex
197 popd >/dev/null
198
199 rm -f $kerndir/.scmversion
200
201 echo done