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