blob: c4d7a40c8544cb8117a9eea744d4202767df1118 [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
developer7273f5f2022-12-12 17:18:16 +080018MTK_MANIFEST_FEED=${BUILD_DIR}/../mtk-openwrt-feeds
developer20d67712022-03-02 14:09:32 +080019
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}'`
developer068e1a42022-08-29 17:24:20 +080029if [ -z ${OPENWRT_VER} ]; then
30 OPENWRT_VER=`cat ${BUILD_DIR}/feeds.conf.default | grep "src-git-full packages" | awk -F ";openwrt" '{print $2}'`
31fi
32
developer20d67712022-03-02 14:09:32 +080033cp ${BUILD_DIR}/feeds.conf.default ${BUILD_DIR}/feeds.conf.default_ori
34
35clean() {
36 echo "clean start!"
37 echo "It will take some time ......"
38 make distclean
39 rm -rf ${INSTALL_DIR}
40 echo "clean done!"
41}
42
43do_patch(){
44 files=`find $1 -name "*.patch" | sort`
45 for file in $files
46 do
47 patch -f -p1 -i ${file} || exit 1
48 done
49}
50
developer699cda22022-12-17 15:21:57 +080051change_config_before_defconfig() {
52 return 0
53}
54
55change_config_after_defconfig() {
56 return 0
57}
58
developer20d67712022-03-02 14:09:32 +080059prepare() {
60 echo "Preparing...."
61 #FIXME : workaround HOST PC build issue
62 #cd package/mtk/applications/luci-app-mtk/;git checkout Makefile;cd -
63 #mv package/mtk package/mtk_soc/ ./
64 #rm -rf tmp/ feeds/ target/ package/ scripts/ tools/ include/ toolchain/ rules.mk
65 #git checkout target/ package/ scripts/ tools/ include/ toolchain/ rules.mk
66 #mv ./mtk ./mtk_soc/ package/
67 cp ${BUILD_DIR}/autobuild/feeds.conf.default${OPENWRT_VER} ${BUILD_DIR}/feeds.conf.default
68
69 #update feed
70 ${BUILD_DIR}/scripts/feeds update -a
71
72 #check if manifest mtk_feed exist,if yes,overwrite and update it in feeds/
73 if [ -d ${MTK_MANIFEST_FEED} ]; then
74 rm -rf ${MTK_FEED_DIR}
75 ln -s ${MTK_MANIFEST_FEED} ${MTK_FEED_DIR}
76 ${BUILD_DIR}/scripts/feeds update -a
77 fi
78
79 #do mtk_feed prepare_sdk.sh
80 cp ${MTK_FEED_DIR}/prepare_sdk.sh ${BUILD_DIR}
81
82 #if $1 exist(mt76), keep origin openwrt patches and remove mtk local eth driver
83 if [ -z ${1} ]; then
84 ${BUILD_DIR}/prepare_sdk.sh ${MTK_FEED_DIR} || exit 1
85 else
86 ${BUILD_DIR}/prepare_sdk.sh ${MTK_FEED_DIR} ${1} || exit 1
87 rm -rf ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/ethernet/mediatek/
88 fi
89 #install feed
90 ${BUILD_DIR}/scripts/feeds install -a
91 ${BUILD_DIR}/scripts/feeds install -a luci
92
93 #do mtk_soc openwrt patch
94 do_patch ${BUILD_DIR}/autobuild/openwrt_patches${OPENWRT_VER}/mtk_soc || exit 1
95}
96
97add_proprietary_kernel_files() {
98 #cp mtk proprietary ko_module source to mtk target
99 #and also need to be done in release mtk target
developer20d67712022-03-02 14:09:32 +0800100
developer9b3248d2022-07-06 00:44:05 +0800101 # mean it is old process for possible build issue and should delete it gradually in the furture.
102 if [ ! -d ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/wireless/wifi_utility ]; then
103 mkdir -p ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/wireless
104 cp -rf ${BUILD_DIR}/../ko_module/gateway/proprietary_driver/drivers/wifi_utility/ ${BUILD_DIR}/target/linux/mediatek/files-5.4/drivers/net/wireless
105 fi
developer20d67712022-03-02 14:09:32 +0800106
107 cp -fpR ${BUILD_DIR}/autobuild/target/ ${BUILD_DIR}
108}
109
110prepare_mtwifi() {
111 #remove officail OpenWRT wifi script
112 #wifi-profile pkg will install wifi_jedi instead
113 rm -rf ${BUILD_DIR}/package/base-files/files/sbin/wifi
114
115 add_proprietary_kernel_files
116
117 #do mtk_wifi openwrt patch
118 do_patch ${BUILD_DIR}/autobuild/openwrt_patches${OPENWRT_VER}/mtk_wifi || exit 1
119}
120
developer9b3248d2022-07-06 00:44:05 +0800121prepare_flowoffload() {
developer699cda22022-12-17 15:21:57 +0800122 #cp bridger and related utilities from master
123 cp -fpR ${BUILD_DIR}/./../mac80211_package/include/bpf.mk ${BUILD_DIR}/include
124
125 cp -fpR ${BUILD_DIR}/./../mac80211_package/include/kernel-5.15 ${BUILD_DIR}/include
126
127 cp -fpR ${BUILD_DIR}/./../mac80211_package/target/llvm-bpf ${BUILD_DIR}/target
128
129 cp -fpR ${BUILD_DIR}/./../mac80211_package/tools/llvm-bpf ${BUILD_DIR}/tools
130
131 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/kernel/bpf-headers ${BUILD_DIR}/package/kernel
132
133 rm -rf ${BUILD_DIR}/package/network/utils/bpftools
134 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/utils/bpftools ${BUILD_DIR}/package/network/utils
135
developer0d889982023-03-06 20:09:24 +0800136 rm -rf ${BUILD_DIR}/package/network/utils/iproute2
137 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/utils/iproute2 ${BUILD_DIR}/package/network/utils
138
developer699cda22022-12-17 15:21:57 +0800139 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/services/bridger ${BUILD_DIR}/package/network/services
140
141 patch -f -p1 -i ${MTK_FEED_DIR}/autobuild_mac80211_release/0010-add-llvm_bpf-toolchain.patch
142
developer3fb2e8c2022-07-08 11:35:22 +0800143 patch -f -p1 -i ${MTK_FEED_DIR}/autobuild_mac80211_release/0004-2102-netfilter-remove-nf_flow_table_hw.patch
144
developer9b3248d2022-07-06 00:44:05 +0800145 #rm patches for flowblock
146 rm -rf ./target/linux/generic/pending-5.4/64*.patch
147 rm -rf ./target/linux/generic/hack-5.4/647-netfilter-flow-acct.patch
148 rm -rf ./target/linux/generic/hack-5.4/650-netfilter-add-xt_OFFLOAD-target.patch
149 rm -rf ./target/linux/mediatek/patches-5.4/1002-mtkhnat-add-support-for-virtual-interface-acceleration.patch
150
developer699cda22022-12-17 15:21:57 +0800151 #hack mt7988 config5.4
152 echo "CONFIG_BRIDGE_NETFILTER=y" >> ./target/linux/mediatek/mt7988/config-5.4
153 echo "CONFIG_NETFILTER_FAMILY_BRIDGE=y" >> ./target/linux/mediatek/mt7988/config-5.4
154 echo "CONFIG_SKB_EXTENSIONS=y" >> ./target/linux/mediatek/mt7988/config-5.4
155
developer9b3248d2022-07-06 00:44:05 +0800156 #hack mt7986 config5.4
157 echo "CONFIG_BRIDGE_NETFILTER=y" >> ./target/linux/mediatek/mt7986/config-5.4
158 echo "CONFIG_NETFILTER_FAMILY_BRIDGE=y" >> ./target/linux/mediatek/mt7986/config-5.4
159 echo "CONFIG_SKB_EXTENSIONS=y" >> ./target/linux/mediatek/mt7986/config-5.4
160
161 #hack mt7622 config5.4
162 echo "CONFIG_BRIDGE_NETFILTER=y" >> ./target/linux/mediatek/mt7622/config-5.4
163 echo "CONFIG_NETFILTER_FAMILY_BRIDGE=y" >> ./target/linux/mediatek/mt7622/config-5.4
164 echo "CONFIG_SKB_EXTENSIONS=y" >> ./target/linux/mediatek/mt7622/config-5.4
165}
166
developere2cc0fa2022-03-29 17:31:03 +0800167prepare_mac80211() {
developer7b9aeab2022-06-13 11:31:33 +0800168 rm -rf ${BUILD_DIR}/package/network/services/hostapd
169 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/services/hostapd ${BUILD_DIR}/package/network/services
170
171 rm -rf ${BUILD_DIR}/package/libs/libnl-tiny
172 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/libs/libnl-tiny ${BUILD_DIR}/package/libs
173
174 rm -rf ${BUILD_DIR}/package/network/utils/iw
developerbd32d6d2022-06-14 13:19:41 +0800175 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/utils/iw ${BUILD_DIR}/package/network/utils
developer7b9aeab2022-06-13 11:31:33 +0800176
177 rm -rf ${BUILD_DIR}/package/network/utils/iwinfo
178 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/utils/iwinfo ${BUILD_DIR}/package/network/utils
179
developer3e0400f2023-02-10 08:32:03 +0800180 rm -rf ${BUILD_DIR}/package/network/config/netifd
181 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/network/config/netifd ${BUILD_DIR}/package/network/config
182
developer7b9aeab2022-06-13 11:31:33 +0800183 rm -rf ${BUILD_DIR}/package/kernel/mac80211
developer7273f5f2022-12-12 17:18:16 +0800184 if [ $1 = "1" ]; then
185 echo "=========================MAC80211 v6.1==================="
186 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/kernel/mac80211 ${BUILD_DIR}/package/kernel
187 rm -rf ${MTK_FEED_DIR}/autobuild_mac80211_release/package/kernel/mac80211
developer699cda22022-12-17 15:21:57 +0800188 mv ${MTK_FEED_DIR}/autobuild_mac80211_release/package/kernel/mac80211_dev ${MTK_FEED_DIR}/autobuild_mac80211_release/package/kernel/mac80211
developer7273f5f2022-12-12 17:18:16 +0800189 else
190 echo "=========================MAC80211 v5.15=================="
191 tar xvf ${MTK_FEED_DIR}/autobuild_mac80211_release/package/kernel/mac80211/mac80211_v5.15.81_077622a1.tar.gz -C ${BUILD_DIR}/package/kernel/
developer77ffbda2022-12-16 04:36:08 +0800192 rm -rf ${MTK_FEED_DIR}/autobuild_mac80211_release/package/kernel/mac80211/mac80211_v5.15.81_077622a1.tar.gz
developer7273f5f2022-12-12 17:18:16 +0800193 fi
developer7b9aeab2022-06-13 11:31:33 +0800194
195 rm -rf ${BUILD_DIR}/package/firmware/wireless-regdb
developerbd32d6d2022-06-14 13:19:41 +0800196 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/firmware/wireless-regdb ${BUILD_DIR}/package/firmware
developer7b9aeab2022-06-13 11:31:33 +0800197
developera18966d2022-12-22 14:26:02 +0800198 # do not directly remove mt76 folder, since the firmware folder will also be removed and enter an unsync state
developer3e0400f2023-02-10 08:32:03 +0800199 rm -rf ${BUILD_DIR}/package/kernel/mt76/Makefile
200 rm -rf ${BUILD_DIR}/package/kernel/mt76/patches
201 rm -rf ${BUILD_DIR}/package/kernel/mt76/src
202 cp -fpR ${BUILD_DIR}/./../mac80211_package/package/kernel/mt76 ${BUILD_DIR}/package/kernel
developerf0de14b2022-12-14 23:07:34 +0800203
204 #hack hostapd config
developer9b3248d2022-07-06 00:44:05 +0800205 echo "CONFIG_MBO=y" >> ./package/network/services/hostapd/files/hostapd-full.config
206 echo "CONFIG_WPS_UPNP=y" >> ./package/network/services/hostapd/files/hostapd-full.config
207 echo "CONFIG_DPP=y" >> ./package/network/services/hostapd/files/hostapd-full.config
208 echo "CONFIG_DPP2=y" >> ./package/network/services/hostapd/files/hostapd-full.config
209 echo "CONFIG_DPP3=y" >> ./package/network/services/hostapd/files/hostapd-full.config
210 echo "CONFIG_DPP=y" >> ./package/network/services/hostapd/files/wpa_supplicant-full.config
211 echo "CONFIG_DPP2=y" >> ./package/network/services/hostapd/files/wpa_supplicant-full.config
212 echo "CONFIG_DPP3=y" >> ./package/network/services/hostapd/files/wpa_supplicant-full.config
213
developere2cc0fa2022-03-29 17:31:03 +0800214 patch -f -p1 -i ${MTK_FEED_DIR}/autobuild_mac80211_release/0001-master-mac80211-generate-hostapd-setting-from-ap-cap.patch
215 patch -f -p1 -i ${MTK_FEED_DIR}/autobuild_mac80211_release/0002-master-hostapd-makefile-for-utils.patch
216 patch -f -p1 -i ${MTK_FEED_DIR}/autobuild_mac80211_release/0003-master-mt76-makefile-for-new-chip.patch
217 cp -rfa ${MTK_FEED_DIR}/autobuild_mac80211_release/package/ ${BUILD_DIR}
developer73b93122022-04-19 23:16:58 +0800218 cp -rfa ${MTK_FEED_DIR}/autobuild_mac80211_release/target/ ${BUILD_DIR}
developere2cc0fa2022-03-29 17:31:03 +0800219}
220
developer20d67712022-03-02 14:09:32 +0800221copy_main_Config() {
222 echo cp -rfa autobuild/$1/.config ./.config
223 cp -rfa autobuild/$1/.config ./.config
224}
225
226install_output_Image() {
227 mkdir -p ${INSTALL_DIR}/$1
228
229 files=`find bin/targets/$3/*${2}* -name "*.bin" -o -name "*.img"`
230 file_count=0
231
232 for file in $files
233 do
234 tmp=${file%.*}
235 cp -rf $file ${INSTALL_DIR}/$1/${tmp##*/}-${BUILD_TIME}.${file##*.}
236 ((file_count++))
237 done
238
239 if [ ${file_count} = 0 ]; then
240 if [ ${build_flag} -eq 0 ]; then
241 let build_flag+=1
242 echo " Restart to debug-build with "make V=s -j1", starting......"
243 build $1 -j1 || [ "$LOCAL" != "1" ]
244 else
245 echo " **********Failed to build $1, bin missing.**********"
246 fi
247 else
248 echo "Install image OK!!!"
249 echo "Build $1 successfully!"
250 fi
251}
252
253install_output_Config() {
254 echo cp -rfa autobuild/$1/.config ${INSTALL_DIR}/$1/openwrt.config
255 cp -rfa autobuild/$1/.config ${INSTALL_DIR}/$1/openwrt.config
256 [ -f tmp/kernel.config ] && cp tmp/kernel.config ${INSTALL_DIR}/$1/kernel.config
257}
258
259install_output_KernelDebugFile() {
260 KernelDebugFile=bin/targets/$3/mt${2}*/kernel-debug.tar.bz2
261 if [ -f ${KernelDebugFile} ]; then
262 echo cp -rfa ${KernelDebugFile} ${INSTALL_DIR}/$1/kernel-debug.tar.bz2
263 cp -rfa ${KernelDebugFile} ${INSTALL_DIR}/$1/kernel-debug.tar.bz2
264 fi
265}
266
267install_output_RootfsDebugFile() {
268 STAGING_DIR_ROOT=$(make -f "autobuild/get_stagingdir_root.mk" get-staging-dir-root)
269 if [ -d ${STAGING_DIR_ROOT} ]; then
270 STAGING_DIR_ROOT_PREFIX=$(dirname ${STAGING_DIR_ROOT})
271 STAGING_DIR_ROOT_NAME=$(basename ${STAGING_DIR_ROOT})
272 echo "tar -jcf ${INSTALL_DIR}/$1/rootfs-debug.tar.bz2 -C \"$STAGING_DIR_ROOT_PREFIX\" \"$STAGING_DIR_ROOT_NAME\""
273 tar -jcf ${INSTALL_DIR}/$1/rootfs-debug.tar.bz2 -C "$STAGING_DIR_ROOT_PREFIX" "$STAGING_DIR_ROOT_NAME"
274 fi
275}
276
277install_output_feeds_buildinfo() {
278 feeds_buildinfo=$(find bin/targets/$3/*${2}*/ -name "feeds.buildinfo")
279 echo "feeds_buildinfo=$feeds_buildinfo"
280 if [ -f ${feeds_buildinfo} ]; then
281 cp -rf $feeds_buildinfo ${INSTALL_DIR}/$1/feeds.buildinfo
282 else
283 echo "feeds.buildinfo is not found!!!"
284 fi
285}
286
developer699cda22022-12-17 15:21:57 +0800287install_output_at() {
developer3e0400f2023-02-10 08:32:03 +0800288 tar -zcvf to_at.tgz -C ${INSTALL_DIR}/$1 .
developer699cda22022-12-17 15:21:57 +0800289 mv to_at.tgz ${INSTALL_DIR}/
290}
291
developer20d67712022-03-02 14:09:32 +0800292install_release() {
293 temp=${1#*mt}
294 chip_name=${temp:0:4}
295 temp1=`grep "CONFIG_TARGET_ramips=y" autobuild/$1/.config`
296
297 if [ "${temp1}" == "CONFIG_TARGET_ramips=y" ]; then
298 arch_name="ramips"
299 else
300 arch_name="mediatek"
301 fi
302
303 #install output image
304 install_output_Image $1 ${chip_name} ${arch_name}
305
306 #install output config
307 install_output_Config $1
308
309 #install output Kernel-Debug-File
310 install_output_KernelDebugFile $1 ${chip_name} ${arch_name}
311
312 #tar unstripped rootfs for debug symbols
313 install_output_RootfsDebugFile $1
314
developer699cda22022-12-17 15:21:57 +0800315 #install output feeds buildinfo
316 install_output_feeds_buildinfo $1 ${chip_name} ${arch_name}
developer20d67712022-03-02 14:09:32 +0800317}
318
319prepare_final() {
320 #cp customized autobuild SDK patches
321 cp -fpR ${BUILD_DIR}/autobuild/$1/target/ ${BUILD_DIR}
322 cp -fpR ${BUILD_DIR}/autobuild/$1/package/ ${BUILD_DIR}
developer7273f5f2022-12-12 17:18:16 +0800323 cp -fpR ${BUILD_DIR}/autobuild/$1/tools/ ${BUILD_DIR}
developer20d67712022-03-02 14:09:32 +0800324
325
326 #cp special subtarget patches
327 case $1 in
328 mt7986*)
329 cp -rf ${BUILD_DIR}/autobuild/mt7986-AX6000/target/linux/mediatek/patches-5.4/*.* ${BUILD_DIR}/target/linux/mediatek/patches-5.4
330 ;;
331 *)
332 ;;
333 esac
334
335 #rm old legacy patch, ex old nfi nand driver
336 case $1 in
337 mt7986*|\
developer699cda22022-12-17 15:21:57 +0800338 mt7981*|\
339 mt7988*)
developer20d67712022-03-02 14:09:32 +0800340 rm -rf ${BUILD_DIR}/target/linux/mediatek/patches-5.4/0303-mtd-spinand-disable-on-die-ECC.patch
341 ;;
342 *)
343 ;;
344 esac
345
346 cd ${BUILD_DIR}
347 [ -f autobuild/$1/.config ] || {
348 echo "unable to locate autobuild/$1/.config !"
349 return
350 }
351
352 rm -rf ./tmp
353 #copy main test config(.config)
354 copy_main_Config $1
355
developer699cda22022-12-17 15:21:57 +0800356 change_config_before_defconfig
357
developer20d67712022-03-02 14:09:32 +0800358 echo make defconfig
359 make defconfig
developer699cda22022-12-17 15:21:57 +0800360
361 change_config_after_defconfig
developer20d67712022-03-02 14:09:32 +0800362}
363
364build() {
365 echo "###############################################################################"
366 echo "# $1"
367 echo "###############################################################################"
368 echo "build $1"
369
370 cd ${BUILD_DIR}
371
developer9b3248d2022-07-06 00:44:05 +0800372 #make
373
374 echo "make V=s -j $(($(nproc) + 1)) download world"
375 make V=s -j $(($(nproc) + 1)) download world || exit 1
376
377 #tar unstripped rootfs for debug symbols
378 install_release $1
379}
380
381build_log() {
382 echo "###############################################################################"
383 echo "# $1"
384 echo "###############################################################################"
385 echo "build $1"
386
387 cd ${BUILD_DIR}
388
389 #make
390
391 echo "make V=s -j $(($(nproc) + 1)) download world"
392 make V=s -j $(($(nproc) + 1)) download world || make V=s -j1 || exit 1
developer20d67712022-03-02 14:09:32 +0800393
394 #tar unstripped rootfs for debug symbols
395 install_release $1
396}