blob: eebacc702136cc376aaee43f4997ba7938165235 [file] [log] [blame]
developer20d67712022-03-02 14:09:32 +08001#!/bin/bash
2#
3# There are 2 env-variables set for you, you can use it in your script.
4# ${BUILD_DIR} , working dir of this script, eg: openwrt/lede/
5# ${INSTALL_DIR}, where to install your build result, including: image, build log.
6#
7
8#Global variable
9BUILD_TIME=`date +%Y%m%d%H%M%S`
10build_flag=0
11
12if [ -z ${BUILD_DIR} ]; then
13 LOCAL=1
14 BUILD_DIR=`pwd`
15fi
16
17MTK_FEED_DIR=${BUILD_DIR}/feeds/mtk_openwrt_feed
18MTK_MANIFEST_FEED=${BUILD_DIR}/../mtk-openwrt-feeds
19
20if [ -z ${INSTALL_DIR} ]; then
21 INSTALL_DIR=autobuild_release
22 mkdir -p ${INSTALL_DIR}
23 if [ ! -d target/linux ]; then
24 echo "You should call this scripts from openwrt's root directory."
25 fi
26fi
27
28OPENWRT_VER=`cat ${BUILD_DIR}/feeds.conf.default | grep "src-git packages" | awk -F ";openwrt" '{print $2}'`
29cp ${BUILD_DIR}/feeds.conf.default ${BUILD_DIR}/feeds.conf.default_ori
30
31clean() {
32 echo "clean start!"
33 echo "It will take some time ......"
34 make distclean
35 rm -rf ${INSTALL_DIR}
36 echo "clean done!"
37}
38
39do_patch(){
40 files=`find $1 -name "*.patch" | sort`
41 for file in $files
42 do
43 patch -f -p1 -i ${file} || exit 1
44 done
45}
46
47prepare() {
48 echo "Preparing...."
49 #FIXME : workaround HOST PC build issue
50 #cd package/mtk/applications/luci-app-mtk/;git checkout Makefile;cd -
51 #mv package/mtk package/mtk_soc/ ./
52 #rm -rf tmp/ feeds/ target/ package/ scripts/ tools/ include/ toolchain/ rules.mk
53 #git checkout target/ package/ scripts/ tools/ include/ toolchain/ rules.mk
54 #mv ./mtk ./mtk_soc/ package/
55 cp ${BUILD_DIR}/autobuild/feeds.conf.default${OPENWRT_VER} ${BUILD_DIR}/feeds.conf.default
56
57 #update feed
58 ${BUILD_DIR}/scripts/feeds update -a
59
60 #check if manifest mtk_feed exist,if yes,overwrite and update it in feeds/
61 if [ -d ${MTK_MANIFEST_FEED} ]; then
62 rm -rf ${MTK_FEED_DIR}
63 ln -s ${MTK_MANIFEST_FEED} ${MTK_FEED_DIR}
64 ${BUILD_DIR}/scripts/feeds update -a
65 fi
66
67 #do mtk_feed prepare_sdk.sh
68 cp ${MTK_FEED_DIR}/prepare_sdk.sh ${BUILD_DIR}
69
70 #if $1 exist(mt76), keep origin openwrt patches and remove mtk local eth driver
71 if [ -z ${1} ]; then
72 ${BUILD_DIR}/prepare_sdk.sh ${MTK_FEED_DIR} || exit 1
73 else
74 ${BUILD_DIR}/prepare_sdk.sh ${MTK_FEED_DIR} ${1} || exit 1
75 rm -rf ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/
76 fi
77 #install feed
78 ${BUILD_DIR}/scripts/feeds install -a
79 ${BUILD_DIR}/scripts/feeds install -a luci
80
81 #do mtk_soc openwrt patch
82 do_patch ${BUILD_DIR}/autobuild/openwrt_patches${OPENWRT_VER}/mtk_soc || exit 1
83}
84
85add_proprietary_kernel_files() {
86 #cp mtk proprietary ko_module source to mtk target
87 #and also need to be done in release mtk target
88 mkdir -p ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/wireless
89 cp -rf ${BUILD_DIR}/../ko_module/gateway/proprietary_driver/drivers/wifi_utility/ ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/wireless
90
91 mkdir -p ${BUILD_DIR}/target/linux/mediatek/files-5.4/include/uapi/linux/
92 cp -rf ${BUILD_DIR}/../kernel/wapp_uapi_includes ${BUILD_DIR}/target/linux/mediatek/files-5.4/include/uapi/linux/wapp
93
94 cp -fpR ${BUILD_DIR}/autobuild/target/ ${BUILD_DIR}
95}
96
97prepare_mtwifi() {
98 #remove officail OpenWRT wifi script
99 #wifi-profile pkg will install wifi_jedi instead
100 rm -rf ${BUILD_DIR}/package/base-files/files/sbin/wifi
101
102 add_proprietary_kernel_files
103
104 #do mtk_wifi openwrt patch
105 do_patch ${BUILD_DIR}/autobuild/openwrt_patches${OPENWRT_VER}/mtk_wifi || exit 1
106}
107
108copy_main_Config() {
109 echo cp -rfa autobuild/$1/.config ./.config
110 cp -rfa autobuild/$1/.config ./.config
111}
112
113install_output_Image() {
114 mkdir -p ${INSTALL_DIR}/$1
115
116 files=`find bin/targets/$3/*${2}* -name "*.bin" -o -name "*.img"`
117 file_count=0
118
119 for file in $files
120 do
121 tmp=${file%.*}
122 cp -rf $file ${INSTALL_DIR}/$1/${tmp##*/}-${BUILD_TIME}.${file##*.}
123 ((file_count++))
124 done
125
126 if [ ${file_count} = 0 ]; then
127 if [ ${build_flag} -eq 0 ]; then
128 let build_flag+=1
129 echo " Restart to debug-build with "make V=s -j1", starting......"
130 build $1 -j1 || [ "$LOCAL" != "1" ]
131 else
132 echo " **********Failed to build $1, bin missing.**********"
133 fi
134 else
135 echo "Install image OK!!!"
136 echo "Build $1 successfully!"
137 fi
138}
139
140install_output_Config() {
141 echo cp -rfa autobuild/$1/.config ${INSTALL_DIR}/$1/openwrt.config
142 cp -rfa autobuild/$1/.config ${INSTALL_DIR}/$1/openwrt.config
143 [ -f tmp/kernel.config ] && cp tmp/kernel.config ${INSTALL_DIR}/$1/kernel.config
144}
145
146install_output_KernelDebugFile() {
147 KernelDebugFile=bin/targets/$3/mt${2}*/kernel-debug.tar.bz2
148 if [ -f ${KernelDebugFile} ]; then
149 echo cp -rfa ${KernelDebugFile} ${INSTALL_DIR}/$1/kernel-debug.tar.bz2
150 cp -rfa ${KernelDebugFile} ${INSTALL_DIR}/$1/kernel-debug.tar.bz2
151 fi
152}
153
154install_output_RootfsDebugFile() {
155 STAGING_DIR_ROOT=$(make -f "autobuild/get_stagingdir_root.mk" get-staging-dir-root)
156 if [ -d ${STAGING_DIR_ROOT} ]; then
157 STAGING_DIR_ROOT_PREFIX=$(dirname ${STAGING_DIR_ROOT})
158 STAGING_DIR_ROOT_NAME=$(basename ${STAGING_DIR_ROOT})
159 echo "tar -jcf ${INSTALL_DIR}/$1/rootfs-debug.tar.bz2 -C \"$STAGING_DIR_ROOT_PREFIX\" \"$STAGING_DIR_ROOT_NAME\""
160 tar -jcf ${INSTALL_DIR}/$1/rootfs-debug.tar.bz2 -C "$STAGING_DIR_ROOT_PREFIX" "$STAGING_DIR_ROOT_NAME"
161 fi
162}
163
164install_output_feeds_buildinfo() {
165 feeds_buildinfo=$(find bin/targets/$3/*${2}*/ -name "feeds.buildinfo")
166 echo "feeds_buildinfo=$feeds_buildinfo"
167 if [ -f ${feeds_buildinfo} ]; then
168 cp -rf $feeds_buildinfo ${INSTALL_DIR}/$1/feeds.buildinfo
169 else
170 echo "feeds.buildinfo is not found!!!"
171 fi
172}
173
174install_release() {
175 temp=${1#*mt}
176 chip_name=${temp:0:4}
177 temp1=`grep "CONFIG_TARGET_ramips=y" autobuild/$1/.config`
178
179 if [ "${temp1}" == "CONFIG_TARGET_ramips=y" ]; then
180 arch_name="ramips"
181 else
182 arch_name="mediatek"
183 fi
184
185 #install output image
186 install_output_Image $1 ${chip_name} ${arch_name}
187
188 #install output config
189 install_output_Config $1
190
191 #install output Kernel-Debug-File
192 install_output_KernelDebugFile $1 ${chip_name} ${arch_name}
193
194 #tar unstripped rootfs for debug symbols
195 install_output_RootfsDebugFile $1
196
197 #install output feeds buildinfo
198 install_output_feeds_buildinfo $1 ${chip_name} ${arch_name}
199}
200
201prepare_final() {
202 #cp customized autobuild SDK patches
203 cp -fpR ${BUILD_DIR}/autobuild/$1/target/ ${BUILD_DIR}
204 cp -fpR ${BUILD_DIR}/autobuild/$1/package/ ${BUILD_DIR}
205
206
207 #cp special subtarget patches
208 case $1 in
209 mt7986*)
210 cp -rf ${BUILD_DIR}/autobuild/mt7986-AX6000/target/linux/mediatek/patches-5.4/*.* ${BUILD_DIR}/target/linux/mediatek/patches-5.4
211 ;;
212 *)
213 ;;
214 esac
215
216 #rm old legacy patch, ex old nfi nand driver
217 case $1 in
218 mt7986*|\
219 mt7981*)
220 rm -rf ${BUILD_DIR}/target/linux/mediatek/patches-5.4/0303-mtd-spinand-disable-on-die-ECC.patch
221 ;;
222 *)
223 ;;
224 esac
225
226 cd ${BUILD_DIR}
227 [ -f autobuild/$1/.config ] || {
228 echo "unable to locate autobuild/$1/.config !"
229 return
230 }
231
232 rm -rf ./tmp
233 #copy main test config(.config)
234 copy_main_Config $1
235
236 echo make defconfig
237 make defconfig
238}
239
240build() {
241 echo "###############################################################################"
242 echo "# $1"
243 echo "###############################################################################"
244 echo "build $1"
245
246 cd ${BUILD_DIR}
247
248 #make
249 echo make V=s $2
250 make V=s $2 || exit 1
251
252 #tar unstripped rootfs for debug symbols
253 install_release $1
254}