blob: 9c7e0e571d675d1a6249e65f2bdb01fd69f45849 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
qinglin.lia40f7b62023-07-26 18:52:35 +08003function real_path() {
pengzhao.liu4acfe0c2023-10-09 14:25:37 +08004 export PATH=${ROOT_DIR}/build/kernel/build-tools/path/linux-x86:$PATH
Wanwei Jiangd71aca62023-09-13 18:14:07 +08005 if [[ "${FULL_KERNEL_VERSION}" == "common13-5.15" ]]; then
6 rel_path $@
7 else
8 realpath $1 --relative-to $2
9 fi
qinglin.lia40f7b62023-07-26 18:52:35 +080010}
11
wanwei.jiang91776952021-11-19 13:10:32 +080012function pre_defconfig_cmds() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +080013 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
Lei Zhang2853aa52022-08-23 09:40:06 +080014 if [ "${ARCH}" = "arm" ]; then
15 export PATH=${PATH}:/usr/bin/
16 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +080017
Wanwei Jiang51217812022-11-01 20:23:03 +080018 if [[ -z ${ANDROID_PROJECT} ]]; then
19 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
20 echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file}
qinglin.li931a53f2022-11-23 11:09:03 +080021 echo "CONFIG_DEVTMPFS=y" >> ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080022 if [[ ${ARCH} == arm ]]; then
Wanwei Jiang51217812022-11-01 20:23:03 +080023 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080024 else
25 if [[ ${GKI_CONFIG} == gki_20 ]]; then
26 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
Wanwei Jiange5426752023-07-03 00:56:39 +080027 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080028 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG} ${temp_file}
29 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080030 fi
31 rm ${temp_file}
32 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080033 if [[ ${ARCH} == arm ]]; then
34 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
35 else
36 if [[ ${GKI_CONFIG} == gki_20 ]]; then
37 if [[ -n ${CHECK_GKI_20} ]]; then
38 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
39 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
40 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${temp_file}
41 rm ${temp_file}
42 else
43 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG}
44 fi
Wanwei Jiange5426752023-07-03 00:56:39 +080045 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080046 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${GKI_BASE_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_GKI10} ${ROOT_DIR}/${FRAGMENT_CONFIG_DEBUG}
qinglin.li8d41aaf2023-02-07 19:49:44 +080047 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080048 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080049 fi
qinglin.li7a994a02022-12-05 15:04:40 +080050
Dezhen Wang132653e2024-10-24 06:29:43 +000051 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R || ${UPGRADE_PROJECT} == s || ${UPGRADE_PROJECT} == S || ${UPGRADE_PROJECT} == u || ${UPGRADE_PROJECT} == U ]]; then
52 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE}
qinglin.li62b23332023-06-25 10:37:41 +080053 fi
54 if [[ ${UPGRADE_PROJECT} == p || ${UPGRADE_PROJECT} == P ]]; then
55 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${FRAGMENT_CONFIG_UPGRADE_P}
56 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080057
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080058 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
59 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
60 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
61 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
62 rm ${temp_file}
63 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080064
65 if [[ -n ${DEV_CONFIGS} ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +080066 local config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
Dezhen Wanga5f456a2023-05-05 17:40:31 +080067 for config_name in ${config_list[@]}
68 do
Wanwei Jiang7c582c02023-07-21 18:34:50 +080069 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} ]]; then
70 config_file=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name}
71 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_file}
Dezhen Wanga5f456a2023-05-05 17:40:31 +080072 elif [[ -f ${config_name} ]]; then
73 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
74 else
75 echo "ERROR: config file ${config_name} is not in the right path!!"
76 exit
77 fi
78 done
79 fi
qinglin.lib71c3202023-08-01 10:29:53 +080080
81 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]] && [[ "${CONFIG_BOOTIMAGE}" == "user" ]]; then
82 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${AMLOGIC_R_USER_DIFFCONFIG}
83 fi
qinglin.li7f7de172024-01-16 16:27:14 +080084
85 if [[ -n ${KASAN} ]]; then
86 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
87 cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/amlogic_kasan.defconfig > ${temp_file}
88 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r \
89 ${ROOT_DIR}/${KCONFIG_DEFCONFIG} \
90 ${temp_file}
91 rm ${temp_file}
92 fi
wanwei.jiang91776952021-11-19 13:10:32 +080093}
94export -f pre_defconfig_cmds
95
96function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080097 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080098}
99export -f post_defconfig_cmds
100
101function read_ext_module_config() {
102 ALL_LINE=""
103 while read LINE
104 do
105 if [[ $LINE != \#* && $LINE != "" ]]; then
106 ALL_LINE="$ALL_LINE"" ""$LINE"
107 fi
108 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800109
110 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800111}
112
Dezhen Wangc7e8fda2024-03-19 07:15:42 +0000113function copy_pre_commit(){
pengzhao.liua923dea2023-06-25 09:58:20 +0800114 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
115 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
116 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
117 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
118 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
119 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
120 fi
121 fi
122}
123
wanwei.jiang91776952021-11-19 13:10:32 +0800124function read_ext_module_predefine() {
125 PRE_DEFINE=""
126
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800127 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800128 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
129 done
130
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800131 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800132 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
133 done
134
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800135 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800136}
137
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800138top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800139function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800140 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800141 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800142 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
143 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
144 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
145 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800146 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800147
148 for ext_module_config in ${EXT_MODULES_CONFIG}; do
149 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
150 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
151 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
152 done
153 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
154 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
155 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
156
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800157 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
158 if [[ -d ${top_ext_drivers} ]]; then
159 rm -rf ${top_ext_drivers}
160 fi
161 mkdir -p ${top_ext_drivers}
162 fi
163
164 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
165 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
166 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800167 ext_modules=
168 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800169 module_abs_path=`readlink -e ${ext_module}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800170 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800171 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
172 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
173 cp -rf ${module_abs_path} ${top_ext_drivers}
174 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
175 fi
176 fi
177 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800178 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800179
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800180 for ext_module_path in ${EXT_MODULES_PATH}; do
181 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800182 while read LINE
183 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800184 module_abs_path=`readlink -e ${LINE}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800185 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800186 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
187 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
188 cp -rf ${module_abs_path} ${top_ext_drivers}
189 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
190 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800191 fi
192 ext_modules="${ext_modules} ${module_rel_path}"
193
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800194 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800195 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800196 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800197
198 local flag=0
199 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
200 for ext_module in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +0800201 ext_mod_rel=$(real_path ${ext_module} ${KERNEL_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800202 if [[ ${flag} -eq "1" ]]; then
203 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
204 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
205 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
206 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
207 echo "${ext_module}/Makefile add: ${extra_symbols}"
208 fi
209 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
210 flag=1
211 done
212 fi
213
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800214 export EXT_MODULES
215 echo EXT_MODULES=${EXT_MODULES}
216
217 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800218}
wanwei.jiang91776952021-11-19 13:10:32 +0800219export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800220
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800221function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800222 echo "========================================================"
223 echo " Running extra build command(s):"
224
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800225 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
226 for ext_module in ${EXT_MODULES}; do
227 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
228 done
229 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800230
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800231 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
232 if [[ -d ${top_ext_drivers} ]]; then
233 rm -rf ${top_ext_drivers}
234 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800235 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800236
237 for FILE in ${FILES}; do
238 if [[ "${FILE}" =~ \.dtbo ]] && \
239 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
240 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
241 fi
242 done
243 export MKDTIMG_DTBOS
244
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800245 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800246 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800247 set -x
248
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800249 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
250 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800251 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800252 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800253 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800254 while read LINE
255 do
256 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800257 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800258 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800259 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800260 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800261 ext_modules=
262 for ext_module in ${EXT_MODULES}; do
263 if [[ ${ext_module} =~ "../" ]]; then
264 ext_module_old=${ext_module}
265 ext_module=${ext_module//\.\.\//}
266 ext_dir=$(dirname ${ext_module})
267 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
268 mkdir -p extra/${ext_dir}
269 cp -rf extra/${ext_module_old} extra/${ext_dir}
270
271 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
272 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800273 sed -i "s/\.\.\///g" ${ext_modules_order_file}
274 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800275 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800276 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800277 else
278 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800279 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800280 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800281 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800282 fi
283 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800284 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800285 EXT_MODULES=${ext_modules}
286 echo EXT_MODULES=${EXT_MODULES}
287 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800288
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800289 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800290 file_last_line=`sed -n "$=" modules.order`
291 let line=${file_last_line}-${ramdisk_last_line}
292 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800293 export MODULES_LIST=${src_dir}/vendor_boot_modules
294 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800295 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
296 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800297
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800298 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800299
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800300 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800301 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
302 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800303
304 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
305 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800306 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800307 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
308 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
309 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800310 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800311 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
312 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
313 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
314 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
315 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
316 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800317 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
318 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800319 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800320 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800321 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800322
323 for module_path in ${PREBUILT_MODULES_PATH}; do
324 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
325 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800326}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800327export -f extra_cmds
328
Wanwei Jiang2218b892023-03-17 17:31:21 +0800329function bazel_extra_cmds() {
330 modules_install
331
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800332 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800333 return
334 fi
335
Wanwei Jiang2218b892023-03-17 17:31:21 +0800336 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
337 : > ${KERNEL_BUILD_VAR_FILE}
338 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
339 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
340 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
341 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800342 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800343 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800344 fi
345
346 if [[ ${GKI_CONFIG} != gki_20 ]]; then
347 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
348 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
349 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
350 mkdir ${DIST_DIR}/system_dlkm_gki10
351 pushd ${DIST_DIR}/system_dlkm_gki10
352 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
353 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800354 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800355 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
356 rm -f ${module}
357 fi
358 done
359 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
360 popd
361 rm -rf ${DIST_DIR}/system_dlkm_gki10
362 fi
363}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800364export -f bazel_extra_cmds
365
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800366#$1 dep_file
367#$2 ko
368#$3 install_sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800369function mod_probe() {
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800370 local dep_file=$1
371 local ko=$2
372 local install_sh=$3
qinglin.li71c0eed2024-07-10 17:06:06 +0800373
374 if [[ ${loaded_modules[$ko]} ]]; then
375 return
376 fi
377
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800378 local loop
qinglin.li71c0eed2024-07-10 17:06:06 +0800379 for loop in $(grep "^${ko}:" $dep_file | sed 's/.*://'); do
380 mod_probe $dep_file $loop $install_sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800381 done
qinglin.li71c0eed2024-07-10 17:06:06 +0800382
383 echo insmod $ko >> $install_sh
384 loaded_modules[$ko]=1
wanwei.jiang612a8882021-11-23 17:12:23 +0800385}
386
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800387function create_install_and_order_filles() {
388 local modules_dep_file=$1
389 local install_file=$2
390 local modules_order_file=$3
Wanwei Jiang571dde62022-11-17 14:37:41 +0800391 local loop
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800392
393 [[ -f ${install_file} ]] && rm -f ${install_file}
394 touch ${install_file}
395 [[ -f ${install_file}.tmp ]] && rm -f ${install_file}.tmp
396 touch ${install_file}.tmp
397 [[ -f ${modules_order_file} ]] && rm -f ${modules_order_file}
398 touch ${modules_order_file}
399 [[ -f ${modules_order_file}.tmp ]] && rm -f ${modules_order_file}.tmp
400 touch ${modules_order_file}.tmp
401
qinglin.li71c0eed2024-07-10 17:06:06 +0800402 declare -A loaded_modules
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800403 for loop in `cat ${modules_dep_file} | sed 's/:.*//'`; do
404 echo ${loop} >> ${modules_order_file}.tmp
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800405 mod_probe ${modules_dep_file} ${loop} ${install_file}.tmp
Wanwei Jiang571dde62022-11-17 14:37:41 +0800406 done
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800407
408 cat ${install_file}.tmp | awk ' {
409 if (!cnt[$2]) {
410 print $0;
411 cnt[$2]++;
412 }
413 }' > ${install_file}
414
415 cut -d ' ' -f 2 ${install_file} > ${modules_order_file}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800416}
417
wanwei.jiangb12abc82021-12-25 22:17:10 +0800418function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800419 if [[ -n $1 ]]; then
420 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800421 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800422
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800423 cp modules.dep modules.dep.temp
424
425 soc_module=()
426 for chip in ${chips[@]}; do
427 chip_module=`ls amlogic-*-soc-${chip}.ko`
428 soc_module=(${soc_module[@]} ${chip_module[@]})
429 done
430 echo soc_module=${soc_module[*]}
431
432 delete_soc_module=()
433 if [[ ${#soc_module[@]} == 0 ]]; then
434 echo "Use all soc module"
435 else
436 for module in `ls amlogic-*-soc-*`; do
437 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
438 echo Delete soc module: ${module}
439 sed -n "/${module}:/p" modules.dep.temp
440 sed -i "/${module}:/d" modules.dep.temp
441 delete_soc_module=(${delete_soc_module[@]} ${module})
442 fi
443 done
444 echo delete_soc_module=${delete_soc_module[*]}
445 fi
446
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800447 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800448 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800449 for module in `ls amlogic-clk-soc-*`; do
450 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
451 echo Delete clk soc module: ${module}
452 sed -n "/${module}:/p" modules.dep.temp
453 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800454 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800455 fi
456 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800457 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800458 fi
459
460 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800461 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800462 for module in `ls amlogic-pinctrl-soc-*`; do
463 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
464 echo Delete pinctrl soc module: ${module}
465 sed -n "/${module}:/p" modules.dep.temp
466 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800467 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800468 fi
469 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800470 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800471 fi
472
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800473 in_line_i=a
474 delete_type_modules=()
qinglin.li894e63e2024-12-11 14:41:51 +0800475 rule_type_modules=
476 select_type_modules=
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800477 [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID}
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800478 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
479 mkdir temp_dir
480 cd temp_dir
481 in_temp_dir=y
482 for element in ${TYPE_MODULE_SELECT_MODULE}; do
483 if [[ ${in_temp_dir} = y ]]; then
484 cd ../
485 rm -r temp_dir
486 in_temp_dir=
487 fi
488 if [[ ${in_line_i} = a ]]; then
489 in_line_i=b
490 type_module=${element}
491 select_modules_i=0
492 select_modules_count=
493 select_modules=
494 elif [[ ${in_line_i} = b ]]; then
495 in_line_i=c
496 select_modules_count=${element}
497 else
498 let select_modules_i+=1
499 select_modules="${select_modules} ${element}"
500 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
501 in_line_i=a
502 echo type_module=$type_module select_modules=$select_modules
qinglin.li894e63e2024-12-11 14:41:51 +0800503 rule_type_modules="${rule_type_modules} ${type_module}"
504 select_type_modules="${select_type_modules} ${select_modules}"
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800505 fi
506 fi
507 done
qinglin.li894e63e2024-12-11 14:41:51 +0800508
509 if [[ -n ${ANDROID_PROJECT} ]];then
510 rule_type_modules="${rule_type_modules} ${DEFAULT_DELETE_TYPE_LIST[@]}"
511 rule_type_modules="${rule_type_modules} `echo ${DEFAULT_DELETE_TYPE_LIST_ANDROID}`"
512 fi
513 echo rule_type_modules="${rule_type_modules}"
514 echo select_type_modules="${select_type_modules}"
515
516 for module in `ls ${rule_type_modules}`; do
517 dont_delete_module=0
518 for select_module in ${select_type_modules}; do
519 if [[ "${select_module}" == "${module}" ]] ; then
520 dont_delete_module=1
521 break;
522 fi
523 done
524 if [[ ${dont_delete_module} != 1 ]]; then
525 echo Delete module: ${module}
526 sed -n "/${module}:/p" modules.dep.temp
527 sed -i "/${module}:/d" modules.dep.temp
528 delete_type_modules=(${delete_type_modules[@]} ${module})
529 fi
530 done
531 echo delete_type_modules=${delete_type_modules[*]}
532
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800533 if [[ -n ${in_temp_dir} ]]; then
534 cd ../
535 rm -r temp_dir
536 fi
537
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800538 mkdir service_module
539 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
Dezhen Wang0a453292024-02-27 07:33:57 +0000540 mkdir extra_closed_source_modules
541 echo EXTRA_CLOSED_SOURCE_MODULE_LIST=${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]}
542
543 BLACK_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]} ${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]})
544 echo BLACK_LIST=${BLACK_LIST[@]}
545 black_modules=()
546 for module in ${BLACK_LIST[@]}; do
547 if [[ `ls ${module}* 2>/dev/null` ]]; then
548 modules=`ls ${module}*`
549 else
550 continue
551 fi
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800552 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800553 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800554 if [[ ${#black_modules[@]} == 0 ]]; then
555 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800556 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800557 echo black_modules=${black_modules[*]}
558 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800559 echo Delete module: ${module}
560 sed -n "/${module}:/p" modules.dep.temp
561 sed -i "/${module}:/d" modules.dep.temp
562 done
563 fi
564
Wanwei Jiang475245b2023-05-10 21:06:52 +0800565 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800566 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800567 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.li863ae032024-12-19 14:37:06 +0800568 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
569 do
570 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
571 done
Wanwei Jiang475245b2023-05-10 21:06:52 +0800572
573 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
574 sed -i "/\/${module}/d" ${gki_modules_temp_file}
575 done
576
577 for module in `cat ${gki_modules_temp_file}`; do
578 module=${module##*/}
579 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
580 done
581 rm -f ${gki_modules_temp_file}
582
583 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
584 echo Delete module: ${module}
Dezhen Wang50d56482023-11-20 19:56:14 +0800585 sed -n "/^${module}:/p" modules.dep.temp
586 sed -i "/^${module}:/d" modules.dep.temp
Wanwei Jiang475245b2023-05-10 21:06:52 +0800587 done
588 fi
589
qinglin.li71c0eed2024-07-10 17:06:06 +0800590 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp0
Wanwei Jiang475245b2023-05-10 21:06:52 +0800591 delete_modules=(${delete_soc_module[@]} ${delete_clk_soc_modules[@]} ${delete_pinctrl_soc_modules[@]} ${delete_type_modules[@]} ${black_modules[@]} ${GKI_MODULES_LOAD_BLACK_LIST[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800592 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800593 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800594 continue
595 fi
qinglin.li71c0eed2024-07-10 17:06:06 +0800596 match=`sed -n "/${module}/=" modules.dep.temp0`
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800597 for match in ${match[@]}; do
598 match_count=(${match_count[@]} $match)
599 done
600 if [[ ${#match_count[@]} != 0 ]]; then
601 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800602 echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800603 exit
604 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800605 if [[ -n ${ANDROID_PROJECT} ]]; then
606 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
Dezhen Wang0a453292024-02-27 07:33:57 +0000607 if [[ ${module} =~ ${service_module_temp} ]]; then
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800608 mv ${module} service_module
609 fi
610 done
611 fi
Dezhen Wang0a453292024-02-27 07:33:57 +0000612 for extra_closed_source_module in ${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]}; do
613 if [[ ${module} =~ ${extra_closed_source_module} ]]; then
614 mv ${module} extra_closed_source_modules
615 fi
616 done
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800617 rm -f ${module}
618 done
qinglin.li71c0eed2024-07-10 17:06:06 +0800619 rm -f modules.dep.temp0
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800620
qinglin.li71c0eed2024-07-10 17:06:06 +0800621 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800622 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
623 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800624 sed -n "/${module}:/p" modules.dep.temp
625 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
626 sed -i "/${module}:/d" modules.dep.temp
627 sed -n "/${module}.*\.ko:/p" modules.dep.temp
628 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
629 sed -i "/${module}.*\.ko:/d" modules.dep.temp
630 done
631
Wanwei Jiang571dde62022-11-17 14:37:41 +0800632 if [[ -n ${ANDROID_PROJECT} ]]; then
633 cp modules.dep.temp modules_recovery.dep.temp
634 cp modules.dep.temp1 modules_recovery.dep.temp1
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800635 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
636 echo RECOVERY_MODULES_LOAD_LIST: $module
637 sed -n "/${module}:/p" modules_recovery.dep.temp
638 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
639 sed -i "/${module}:/d" modules_recovery.dep.temp
640 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
641 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
642 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
643 done
644 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
645 cp modules_recovery.dep.temp1 modules_recovery.dep
646 rm modules_recovery.dep.temp
647 rm modules_recovery.dep.temp1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800648 fi
649
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800650 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
651 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
652 sed -n "/${module}:/p" modules.dep.temp
653 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
654 sed -i "/${module}:/d" modules.dep.temp
655 sed -n "/${module}.*\.ko:/p" modules.dep.temp
656 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
657 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800658 done
659
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800660 : > modules.dep.temp2
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800661 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
662 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
663 sed -n "/${module}:/p" modules.dep.temp
664 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
665 sed -i "/${module}:/d" modules.dep.temp
666 sed -n "/${module}.*\.ko:/p" modules.dep.temp
667 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
668 sed -i "/${module}.*\.ko:/d" modules.dep.temp
669 done
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800670 cat modules.dep.temp >> modules.dep.temp1
671 cat modules.dep.temp2 >> modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800672 cp modules.dep.temp1 modules.dep
673 rm modules.dep.temp
674 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800675 rm modules.dep.temp2
676}
677
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800678function calculate_first_line() {
679 local modules_order_file=$1
680 local modules_list=($2)
681 local module
682 local module_lines=()
683 local lines
684 local first_line
685
686 for module in ${modules_list[@]}; do
687 module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}`
Wanwei Jiang9173e462022-09-29 00:58:33 +0800688 done
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800689 lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n`
690 first_line=`echo ${lines} | cut -d ' ' -f 1`
691 echo ${first_line}
692}
693
694function calculate_last_line() {
695 local modules_order_file=$1
696 local modules_list=($2)
697 local module
698 local module_lines=()
699 local lines
700 local last_line
701
702 for module in ${modules_list[@]}; do
703 module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}`
704 done
705 lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n -r`
706 last_line=`echo ${lines} | cut -d ' ' -f 1`
707 [[ -z ${last_line} ]] && last_line=0
708 echo ${last_line}
709}
710
711function create_ramdisk_vendor_recovery() {
712 modules_order=$1
713 if [[ -n ${ANDROID_PROJECT} ]]; then
714 modules_recovery_order=$2
qinglin.libce54712023-05-08 13:56:31 +0800715 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800716 local modules_list
717
718 modules_list=`echo ${RAMDISK_MODULES_LOAD_LIST[@]}`
719 export ramdisk_last_line=`calculate_last_line ${modules_order} "${modules_list}"`
720 export ramdisk_last_line_add_1=${ramdisk_last_line}
721 let ramdisk_last_line_add_1+=1
722 echo ramdisk_last_line=${ramdisk_last_line}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800723
724 if [[ -n ${ANDROID_PROJECT} ]]; then
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800725 modules_list=`echo ${RECOVERY_MODULES_LOAD_LIST[@]}`
726 recovery_last_line=`calculate_last_line ${modules_recovery_order} "${modules_list}"`
727 echo recovery_last_line=${recovery_last_line}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800728 mkdir recovery
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800729 if [[ ${recovery_last_line} == 0 ]]; then
730 : > recovery/recovery_modules.order
731 : > recovery_install.sh
732 else
733 sed -n "${ramdisk_last_line_add_1},${recovery_last_line}p" ${modules_recovery_order} > recovery/recovery_modules.order
734 cat recovery/recovery_modules.order | xargs cp -t recovery/
735 cat recovery/recovery_modules.order | sed "s/^/insmod &/" > recovery_install.sh
qinglin.lidba324f2023-03-02 19:56:21 +0800736 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800737
Wanwei Jiang571dde62022-11-17 14:37:41 +0800738 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
739 echo "echo Install recovery modules success!" >> recovery_install.sh
740 chmod 755 recovery_install.sh
741 mv recovery_install.sh recovery/
742 fi
743
wanwei.jiang50759e12022-03-24 12:36:17 +0800744 mkdir ramdisk
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800745 head -n ${ramdisk_last_line} ${modules_order} > ramdisk/ramdisk_modules.order
746 echo -e "#!/bin/sh\n\nset -x" > ramdisk/ramdisk_install.sh
747 if [[ ${ramdisk_last_line} != 0 ]]; then
748 cat ramdisk/ramdisk_modules.order | xargs mv -t ramdisk/
749 cat ramdisk/ramdisk_modules.order | sed "s/^/insmod &/" >> ramdisk/ramdisk_install.sh
qinglin.li6e3847d2023-08-09 15:39:05 +0800750 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800751 echo "echo Install ramdisk modules success!" >> ramdisk/ramdisk_install.sh
752 chmod 755 ramdisk/ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800753
wanwei.jiang50759e12022-03-24 12:36:17 +0800754 mkdir vendor
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800755 sed -n "${ramdisk_last_line_add_1},$$p" ${modules_order} > vendor/vendor_modules.order
756 echo -e "#!/bin/sh\n\nset -x" > vendor/vendor_install.sh
757 if [[ -s vendor/vendor_modules.order ]]; then
758 cat vendor/vendor_modules.order | xargs mv -t vendor/
759 cat vendor/vendor_modules.order | sed "s/^/insmod &/" >> vendor/vendor_install.sh
760 fi
761 echo "echo Install vendor modules success!" >> vendor/vendor_install.sh
762 chmod 755 vendor/vendor_install.sh
wanwei.jiangb12abc82021-12-25 22:17:10 +0800763}
764
wanwei.jiang612a8882021-11-23 17:12:23 +0800765function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800766 arg1=$1
767
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800768 if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then
769 MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
770 fi
771 source ${MODULES_SEQUENCE_LIST}
772
Dezhen Wang0a453292024-02-27 07:33:57 +0000773 if [[ ! -f ${EXTRA_MODULES_LIST} ]]; then
774 EXTRA_MODULES_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_list
775 fi
776 source ${EXTRA_MODULES_LIST}
777
Wanwei Jiang2218b892023-03-17 17:31:21 +0800778 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
779 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800780 rm -rf ${OUT_AMLOGIC_DIR}
781 mkdir -p ${OUT_AMLOGIC_DIR}
782 mkdir -p ${OUT_AMLOGIC_DIR}/modules
783 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800784 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800785
Wanwei Jiang2218b892023-03-17 17:31:21 +0800786 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800787 BAZEL_OUT=${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common
788 if [[ -n ${FAST_BUILD} ]]; then
789 kernel_release=`cat ${BAZEL_OUT}/kernel_aarch64/include/config/kernel.release`
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800790 if [[ -z ${ANDROID_PROJECT} ]]; then
791 mkdir -p ${OUT_AMLOGIC_DIR}/fast_build/amlogic
792 tar -zxf ${BAZEL_OUT}/amlogic/modules_staging_dir_self.tar.gz -C ${OUT_AMLOGIC_DIR}/fast_build/amlogic
793 cp ${BAZEL_OUT}/amlogic_kbuild_mixed_tree/System.map ${OUT_AMLOGIC_DIR}/fast_build/amlogic
794 pushd ${OUT_AMLOGIC_DIR}/fast_build/amlogic
795 depmod -e -F System.map -b . ${kernel_release}
796 cp ${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/${kernel_release}/modules.order ${DIST_DIR}/modules.load
797 popd
798 else
799 cp ${BAZEL_OUT}/amlogic_modules_install/staging/lib/modules/${kernel_release}/modules.dep ${DIST_DIR}/modules.load
800 sed -i "s/:.*//g" ${DIST_DIR}/modules.load
801 fi
Wanwei Jiangea102c02024-07-09 17:37:37 +0800802 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800803 while read module
804 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800805 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800806 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800807 if [[ -f ${DIST_DIR}/${module_name} ]]; then
808 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
809 else
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800810 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800811 module_f=
812 for module_l in `find ${BAZEL_OUT}/kernel_aarch64 -name ${module_name}`; do
813 if [[ ${module_l} =~ ${module#*/} ]]; then
814 module_f=${module_l}
815 break
816 fi
817 done
818 module=${module_f}
819 if [[ -z ${module_f} ]]; then
820 module=`find ${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/ -name ${module_name}`
821 fi
822 else
823 module=`find ${BAZEL_OUT}/amlogic_modules_install/staging/lib/modules/ -name ${module_name}`
824 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800825 cp ${module} ${OUT_AMLOGIC_DIR}/modules
826 fi
827 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800828 module=${module#*/}
829 local match=
830 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
831 if [[ "${module}" =~ "${ext_module}" ]]; then
832 match=1
833 break
834 fi
835 done
836 if [[ ${match} == 1 ]]; then
837 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
838 else
839 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
840 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800841 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800842 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800843 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800844 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800845
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800846 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800847 dep_file=${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/${kernel_release}/modules.dep
848 else
849 dep_file=`find ${BAZEL_OUT}/amlogic_modules_install -name *.dep | grep "amlogic"`
850 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800851 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800852 if [[ -n ${ANDROID_PROJECT} ]]; then
853 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
854 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
855 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
856 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
857 done
858 done
859
860 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800861 for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800862 order_file_dir=${order_file#*/extra/}
863 order_file_dir=${order_file_dir%/modules.order.*}
864 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
865 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
866 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
867 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
868 fi
869 done
870 else
871 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
872 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800873 else
874 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
875 pushd ${MODULES_ROOT_DIR}
876 local common_drivers=${COMMON_DRIVERS_DIR##*/}
877 local modules_list=$(find -type f -name "*.ko")
878 for module in ${modules_list}; do
879 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
880 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
881 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
882 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800883 local match=
884 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
885 if [[ "${module}" =~ "${ext_module}" ]]; then
886 match=1
887 break
888 fi
889 done
890 if [[ ${match} == 1 ]]; then
891 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
892 else
893 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
894 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800895 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800896 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800897 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
898 fi
899 done
900
901 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
902 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800903 dep_file=modules.dep
904 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
905 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
906 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
907 done
908 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800909 else # all modules, include external modules
910 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800911 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800912 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800913 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800914 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800915 sed -i 's#[^ ]*/##g' modules.dep
916
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800917 echo adjust_sequence_modules_loading
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800918 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800919
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800920 echo create_install_and_order_filles modules.order
921 create_install_and_order_filles modules.dep __install.sh modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800922
923 if [[ -n ${ANDROID_PROJECT} ]]; then
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800924 echo create_install_and_order_filles modules_recovery.order
925 create_install_and_order_filles modules_recovery.dep __install_recovery.sh modules_recovery.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800926 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800927
928 create_ramdisk_vendor_recovery modules.order modules_recovery.order
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800929
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800930 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
931 install_file=manual_install.sh
932 else
933 install_file=install.sh
934 fi
935 echo "#!/bin/sh" > ${install_file}
936 echo "cd ramdisk" >> ${install_file}
937 echo "./ramdisk_install.sh" >> ${install_file}
938 echo "cd ../vendor" >> ${install_file}
939 echo "./vendor_install.sh" >> ${install_file}
940 echo "cd ../" >> ${install_file}
941 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800942
943 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
944
Wanwei Jiang571dde62022-11-17 14:37:41 +0800945 if [[ -n ${ANDROID_PROJECT} ]]; then
946 rm __install_recovery.sh __install_recovery.sh.tmp
947 fi
948
wanwei.jiang236e9a32021-12-07 16:34:14 +0800949 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800950
Wanwei Jiang2218b892023-03-17 17:31:21 +0800951 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800952 if [[ -n ${FAST_BUILD} ]]; then
953 cp ${BAZEL_OUT}/kernel_aarch64/vmlinux ${OUT_AMLOGIC_DIR}/symbols
954 cp ${BAZEL_OUT}/kernel_aarch64/vmlinux ${DIST_DIR}/
955 cp ${BAZEL_OUT}/kernel_aarch64/Image* ${DIST_DIR}/
956 else
957 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
958 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800959
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800960 find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800961 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
Wanwei Jiang2218b892023-03-17 17:31:21 +0800962 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800963 else
964 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
965 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
966 for ext_module in ${EXT_MODULES}; do
967 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
968 done
969 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800970}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800971export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800972
Wanwei Jiang2218b892023-03-17 17:31:21 +0800973function rename_external_module_name() {
974 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800975 sed 's/^[\t ]*\|[\t ]*$//g' ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/modules_rename.txt | sed '/^#/d;/^$/d' | sed 's/[[:space:]][[:space:]]*/ /g' | while read module_line; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800976 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
977 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
978 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800979 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800980 for module in ${modules_name}; do
981 echo module=$module
982 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
983 if [[ -z ${external_coppied} ]]; then
984 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
985 external_coppied=1
986 fi
987 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
988 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800989 done
990 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800991 done
992}
993export -f rename_external_module_name
994
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800995# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800996function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800997 echo
998 echo "========================================================"
999 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1000 echo "Rebuild rootfs in order to install modules!"
1001 else
1002 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1003 return
1004 fi
1005
wanwei.jiangff4dccd2022-08-14 01:14:51 +08001006 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +08001007
Lei Zhang475c17b2022-03-03 11:08:50 +08001008 local ARCH=arm64
1009 if [[ -n $1 ]]; then
1010 ARCH=$1
1011 fi
1012
wanwei.jiang612a8882021-11-23 17:12:23 +08001013 rm rootfs -rf
1014 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +08001015 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +08001016 cd rootfs
1017 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
1018 gunzip rootfs_base.cpio.gz
1019 mkdir rootfs
1020 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +08001021 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +08001022 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
1023 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +08001024 fi
wanwei.jiang612a8882021-11-23 17:12:23 +08001025 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +08001026
dongqing.li6fd83502023-06-15 09:59:40 +08001027 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +08001028 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +08001029 mkimage -A ${ARCH} -O linux -T ramdisk -C none -d rootfs_new.cpio.gz rootfs_new.cpio.gz.uboot
wanwei.jiang612a8882021-11-23 17:12:23 +08001030 mv rootfs_new.cpio.gz.uboot ../
1031 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +08001032 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +08001033
1034 popd
1035}
1036export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +08001037
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001038# function check_undefined_symbol can check the dependence among the modules
1039# parameter:
1040# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +08001041function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +08001042 if [[ ${MODULES_DEPEND} != "1" ]]; then
1043 return
1044 fi
1045
1046 echo "========================================================"
1047 echo "print modules depend"
1048
wanwei.jiangff4dccd2022-08-14 01:14:51 +08001049 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +08001050 echo
1051 echo "========================================================"
1052 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001053 if [[ -n ${LLVM} ]]; then
1054 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
1055 elif [[ -n ${CROSS_COMPILE} ]]; then
1056 compile_tool=${CROSS_COMPILE}
1057 else
1058 echo "can't find compile tool"
1059 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +08001060 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
Wanwei Jiangd71aca62023-09-13 18:14:07 +08001061 cp modules.order module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001062 cp ramdisk/*.ko .
1063 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +08001064 while read LINE
1065 do
1066 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001067 for U in `${compile_tool}nm ${LINE} | grep " U " | sed -e 's/^\s*//' -e 's/\s*$//' | cut -d ' ' -f 2`
wanwei.jiang403c9942021-11-30 18:29:02 +08001068 do
1069 #echo ${U}
1070 U_v=`grep -w ${U} vmlinux_T.txt`
1071 in_vmlinux=0
1072 if [ -n "${U_v}" ];
1073 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08001074 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +08001075 in_vmlinux=1
1076 continue
1077 fi
1078 in_module=0
1079 MODULE=
1080 while read LINE1
1081 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001082 U_m=`${compile_tool}nm ${LINE1} | grep -E " T | D | B | R " | grep -v "\.cfi_jt" | grep "${U}"`
wanwei.jiang403c9942021-11-30 18:29:02 +08001083 if [ -n "${U_m}" ];
1084 then
1085 in_module=1
1086 MODULE=${LINE1}
1087 fi
1088 done < module_list.txt
1089 if [ ${in_module} -eq "1" ];
1090 then
1091 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1092 continue
1093 else
1094 printf "\t%-50s <== none\n" ${U}
1095 fi
1096 done
1097 echo
1098 echo
1099 done < module_list.txt
1100 rm vmlinux_T.txt
1101 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001102 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001103 popd
1104}
1105export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001106
1107function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1108 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1109 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1110 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1111}
1112export -f reorganized_abi_symbol_list_file
1113
1114function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001115 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1116 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1117 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1118 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1119 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1120 else
1121 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1122 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1123 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1124 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1125 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001126
1127 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1128 for file in ${file_list}
1129 do
1130 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1131 reorganized_abi_symbol_list_file "${file}"
1132
1133 if [[ -s ${symbol_tmp} ]]; then
1134 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1135 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1136 else
1137 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1138 fi
1139 cat ${symbol_tmp}
1140 echo -e "\n------------------------------------------------------------"
1141 fi
1142 rm ${symbol_tmp}
1143 done
1144}
1145export -f abi_symbol_list_detect
1146
Dezhen Wangf9bec562023-10-16 16:15:26 +08001147# this function is for kernel higher than 13-5.15
1148function set_env_for_adjust_config_action () {
1149 set -a # export the value changed to environment
1150 . ${ROOT_DIR}/${BUILD_CONFIG}
1151 set +a
1152 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1153 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1154 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1155
1156 # set the version of clang bin
1157 prebuilts_paths=(
1158 CLANG_PREBUILT_BIN
1159 BUILDTOOLS_PREBUILT_BIN
1160 )
1161 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1162 prebuilt_bin=\${${prebuilt_bin}}
1163 eval prebuilt_bin="${prebuilt_bin}"
1164 if [ -n "${prebuilt_bin}" ]; then
1165 # Mitigate dup paths
1166 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1167 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH}
1168 fi
1169 done
1170 export PATH
1171
1172 # support the ndk tools
1173 if [[ -n "${NDK_TRIPLE}" ]]; then
1174 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1175 if [[ ! -d "${NDK_DIR}" ]]; then
1176 # Kleaf/Bazel will checkout the ndk to a different directory than build.sh.
1177 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1178 if [[ ! -d "${NDK_DIR}" ]]; then
1179 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1180 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1181 exit 1
1182 fi
1183 fi
1184 USERCFLAGS="--target=${NDK_TRIPLE} "
1185 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1186 # up two line set the CONFIG_CC_CAN_LINK CONFIG_CC_CAN_LINK_STATIC CONFIG_UAPI_HEADER_TEST to y
1187 else
1188 USERCFLAGS="--sysroot=/dev/null"
1189 fi
1190 export USERCFLAGS USERLDFLAGS
1191}
1192
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001193# adjust_config_action concerns three types of cmd:
1194# parameters:
1195# --menuconfig: make menuconfig manually based on different gki standard
1196# --basicconfig: only config kernel with google original gki_defconfig as base
1197# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1198function adjust_config_action () {
1199 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1200 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1201 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001202
1203 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1204 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1205 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1206 else
Dezhen Wangf9bec562023-10-16 16:15:26 +08001207 set_env_for_adjust_config_action
Dezhen Wang2edb5232023-07-06 14:15:33 +08001208 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001209
1210 orig_config=$(mktemp)
1211 orig_defconfig=$(mktemp)
1212 out_config="${OUT_DIR}/.config"
1213 out_defconfig="${OUT_DIR}/defconfig"
1214 changed_config=$(mktemp)
1215 changed_defconfig=$(mktemp)
1216
1217 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1218 set -x
1219 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1220 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1221 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1222 cp ${out_config} ${orig_config}
1223 cp ${out_defconfig} ${orig_defconfig}
1224 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1225 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1226 fi
1227 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1228 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1229 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1230 if [ "${ARCH}" = "arm" ]; then
1231 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1232 fi
1233 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1234 echo
1235 echo "========================================================"
1236 echo "==================== .config diff ===================="
1237 cat ${changed_config}
1238 echo "==================== defconfig diff ===================="
1239 cat ${changed_defconfig}
1240 echo "========================================================"
1241 echo
1242 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1243 set -x
1244 pre_defconfig_cmds
1245 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1246 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1247 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1248 post_defconfig_cmds
1249 set +x
1250 else # make menuconfig based on config with different gki standard
1251 set -x
1252 pre_defconfig_cmds
1253 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1254 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1255 cp ${out_config} ${orig_config}
1256 cp ${out_defconfig} ${orig_defconfig}
1257 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1258 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1259 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1260 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1261 post_defconfig_cmds
1262 set +x
1263 echo
1264 echo "========================================================"
1265 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1266 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1267 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1268 echo "==================== .config diff ===================="
1269 cat ${changed_config}
1270 echo "==================== defconfig diff ===================="
1271 cat ${changed_defconfig}
1272 echo "========================================================"
1273 echo
1274 fi
1275 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1276 exit
1277 fi
1278}
1279export -f adjust_config_action
1280
1281# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1282# parameter:
1283# --image: only build image
1284# --modules: only build kernel modules
1285# --dtbs: only build dtbs
1286function build_part_of_kernel () {
1287 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1288 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001289 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1290 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1291 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1292 else
1293 source ${ROOT_DIR}/${BUILD_CONFIG}
1294 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1295 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1296 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1297 tool_args+=("LLVM=1")
1298 tool_args+=("DEPMOD=${DEPMOD}")
1299 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001300
1301 if [[ ! -f ${OUT_DIR}/.config ]]; then
1302 pre_defconfig_cmds
1303 set -x
1304 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1305 set +x
1306 post_defconfig_cmds
1307 fi
1308
1309 if [[ -n ${IMAGE} ]]; then
1310 set -x
1311 if [ "${ARCH}" = "arm64" ]; then
1312 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1313 elif [ "${ARCH}" = "arm" ]; then
dongqing.li11a74ef2024-11-06 07:05:25 +00001314 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x00208000 uImage)
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001315 fi
1316 set +x
1317 fi
1318 mkdir -p ${DIST_DIR}
1319 if [[ -n ${DTB_BUILD} ]]; then
1320 set -x
1321 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1322 set +x
1323 fi
1324 if [[ -n ${MODULES} ]]; then
1325 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1326 rm -rf ${MODULES_STAGING_DIR}
1327 mkdir -p ${MODULES_STAGING_DIR}
1328 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1329 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1330 fi
1331 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1332 set -x
1333 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1334 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1335 set +x
1336 fi
1337 echo EXT_MODULES=$EXT_MODULES
1338 prepare_module_build
1339 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1340 echo "========================================================"
1341 echo " Building external modules and installing them into staging directory"
1342 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1343 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001344 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001345 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1346 set -x
1347 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1348 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1349 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1350 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1351 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1352 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1353 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1354 "${MAKE_ARGS[@]}" modules_install
1355 set +x
1356 done
1357 fi
1358 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1359 set -x
1360 extra_cmds
1361 set +x
1362 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1363 cp -p ${MODULES} ${DIST_DIR}
1364
1365 new_path=${PATH}
1366 PATH=${old_path}
1367 echo "========================================================"
1368 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1369 echo "Rebuild rootfs in order to install modules!"
1370 rebuild_rootfs ${ARCH}
1371 else
1372 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1373 fi
1374 PATH=${new_path}
1375 fi
1376 if [ -n "${DTS_EXT_DIR}" ]; then
1377 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
qinglin.lia40f7b62023-07-26 18:52:35 +08001378 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001379 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1380 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1381 fi
1382 fi
1383 fi
1384 for FILE in ${FILES}; do
1385 if [ -f ${OUT_DIR}/${FILE} ]; then
1386 echo " $FILE"
1387 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1388 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1389 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1390 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1391 echo " $FILE"
1392 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1393 else
1394 echo " $FILE is not a file, skipping"
1395 fi
1396 done
1397 exit
1398 fi
1399}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001400export -f build_part_of_kernel
1401
1402function export_env_variable () {
1403 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001404 export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS
qinglin.li7cf37c02023-07-04 16:06:04 +08001405 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
qinglin.lib71c3202023-08-01 10:29:53 +08001406 export AMLOGIC_R_USER_DIFFCONFIG=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/amlogic_r_user_diff.fragment
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001407
1408 echo ROOT_DIR=$ROOT_DIR
1409 echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG} MANUAL_INSMOD_MODULE=${MANUAL_INSMOD_MODULE}
qinglin.libce54712023-05-08 13:56:31 +08001410 echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} ANDROID_PROJECT=${ANDROID_PROJECT} GKI_CONFIG=${GKI_CONFIG} UPGRADE_PROJECT=${UPGRADE_PROJECT} ANDROID_VERSION=${ANDROID_VERSION} FAST_BUILD=${FAST_BUILD} CHECK_GKI_20=${CHECK_GKI_20}
qinglin.li7cf37c02023-07-04 16:06:04 +08001411 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001412 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
qinglin.lib71c3202023-08-01 10:29:53 +08001413 echo AMLOGIC_R_USER_DIFFCONFIG=${AMLOGIC_R_USER_DIFFCONFIG} CONFIG_BOOTIMAGE=${CONFIG_BOOTIMAGE}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001414}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001415export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001416
1417function handle_input_parameters () {
1418 VA=
1419 ARGS=()
1420 for i in "$@"
1421 do
1422 case $i in
1423 --arch)
1424 ARCH=$2
1425 VA=1
1426 shift
1427 ;;
1428 --abi)
1429 ABI=1
1430 shift
1431 ;;
1432 --build_config)
1433 BUILD_CONFIG=$2
1434 VA=1
1435 shift
1436 ;;
1437 --lto)
1438 LTO=$2
1439 VA=1
1440 shift
1441 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001442 --menuconfig)
1443 MENUCONFIG=1
1444 shift
1445 ;;
1446 --basicconfig)
1447 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1448 BASICCONFIG=$2
1449 else
1450 BASICCONFIG="m"
1451 fi
1452 VA=1
1453 shift
1454 ;;
1455 --image)
1456 IMAGE=1
1457 shift
1458 ;;
1459 --modules)
1460 MODULES=1
1461 shift
1462 break
1463 ;;
1464 --dtbs)
1465 DTB_BUILD=1
1466 shift
1467 ;;
1468 --build_dir)
1469 BUILD_DIR=$2
1470 VA=1
1471 shift
1472 ;;
1473 --check_defconfig)
1474 CHECK_DEFCONFIG=1
1475 shift
1476 ;;
1477 --modules_depend)
1478 MODULES_DEPEND=1
1479 shift
1480 ;;
1481 --android_project)
1482 ANDROID_PROJECT=$2
1483 VA=1
1484 shift
1485 ;;
1486 --gki_20)
1487 GKI_CONFIG=gki_20
1488 shift
1489 ;;
1490 --gki_10)
1491 GKI_CONFIG=gki_10
1492 shift
1493 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001494 --fast_build)
1495 FAST_BUILD=1
1496 shift
1497 ;;
1498 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001499 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001500 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001501 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001502 VA=1
1503 shift
1504 ;;
1505 --manual_insmod_module)
1506 MANUAL_INSMOD_MODULE=1
1507 shift
1508 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001509 --check_gki_20)
1510 CHECK_GKI_20=1
1511 GKI_CONFIG=gki_20
1512 LTO=none
1513 shift
1514 ;;
1515 --dev_config)
1516 DEV_CONFIGS=$2
1517 VA=1
1518 shift
1519 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001520 --use_prebuilt_gki)
1521 PREBUILT_GKI=$2
1522 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001523 shift
1524 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001525 --kasan)
1526 KASAN=1
1527 LTO=none
1528 shift
1529 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001530 -h|--help)
1531 show_help
1532 exit 0
1533 ;;
1534 *)
1535 if [[ -n $1 ]];
1536 then
1537 if [[ -z ${VA} ]];
1538 then
1539 ARGS+=("$1")
1540 fi
1541 fi
1542 VA=
1543 shift
1544 ;;
1545 esac
1546 done
1547}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001548export -f handle_input_parameters
1549
1550function set_default_parameters () {
1551 if [ "${ARCH}" = "arm" ]; then
dongqing.li11a74ef2024-11-06 07:05:25 +00001552 CONFIGFILE=${ROOT_DIR}/${FRAGMENT_CONFIG}
1553 if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then
1554 ARGS+=("LOADADDR=0x02008000")
1555 else
1556 ARGS+=("LOADADDR=0x00208000")
1557 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001558 else
1559 ARCH=arm64
1560 fi
1561
1562 if [[ -z "${ABI}" ]]; then
1563 ABI=0
1564 fi
1565 if [[ -z "${LTO}" ]]; then
1566 LTO=thin
1567 fi
1568 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1569 ANDROID_PROJECT=ohm
1570 fi
1571
1572 if [[ -z "${BUILD_CONFIG}" ]]; then
1573 if [ "${ARCH}" = "arm64" ]; then
1574 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1575 elif [ "${ARCH}" = "arm" ]; then
1576 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1577 fi
1578 fi
1579 if [[ -z "${BUILD_DIR}" ]]; then
1580 BUILD_DIR=build
1581 fi
1582
1583 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1584 version_message="common${version_message##*android}"
1585 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1586 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1587 echo "kernel version is not match!!"
1588 exit
1589 fi
1590 else
1591 FULL_KERNEL_VERSION=${version_message}
1592 fi
1593
1594 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001595 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001596 fi
1597
qinglin.life85fd92024-12-03 13:40:34 +08001598 if [[ -d ${KERNEL_DIR}/.git ]]; then
1599 auto_patch_to_common_dir
1600 else
1601 echo "WARNING: no git, auto patch skip!!!"
1602 export SYS_SKIP_GIT=1
1603 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001604
qinglin.lieafebcf2023-06-27 12:48:22 +08001605 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001606 echo "The directory of build does not exist";
1607 exit
1608 fi
1609
1610 ROOT_DIR=$(readlink -f $(dirname $0))
1611 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1612 ROOT_DIR=`pwd`
1613 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1614 echo "the file path of $0 is incorrect"
1615 exit
1616 fi
1617 fi
1618 export ROOT_DIR
1619
1620 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1621 MODULES_DEPEND=${MODULES_DEPEND:-0}
1622 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1623 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1624 RM_KERNEL_BUILD_VAR_FILE=1
1625 fi
1626
Dezhen Wang850c0d22023-05-31 19:26:20 +08001627 export CROSS_COMPILE=
1628
1629 if [ "${ABI}" -eq "1" ]; then
1630 export OUT_DIR_SUFFIX="_abi"
1631 else
1632 OUT_DIR_SUFFIX=
1633 fi
1634}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001635export -f set_default_parameters
1636
1637function auto_patch_to_common_dir () {
1638 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001639
1640 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1641 export PATCH_PARM
1642 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001643 if [[ $? -ne 0 ]]; then
1644 echo "auto patch error!"
1645 exit 1
1646 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001647 fi
1648
1649 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1650 cd ${CURRENT_DIR}
1651 exit
1652 fi
1653}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001654export -f auto_patch_to_common_dir
1655
Dezhen Wang850c0d22023-05-31 19:26:20 +08001656function build_ext_modules() {
1657 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001658 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001659 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1660
1661 set -x
1662 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1663 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1664 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1665 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1666 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1667 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1668 INSTALL_MOD_STRIP=1 \
1669 modules_install -j12 || exit
1670 set +x
1671 done
1672}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001673export -f build_ext_modules
1674
Dezhen Wang1176fad2023-06-09 11:22:17 +08001675function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001676 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1677 if [ -n "${MODULES}" ]; then
1678 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1679 echo "========================================================"
1680 echo " Copying modules files"
1681 for module in ${MODULES}; do
1682 cp ${module} ${DIST_DIR}
1683 done
1684 if [ "${COMPRESS_MODULES}" = "1" ]; then
1685 echo " Archiving modules to ${MODULES_ARCHIVE}"
1686 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1687 fi
1688 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001689 fi
1690}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001691export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001692
Dezhen Wang1176fad2023-06-09 11:22:17 +08001693function copy_files_to_dist_dir () {
1694 echo "========================================================"
1695 echo " Copying files"
1696 for FILE in ${FILES}; do
1697 if [ -f ${OUT_DIR}/${FILE} ]; then
1698 echo " $FILE"
1699 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1700 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1701 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1702 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1703 echo " $FILE"
1704 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1705 else
1706 echo " $FILE is not a file, skipping"
1707 fi
1708 done
1709}
1710export -f copy_files_to_dist_dir
1711
1712function make_dtbo() {
1713 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1714 echo "========================================================"
1715 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1716 (
1717 cd ${OUT_DIR}
1718 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1719 )
1720 fi
1721}
1722export -f make_dtbo
1723
1724function installing_UAPI_kernel_headers () {
1725 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1726 echo "========================================================"
1727 echo " Installing UAPI kernel headers:"
1728 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1729 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1730 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1731 headers_install
1732 # The kernel makefiles create files named ..install.cmd and .install which
1733 # are only side products. We don't want those. Let's delete them.
1734 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1735 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1736 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1737 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1738 fi
1739}
1740export -f installing_UAPI_kernel_headers
1741
1742function copy_kernel_headers_to_compress () {
1743 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1744 echo "========================================================"
1745 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1746 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1747 pushd $ROOT_DIR/$KERNEL_DIR
1748 find arch include $OUT_DIR -name *.h -print0 \
1749 | tar -czf $KERNEL_HEADERS_TAR \
1750 --absolute-names \
1751 --dereference \
1752 --transform "s,.*$OUT_DIR,," \
1753 --transform "s,^,kernel-headers/," \
1754 --null -T -
1755 popd
1756 fi
1757}
1758export -f copy_kernel_headers_to_compress
1759
1760function set_default_parameters_for_32bit () {
1761 tool_args=()
1762 prebuilts_paths=(
1763 CLANG_PREBUILT_BIN
1764 CLANGTOOLS_PREBUILT_BIN
1765 RUST_PREBUILT_BIN
1766 LZ4_PREBUILTS_BIN
1767 DTC_PREBUILTS_BIN
1768 LIBUFDT_PREBUILTS_BIN
1769 BUILDTOOLS_PREBUILT_BIN
1770 )
1771 echo CC_CLANG=$CC_CLANG
1772 if [[ $CC_CLANG -eq "1" ]]; then
1773 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1774 if [[ -n "${LLVM}" ]]; then
1775 tool_args+=("LLVM=1")
1776 # Reset a bunch of variables that the kernel's top level Makefile does, just
1777 # in case someone tries to use these binaries in this script such as in
1778 # initramfs generation below.
1779 HOSTCC=clang
1780 HOSTCXX=clang++
1781 CC=clang
1782 LD=ld.lld
1783 AR=llvm-ar
1784 NM=llvm-nm
1785 OBJCOPY=llvm-objcopy
1786 OBJDUMP=llvm-objdump
1787 OBJSIZE=llvm-size
1788 READELF=llvm-readelf
1789 STRIP=llvm-strip
1790 else
1791 if [ -n "${HOSTCC}" ]; then
1792 tool_args+=("HOSTCC=${HOSTCC}")
1793 fi
1794
1795 if [ -n "${CC}" ]; then
1796 tool_args+=("CC=${CC}")
1797 if [ -z "${HOSTCC}" ]; then
1798 tool_args+=("HOSTCC=${CC}")
1799 fi
1800 fi
1801
1802 if [ -n "${LD}" ]; then
1803 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1804 fi
1805
1806 if [ -n "${NM}" ]; then
1807 tool_args+=("NM=${NM}")
1808 fi
1809
1810 if [ -n "${OBJCOPY}" ]; then
1811 tool_args+=("OBJCOPY=${OBJCOPY}")
1812 fi
1813 fi
1814
1815 if [ -n "${DTC}" ]; then
1816 tool_args+=("DTC=${DTC}")
1817 fi
1818 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1819 prebuilt_bin=\${${prebuilt_bin}}
1820 eval prebuilt_bin="${prebuilt_bin}"
1821 if [ -n "${prebuilt_bin}" ]; then
1822 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1823 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1824 fi
1825 done
1826 export PATH
1827 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1828 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1829 fi
1830
1831 # Have host compiler use LLD and compiler-rt.
1832 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1833 if [[ -n "${NDK_TRIPLE}" ]]; then
1834 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1835
1836 if [[ ! -d "${NDK_DIR}" ]]; then
1837 # Kleaf/Bazel will checkout the ndk to a different directory than
1838 # build.sh.
1839 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1840 if [[ ! -d "${NDK_DIR}" ]]; then
1841 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1842 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1843 exit 1
1844 fi
1845 fi
1846 USERCFLAGS="--target=${NDK_TRIPLE} "
1847 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1848 # Some kernel headers trigger -Wunused-function for unused static functions
1849 # with clang; GCC does not warn about unused static inline functions. The
1850 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1851 # not set.
1852 USERCFLAGS+="-Wno-unused-function "
1853 # To help debug these flags, consider commenting back in the following, and
1854 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1855 # in scripts/cc-can-link.sh.
1856 #USERCFLAGS+=" -Wl,--verbose -v"
1857 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1858 # clang is not configured to use LLD by default, and BFD has been
1859 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1860 # scripts/cc-can-link.sh.
1861 USERLDFLAGS="${LLD_COMPILER_RT} "
1862 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1863 else
1864 USERCFLAGS="--sysroot=/dev/null"
1865 fi
1866
1867 #setting_the_default_output_dir
1868 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1869 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1870 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1871 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1872 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1873 export MODULES_ARCHIVE=modules.tar.gz
1874 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1875 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1876 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1877 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1878 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1879 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1880 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1881 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1882
dongqing.li11a74ef2024-11-06 07:05:25 +00001883 CONFIGFILE=${ROOT_DIR}/${FRAGMENT_CONFIG}
1884 echo "android 32bit config file: ${CONFIGFILE}"
1885 if [[ -f "${CONFIGFILE}" && `grep "CONFIG_AMLOGIC_RAMDUMP_TEXTOFFSET=y" "${CONFIGFILE}"` ]]; then
1886 # FRAGMENT_CONFIG: ./common_drivers/arch/arm/configs/amlogic_a32.fragment
1887 tool_args+=("LOADADDR=0x02008000")
1888 else
1889 tool_args+=("LOADADDR=0x00208000")
1890 fi
Dezhen Wang1176fad2023-06-09 11:22:17 +08001891 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08001892 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
1893 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08001894 TOOL_ARGS="${tool_args[@]}"
1895
1896 mkdir -p ${OUT_DIR}
1897 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1898 rm -rf ${COMMON_OUT_DIR}
1899 fi
1900
1901 source ${ROOT_DIR}/build/kernel/build_utils.sh
1902
1903 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08001904 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang1176fad2023-06-09 11:22:17 +08001905 export dtstree=${DTS_EXT_DIR}
1906 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1907
1908 EXT_MODULES="
1909 ${EXT_MODULES}
1910 "
1911
1912 EXT_MODULES_CONFIG="
1913 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1914 "
1915
1916 EXT_MODULES_PATH="
1917 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1918 "
1919
1920 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1921 EXTRA_CMDS="extra_cmds"
1922
1923 IN_KERNEL_MODULES=1
1924}
1925export -f set_default_parameters_for_32bit
1926
1927function generating_test_mappings_zip () {
1928 echo "========================================================"
1929 echo " Generating test_mappings.zip"
1930 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
1931 find ${ROOT_DIR} -name TEST_MAPPING \
1932 -not -path "${ROOT_DIR}/\.git*" \
1933 -not -path "${ROOT_DIR}/\.repo*" \
1934 -not -path "${ROOT_DIR}/out*" \
1935 > ${TEST_MAPPING_FILES}
1936 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
1937}
1938export -f generating_test_mappings_zip
1939
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001940function setting_up_for_build () {
1941 echo "========================================================"
1942 echo " Setting up for build"
1943 if [ "${SKIP_MRPROPER}" != "1" ] ; then
1944 set -x
1945 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper)
1946 set +x
1947 fi
1948}
1949export -f setting_up_for_build
1950
1951function build_kernel_for_32bit () {
1952 set -x
Dezhen Wang170460d2024-04-01 07:57:23 +00001953 pre_defconfig_cmds
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001954 if [ "${SKIP_DEFCONFIG}" != "1" ] ; then
1955 (cd ${KERNEL_DIR} && make ARCH=arm ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1956 fi
Dezhen Wang170460d2024-04-01 07:57:23 +00001957 post_defconfig_cmds
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001958
1959 echo "========================================================"
1960 echo " Building kernel"
1961
1962 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1963 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1964 if [[ -n ${ANDROID_PROJECT} ]]; then
Xindong Xu748027f2024-10-10 17:13:52 +08001965 if [[ -n ${DTBO_DEVICETREE} ]]; then
1966 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} \
1967 ${TOOL_ARGS} ${DTBO_DEVICETREE} -j12
1968 else
1969 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} \
1970 ${TOOL_ARGS} android_overlay_dt.dtbo -j12
1971 fi
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001972 fi
1973 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1974 set +x
1975}
1976export -f build_kernel_for_32bit
1977
1978function modules_install_for_32bit () {
1979 set -x
1980 if [ "${BUILD_INITRAMFS}" = "1" -o -n "${IN_KERNEL_MODULES}" ]; then
1981 echo "========================================================"
1982 echo " Installing kernel modules into staging directory"
1983
1984 (cd ${OUT_DIR} && make ARCH=arm O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_STRIP=1 \
1985 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install)
1986 fi
1987 set +x
1988}
1989export -f modules_install_for_32bit
Dezhen Wangad3fffe2023-08-24 11:07:55 +08001990
1991function build_android_32bit () {
1992
1993 source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1994
Dezhen Wangad3fffe2023-08-24 11:07:55 +08001995 CC_CLANG=1
1996
1997 set_default_parameters_for_32bit
1998
1999 export USERCFLAGS USERLDFLAGS BRANCH KMI_GENERATION
2000 export HOSTCC HOSTCXX CC LD AR NM OBJCOPY OBJDUMP OBJSIZE READELF STRIP PATH KCONFIG_CONFIG
2001 export KERNEL_DIR ROOT_DIR OUT_DIR TOOL_ARGS MODULE_STRIP_FLAG DEPMOD INSTALL_MOD_DIR COMMON_OUT_DIR
2002
2003 setting_up_for_build
2004
2005 mkdir -p ${DIST_DIR} ${MODULES_STAGING_DIR}
2006
2007 build_kernel_for_32bit
2008
Dezhen Wangad3fffe2023-08-24 11:07:55 +08002009 eval ${POST_KERNEL_BUILD_CMDS}
2010
2011 modules_install_for_32bit
2012
2013 build_ext_modules
2014
2015 set -x
2016 eval ${EXTRA_CMDS}
2017 set +x
2018
2019 copy_files_to_dist_dir
2020
2021 installing_UAPI_kernel_headers
2022
2023 copy_kernel_headers_to_compress
2024
2025 copy_modules_files_to_dist_dir
2026
2027 make_dtbo
2028
2029}
2030export -f build_android_32bit
Dezhen Wang0ac8a6a2023-06-28 11:03:23 +08002031
2032function clear_files_compressed_with_lzma_in_last_build () {
2033 file_lzma="Image.lzma boot-lzma.img boot.img.lzma"
2034 for remove_file in ${file_lzma}
2035 do
2036 file_path=`find -name $remove_file`
2037 if [[ -n ${file_path} ]]; then
2038 rm ${file_path}
2039 fi
2040 done
2041}
2042export -f clear_files_compressed_with_lzma_in_last_build
2043
2044function generate_lzma_format_image () {
qinglin.li71c0eed2024-07-10 17:06:06 +08002045 {
2046 pushd ${DIST_DIR}
2047 lzma -z -k -f -9 Image
2048 popd
2049 } &
2050
2051 {
2052 pushd ${DIST_DIR}
2053 lzma -z -k -f -9 boot.img
2054 popd
2055 } &
Dezhen Wang0ac8a6a2023-06-28 11:03:23 +08002056}
2057export -f generate_lzma_format_image
qinglin.lib173ecb2024-09-06 19:16:36 +08002058
2059function build_ext_module_without_bazel {
2060 if [ ${BAZEL} != 1 ];then
2061 return
2062 fi
2063 echo "========================================================"
2064 echo "build ext_modules without bazel"
2065 if [ ! -f ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir.tar.gz ];then
2066 echo "WARNING ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir.tar.gz not exit!"
2067 return
2068 fi
2069
2070 [ -d ${ROOT_DIR}/out/${BRANCH}/common/ ] && rm -rf ${ROOT_DIR}/out/${BRANCH}/common/
2071 rsync -aL --include='scripts/***' --include='include/***' --include='*/' --include='*Makefile*' --exclude='*' ${ROOT_DIR}/common/ ${ROOT_DIR}/out/${BRANCH}/common/
2072 local kernel_src=${ROOT_DIR}/out/${BRANCH}/common/
2073
2074 mkdir ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir
2075 tar -xzvf ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir.tar.gz -C ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir/ > /dev/null 2>&1
2076 rsync -aL --exclude='Makefile' --exclude='localversion' --chmod=F+w ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir/ ${kernel_src}
2077 rm -rf ${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common/amlogic_modules_prepare/modules_prepare_outdir/
2078
2079 . ${ROOT_DIR}/${KERNEL_DIR}/build.config.constants
2080 CROSS_COMPILE_PATH=${ROOT_DIR}/prebuilts/clang/host/linux-x86/clang-${CLANG_VERSION}/bin
2081 local tool_args="CC=${CROSS_COMPILE_PATH}/clang LD=${CROSS_COMPILE_PATH}/ld.lld LLVM=1"
2082 local ext_module
2083 echo "# MODULE_BUILD_WITHOUT_BAZEL (ROOT_DIR=${ROOT_DIR})" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
2084 for ext_module in ${EXT_MODULES_ANDROID}; do
2085 local ext_mod_rel=$(real_path ${ext_module} ${kernel_src})
2086 make ARCH=${ARCH} ${tool_args} -C ${ext_module} M=${ext_mod_rel} KERNEL_SRC=${kernel_src} "$@"
2087 find ${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols/ \;
2088 find ${ext_module} -type f -name "*.ko" \
2089 -exec ${CROSS_COMPILE_PATH}/llvm-objcopy --strip-debug {} \; \
2090 -exec cp {} ${OUT_AMLOGIC_DIR}/ext_modules/ \;
2091
2092 [ -f ${ext_module}/modules.order ] && cat ${ext_module}/modules.order >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
2093 done
2094 echo "========================================================"
2095}
2096export -f build_ext_module_without_bazel