blob: d9f698d8fb97b5fb85231db501260a081a488a04 [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
qinglin.li62b23332023-06-25 10:37:41 +080051 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]]; 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_R}
53 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
57 if [[ ${UPGRADE_PROJECT} == s || ${UPGRADE_PROJECT} == S ]]; then
58 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_S}
59 fi
60 if [[ ${UPGRADE_PROJECT} == u || ${UPGRADE_PROJECT} == U ]]; then
61 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_U}
qinglin.li7a994a02022-12-05 15:04:40 +080062 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080063
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080064 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
65 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
66 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
67 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
68 rm ${temp_file}
69 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080070
71 if [[ -n ${DEV_CONFIGS} ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +080072 local config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
Dezhen Wanga5f456a2023-05-05 17:40:31 +080073 for config_name in ${config_list[@]}
74 do
Wanwei Jiang7c582c02023-07-21 18:34:50 +080075 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} ]]; then
76 config_file=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name}
77 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 +080078 elif [[ -f ${config_name} ]]; then
79 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
80 else
81 echo "ERROR: config file ${config_name} is not in the right path!!"
82 exit
83 fi
84 done
85 fi
qinglin.lib71c3202023-08-01 10:29:53 +080086
87 if [[ ${UPGRADE_PROJECT} == r || ${UPGRADE_PROJECT} == R ]] && [[ "${CONFIG_BOOTIMAGE}" == "user" ]]; then
88 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}
89 fi
qinglin.li7f7de172024-01-16 16:27:14 +080090
91 if [[ -n ${KASAN} ]]; then
92 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
93 cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/amlogic_kasan.defconfig > ${temp_file}
94 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r \
95 ${ROOT_DIR}/${KCONFIG_DEFCONFIG} \
96 ${temp_file}
97 rm ${temp_file}
98 fi
wanwei.jiang91776952021-11-19 13:10:32 +080099}
100export -f pre_defconfig_cmds
101
102function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +0800103 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +0800104}
105export -f post_defconfig_cmds
106
107function read_ext_module_config() {
108 ALL_LINE=""
109 while read LINE
110 do
111 if [[ $LINE != \#* && $LINE != "" ]]; then
112 ALL_LINE="$ALL_LINE"" ""$LINE"
113 fi
114 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800115
116 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800117}
118
Dezhen Wangc7e8fda2024-03-19 07:15:42 +0000119function copy_pre_commit(){
pengzhao.liua923dea2023-06-25 09:58:20 +0800120 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
121 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
122 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
123 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
124 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
125 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
126 fi
127 fi
128}
129
wanwei.jiang91776952021-11-19 13:10:32 +0800130function read_ext_module_predefine() {
131 PRE_DEFINE=""
132
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800133 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800134 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
135 done
136
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800137 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800138 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
139 done
140
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800141 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800142}
143
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800144top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800145function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800146 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800147 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800148 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
149 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
150 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
151 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800152 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800153
154 for ext_module_config in ${EXT_MODULES_CONFIG}; do
155 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
156 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
157 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
158 done
159 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
160 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
161 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
162
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800163 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
164 if [[ -d ${top_ext_drivers} ]]; then
165 rm -rf ${top_ext_drivers}
166 fi
167 mkdir -p ${top_ext_drivers}
168 fi
169
170 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
171 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
172 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800173 ext_modules=
174 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800175 module_abs_path=`readlink -e ${ext_module}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800176 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800177 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
178 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
179 cp -rf ${module_abs_path} ${top_ext_drivers}
180 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
181 fi
182 fi
183 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800184 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800185
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800186 for ext_module_path in ${EXT_MODULES_PATH}; do
187 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800188 while read LINE
189 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800190 module_abs_path=`readlink -e ${LINE}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800191 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800192 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
193 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
194 cp -rf ${module_abs_path} ${top_ext_drivers}
195 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
196 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800197 fi
198 ext_modules="${ext_modules} ${module_rel_path}"
199
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800200 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800201 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800202 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800203
204 local flag=0
205 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
206 for ext_module in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +0800207 ext_mod_rel=$(real_path ${ext_module} ${KERNEL_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800208 if [[ ${flag} -eq "1" ]]; then
209 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
210 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
211 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
212 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
213 echo "${ext_module}/Makefile add: ${extra_symbols}"
214 fi
215 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
216 flag=1
217 done
218 fi
219
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800220 export EXT_MODULES
221 echo EXT_MODULES=${EXT_MODULES}
222
223 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800224}
wanwei.jiang91776952021-11-19 13:10:32 +0800225export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800226
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800227function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800228 echo "========================================================"
229 echo " Running extra build command(s):"
230
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800231 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
232 for ext_module in ${EXT_MODULES}; do
233 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
234 done
235 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800236
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800237 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
238 if [[ -d ${top_ext_drivers} ]]; then
239 rm -rf ${top_ext_drivers}
240 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800241 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800242
243 for FILE in ${FILES}; do
244 if [[ "${FILE}" =~ \.dtbo ]] && \
245 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
246 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
247 fi
248 done
249 export MKDTIMG_DTBOS
250
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800251 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800252 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800253 set -x
254
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800255 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
256 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800257 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800258 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800259 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800260 while read LINE
261 do
262 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800263 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800264 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800265 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800266 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800267 ext_modules=
268 for ext_module in ${EXT_MODULES}; do
269 if [[ ${ext_module} =~ "../" ]]; then
270 ext_module_old=${ext_module}
271 ext_module=${ext_module//\.\.\//}
272 ext_dir=$(dirname ${ext_module})
273 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
274 mkdir -p extra/${ext_dir}
275 cp -rf extra/${ext_module_old} extra/${ext_dir}
276
277 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
278 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800279 sed -i "s/\.\.\///g" ${ext_modules_order_file}
280 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800281 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800282 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800283 else
284 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800285 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800286 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800287 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800288 fi
289 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800290 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800291 EXT_MODULES=${ext_modules}
292 echo EXT_MODULES=${EXT_MODULES}
293 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800294
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800295 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800296 file_last_line=`sed -n "$=" modules.order`
297 let line=${file_last_line}-${ramdisk_last_line}
298 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800299 export MODULES_LIST=${src_dir}/vendor_boot_modules
300 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800301 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
302 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800303
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800304 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800305
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800306 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800307 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
308 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800309
310 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
311 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800312 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800313 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
314 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
315 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800316 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800317 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
318 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
319 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
320 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
321 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
322 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800323 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
324 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800325 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800326 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800327 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800328
329 for module_path in ${PREBUILT_MODULES_PATH}; do
330 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
331 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800332}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800333export -f extra_cmds
334
Wanwei Jiang2218b892023-03-17 17:31:21 +0800335function bazel_extra_cmds() {
336 modules_install
337
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800338 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800339 return
340 fi
341
Wanwei Jiang2218b892023-03-17 17:31:21 +0800342 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
343 : > ${KERNEL_BUILD_VAR_FILE}
344 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
345 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
346 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
347 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800348 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800349 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800350 fi
351
352 if [[ ${GKI_CONFIG} != gki_20 ]]; then
353 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
354 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
355 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
356 mkdir ${DIST_DIR}/system_dlkm_gki10
357 pushd ${DIST_DIR}/system_dlkm_gki10
358 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
359 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800360 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800361 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
362 rm -f ${module}
363 fi
364 done
365 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
366 popd
367 rm -rf ${DIST_DIR}/system_dlkm_gki10
368 fi
369}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800370export -f bazel_extra_cmds
371
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800372#$1 dep_file
373#$2 ko
374#$3 install_sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800375function mod_probe() {
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800376 local dep_file=$1
377 local ko=$2
378 local install_sh=$3
qinglin.li71c0eed2024-07-10 17:06:06 +0800379
380 if [[ ${loaded_modules[$ko]} ]]; then
381 return
382 fi
383
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800384 local loop
qinglin.li71c0eed2024-07-10 17:06:06 +0800385 for loop in $(grep "^${ko}:" $dep_file | sed 's/.*://'); do
386 mod_probe $dep_file $loop $install_sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800387 done
qinglin.li71c0eed2024-07-10 17:06:06 +0800388
389 echo insmod $ko >> $install_sh
390 loaded_modules[$ko]=1
wanwei.jiang612a8882021-11-23 17:12:23 +0800391}
392
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800393function create_install_and_order_filles() {
394 local modules_dep_file=$1
395 local install_file=$2
396 local modules_order_file=$3
Wanwei Jiang571dde62022-11-17 14:37:41 +0800397 local loop
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800398
399 [[ -f ${install_file} ]] && rm -f ${install_file}
400 touch ${install_file}
401 [[ -f ${install_file}.tmp ]] && rm -f ${install_file}.tmp
402 touch ${install_file}.tmp
403 [[ -f ${modules_order_file} ]] && rm -f ${modules_order_file}
404 touch ${modules_order_file}
405 [[ -f ${modules_order_file}.tmp ]] && rm -f ${modules_order_file}.tmp
406 touch ${modules_order_file}.tmp
407
qinglin.li71c0eed2024-07-10 17:06:06 +0800408 declare -A loaded_modules
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800409 for loop in `cat ${modules_dep_file} | sed 's/:.*//'`; do
410 echo ${loop} >> ${modules_order_file}.tmp
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800411 mod_probe ${modules_dep_file} ${loop} ${install_file}.tmp
Wanwei Jiang571dde62022-11-17 14:37:41 +0800412 done
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800413
414 cat ${install_file}.tmp | awk ' {
415 if (!cnt[$2]) {
416 print $0;
417 cnt[$2]++;
418 }
419 }' > ${install_file}
420
421 cut -d ' ' -f 2 ${install_file} > ${modules_order_file}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800422}
423
wanwei.jiangb12abc82021-12-25 22:17:10 +0800424function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800425 if [[ -n $1 ]]; then
426 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800427 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800428
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800429 cp modules.dep modules.dep.temp
430
431 soc_module=()
432 for chip in ${chips[@]}; do
433 chip_module=`ls amlogic-*-soc-${chip}.ko`
434 soc_module=(${soc_module[@]} ${chip_module[@]})
435 done
436 echo soc_module=${soc_module[*]}
437
438 delete_soc_module=()
439 if [[ ${#soc_module[@]} == 0 ]]; then
440 echo "Use all soc module"
441 else
442 for module in `ls amlogic-*-soc-*`; do
443 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
444 echo Delete soc module: ${module}
445 sed -n "/${module}:/p" modules.dep.temp
446 sed -i "/${module}:/d" modules.dep.temp
447 delete_soc_module=(${delete_soc_module[@]} ${module})
448 fi
449 done
450 echo delete_soc_module=${delete_soc_module[*]}
451 fi
452
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800453 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800454 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800455 for module in `ls amlogic-clk-soc-*`; do
456 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
457 echo Delete clk soc module: ${module}
458 sed -n "/${module}:/p" modules.dep.temp
459 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800460 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800461 fi
462 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800463 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800464 fi
465
466 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800467 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800468 for module in `ls amlogic-pinctrl-soc-*`; do
469 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
470 echo Delete pinctrl soc module: ${module}
471 sed -n "/${module}:/p" modules.dep.temp
472 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800473 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800474 fi
475 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800476 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800477 fi
478
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800479 in_line_i=a
480 delete_type_modules=()
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800481 [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID}
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800482 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
483 mkdir temp_dir
484 cd temp_dir
485 in_temp_dir=y
486 for element in ${TYPE_MODULE_SELECT_MODULE}; do
487 if [[ ${in_temp_dir} = y ]]; then
488 cd ../
489 rm -r temp_dir
490 in_temp_dir=
491 fi
492 if [[ ${in_line_i} = a ]]; then
493 in_line_i=b
494 type_module=${element}
495 select_modules_i=0
496 select_modules_count=
497 select_modules=
498 elif [[ ${in_line_i} = b ]]; then
499 in_line_i=c
500 select_modules_count=${element}
501 else
502 let select_modules_i+=1
503 select_modules="${select_modules} ${element}"
504 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
505 in_line_i=a
506 echo type_module=$type_module select_modules=$select_modules
507 for module in `ls ${type_module}`; do
508 dont_delete_module=0
509 for select_module in ${select_modules}; do
510 if [[ "${select_module}" == "${module}" ]] ; then
511 dont_delete_module=1
512 break;
513 fi
514 done
515 if [[ ${dont_delete_module} != 1 ]]; then
516 echo Delete module: ${module}
517 sed -n "/${module}:/p" modules.dep.temp
518 sed -i "/${module}:/d" modules.dep.temp
519 delete_type_modules=(${delete_type_modules[@]} ${module})
520 fi
521 done
522 echo delete_type_modules=${delete_type_modules[*]}
523 fi
524 fi
525 done
526 if [[ -n ${in_temp_dir} ]]; then
527 cd ../
528 rm -r temp_dir
529 fi
530
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800531 mkdir service_module
532 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
Dezhen Wang0a453292024-02-27 07:33:57 +0000533 mkdir extra_closed_source_modules
534 echo EXTRA_CLOSED_SOURCE_MODULE_LIST=${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]}
535
536 BLACK_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]} ${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]})
537 echo BLACK_LIST=${BLACK_LIST[@]}
538 black_modules=()
539 for module in ${BLACK_LIST[@]}; do
540 if [[ `ls ${module}* 2>/dev/null` ]]; then
541 modules=`ls ${module}*`
542 else
543 continue
544 fi
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800545 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800546 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800547 if [[ ${#black_modules[@]} == 0 ]]; then
548 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800549 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800550 echo black_modules=${black_modules[*]}
551 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800552 echo Delete module: ${module}
553 sed -n "/${module}:/p" modules.dep.temp
554 sed -i "/${module}:/d" modules.dep.temp
555 done
556 fi
557
Wanwei Jiang475245b2023-05-10 21:06:52 +0800558 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800559 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800560 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800561 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800562 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800563 cp ${BAZEL_OUT}/kernel_aarch64_all_module_names/kernel_aarch64_modules ${gki_modules_temp_file}
564 else
565 cp ${DIST_DIR}/system_dlkm.modules.load ${gki_modules_temp_file}
566 fi
qinglin.lieafebcf2023-06-27 12:48:22 +0800567 else
568 rm -f ${gki_modules_temp_file}
569 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
570 do
571 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
572 done
573 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800574
575 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
576 sed -i "/\/${module}/d" ${gki_modules_temp_file}
577 done
578
579 for module in `cat ${gki_modules_temp_file}`; do
580 module=${module##*/}
581 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
582 done
583 rm -f ${gki_modules_temp_file}
584
585 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
586 echo Delete module: ${module}
Dezhen Wang50d56482023-11-20 19:56:14 +0800587 sed -n "/^${module}:/p" modules.dep.temp
588 sed -i "/^${module}:/d" modules.dep.temp
Wanwei Jiang475245b2023-05-10 21:06:52 +0800589 done
590 fi
591
qinglin.li71c0eed2024-07-10 17:06:06 +0800592 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp0
Wanwei Jiang475245b2023-05-10 21:06:52 +0800593 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 +0800594 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800595 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800596 continue
597 fi
qinglin.li71c0eed2024-07-10 17:06:06 +0800598 match=`sed -n "/${module}/=" modules.dep.temp0`
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800599 for match in ${match[@]}; do
600 match_count=(${match_count[@]} $match)
601 done
602 if [[ ${#match_count[@]} != 0 ]]; then
603 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800604 echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800605 exit
606 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800607 if [[ -n ${ANDROID_PROJECT} ]]; then
608 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
Dezhen Wang0a453292024-02-27 07:33:57 +0000609 if [[ ${module} =~ ${service_module_temp} ]]; then
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800610 mv ${module} service_module
611 fi
612 done
613 fi
Dezhen Wang0a453292024-02-27 07:33:57 +0000614 for extra_closed_source_module in ${EXTRA_CLOSED_SOURCE_MODULE_LIST[@]}; do
615 if [[ ${module} =~ ${extra_closed_source_module} ]]; then
616 mv ${module} extra_closed_source_modules
617 fi
618 done
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800619 rm -f ${module}
620 done
qinglin.li71c0eed2024-07-10 17:06:06 +0800621 rm -f modules.dep.temp0
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800622
qinglin.li71c0eed2024-07-10 17:06:06 +0800623 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800624 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
625 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800626 sed -n "/${module}:/p" modules.dep.temp
627 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
628 sed -i "/${module}:/d" modules.dep.temp
629 sed -n "/${module}.*\.ko:/p" modules.dep.temp
630 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
631 sed -i "/${module}.*\.ko:/d" modules.dep.temp
632 done
633
Wanwei Jiang571dde62022-11-17 14:37:41 +0800634 if [[ -n ${ANDROID_PROJECT} ]]; then
635 cp modules.dep.temp modules_recovery.dep.temp
636 cp modules.dep.temp1 modules_recovery.dep.temp1
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800637 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
638 echo RECOVERY_MODULES_LOAD_LIST: $module
639 sed -n "/${module}:/p" modules_recovery.dep.temp
640 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
641 sed -i "/${module}:/d" modules_recovery.dep.temp
642 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
643 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
644 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
645 done
646 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
647 cp modules_recovery.dep.temp1 modules_recovery.dep
648 rm modules_recovery.dep.temp
649 rm modules_recovery.dep.temp1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800650 fi
651
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800652 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
653 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
654 sed -n "/${module}:/p" modules.dep.temp
655 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
656 sed -i "/${module}:/d" modules.dep.temp
657 sed -n "/${module}.*\.ko:/p" modules.dep.temp
658 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
659 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800660 done
661
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800662 : > modules.dep.temp2
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800663 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
664 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
665 sed -n "/${module}:/p" modules.dep.temp
666 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
667 sed -i "/${module}:/d" modules.dep.temp
668 sed -n "/${module}.*\.ko:/p" modules.dep.temp
669 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
670 sed -i "/${module}.*\.ko:/d" modules.dep.temp
671 done
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800672 cat modules.dep.temp >> modules.dep.temp1
673 cat modules.dep.temp2 >> modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800674 cp modules.dep.temp1 modules.dep
675 rm modules.dep.temp
676 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800677 rm modules.dep.temp2
678}
679
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800680function calculate_first_line() {
681 local modules_order_file=$1
682 local modules_list=($2)
683 local module
684 local module_lines=()
685 local lines
686 local first_line
687
688 for module in ${modules_list[@]}; do
689 module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}`
Wanwei Jiang9173e462022-09-29 00:58:33 +0800690 done
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800691 lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n`
692 first_line=`echo ${lines} | cut -d ' ' -f 1`
693 echo ${first_line}
694}
695
696function calculate_last_line() {
697 local modules_order_file=$1
698 local modules_list=($2)
699 local module
700 local module_lines=()
701 local lines
702 local last_line
703
704 for module in ${modules_list[@]}; do
705 module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}`
706 done
707 lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n -r`
708 last_line=`echo ${lines} | cut -d ' ' -f 1`
709 [[ -z ${last_line} ]] && last_line=0
710 echo ${last_line}
711}
712
713function create_ramdisk_vendor_recovery() {
714 modules_order=$1
715 if [[ -n ${ANDROID_PROJECT} ]]; then
716 modules_recovery_order=$2
qinglin.libce54712023-05-08 13:56:31 +0800717 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800718 local modules_list
719
720 modules_list=`echo ${RAMDISK_MODULES_LOAD_LIST[@]}`
721 export ramdisk_last_line=`calculate_last_line ${modules_order} "${modules_list}"`
722 export ramdisk_last_line_add_1=${ramdisk_last_line}
723 let ramdisk_last_line_add_1+=1
724 echo ramdisk_last_line=${ramdisk_last_line}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800725
726 if [[ -n ${ANDROID_PROJECT} ]]; then
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800727 modules_list=`echo ${RECOVERY_MODULES_LOAD_LIST[@]}`
728 recovery_last_line=`calculate_last_line ${modules_recovery_order} "${modules_list}"`
729 echo recovery_last_line=${recovery_last_line}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800730 mkdir recovery
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800731 if [[ ${recovery_last_line} == 0 ]]; then
732 : > recovery/recovery_modules.order
733 : > recovery_install.sh
734 else
735 sed -n "${ramdisk_last_line_add_1},${recovery_last_line}p" ${modules_recovery_order} > recovery/recovery_modules.order
736 cat recovery/recovery_modules.order | xargs cp -t recovery/
737 cat recovery/recovery_modules.order | sed "s/^/insmod &/" > recovery_install.sh
qinglin.lidba324f2023-03-02 19:56:21 +0800738 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800739
Wanwei Jiang571dde62022-11-17 14:37:41 +0800740 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
741 echo "echo Install recovery modules success!" >> recovery_install.sh
742 chmod 755 recovery_install.sh
743 mv recovery_install.sh recovery/
744 fi
745
wanwei.jiang50759e12022-03-24 12:36:17 +0800746 mkdir ramdisk
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800747 head -n ${ramdisk_last_line} ${modules_order} > ramdisk/ramdisk_modules.order
748 echo -e "#!/bin/sh\n\nset -x" > ramdisk/ramdisk_install.sh
749 if [[ ${ramdisk_last_line} != 0 ]]; then
750 cat ramdisk/ramdisk_modules.order | xargs mv -t ramdisk/
751 cat ramdisk/ramdisk_modules.order | sed "s/^/insmod &/" >> ramdisk/ramdisk_install.sh
qinglin.li6e3847d2023-08-09 15:39:05 +0800752 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800753 echo "echo Install ramdisk modules success!" >> ramdisk/ramdisk_install.sh
754 chmod 755 ramdisk/ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800755
wanwei.jiang50759e12022-03-24 12:36:17 +0800756 mkdir vendor
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800757 sed -n "${ramdisk_last_line_add_1},$$p" ${modules_order} > vendor/vendor_modules.order
758 echo -e "#!/bin/sh\n\nset -x" > vendor/vendor_install.sh
759 if [[ -s vendor/vendor_modules.order ]]; then
760 cat vendor/vendor_modules.order | xargs mv -t vendor/
761 cat vendor/vendor_modules.order | sed "s/^/insmod &/" >> vendor/vendor_install.sh
762 fi
763 echo "echo Install vendor modules success!" >> vendor/vendor_install.sh
764 chmod 755 vendor/vendor_install.sh
wanwei.jiangb12abc82021-12-25 22:17:10 +0800765}
766
wanwei.jiang612a8882021-11-23 17:12:23 +0800767function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800768 arg1=$1
769
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800770 if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then
771 MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
772 fi
773 source ${MODULES_SEQUENCE_LIST}
774
Dezhen Wang0a453292024-02-27 07:33:57 +0000775 if [[ ! -f ${EXTRA_MODULES_LIST} ]]; then
776 EXTRA_MODULES_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_list
777 fi
778 source ${EXTRA_MODULES_LIST}
779
Wanwei Jiang2218b892023-03-17 17:31:21 +0800780 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
781 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800782 rm -rf ${OUT_AMLOGIC_DIR}
783 mkdir -p ${OUT_AMLOGIC_DIR}
784 mkdir -p ${OUT_AMLOGIC_DIR}/modules
785 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800786 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800787
Wanwei Jiang2218b892023-03-17 17:31:21 +0800788 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800789 BAZEL_OUT=${ROOT_DIR}/bazel-out/k8-fastbuild/bin/common
790 if [[ -n ${FAST_BUILD} ]]; then
791 kernel_release=`cat ${BAZEL_OUT}/kernel_aarch64/include/config/kernel.release`
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800792 if [[ -z ${ANDROID_PROJECT} ]]; then
793 mkdir -p ${OUT_AMLOGIC_DIR}/fast_build/amlogic
794 tar -zxf ${BAZEL_OUT}/amlogic/modules_staging_dir_self.tar.gz -C ${OUT_AMLOGIC_DIR}/fast_build/amlogic
795 cp ${BAZEL_OUT}/amlogic_kbuild_mixed_tree/System.map ${OUT_AMLOGIC_DIR}/fast_build/amlogic
796 pushd ${OUT_AMLOGIC_DIR}/fast_build/amlogic
797 depmod -e -F System.map -b . ${kernel_release}
798 cp ${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/${kernel_release}/modules.order ${DIST_DIR}/modules.load
799 popd
800 else
801 cp ${BAZEL_OUT}/amlogic_modules_install/staging/lib/modules/${kernel_release}/modules.dep ${DIST_DIR}/modules.load
802 sed -i "s/:.*//g" ${DIST_DIR}/modules.load
803 fi
Wanwei Jiangea102c02024-07-09 17:37:37 +0800804 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800805 while read module
806 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800807 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800808 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800809 if [[ -f ${DIST_DIR}/${module_name} ]]; then
810 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
811 else
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800812 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800813 module_f=
814 for module_l in `find ${BAZEL_OUT}/kernel_aarch64 -name ${module_name}`; do
815 if [[ ${module_l} =~ ${module#*/} ]]; then
816 module_f=${module_l}
817 break
818 fi
819 done
820 module=${module_f}
821 if [[ -z ${module_f} ]]; then
822 module=`find ${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/ -name ${module_name}`
823 fi
824 else
825 module=`find ${BAZEL_OUT}/amlogic_modules_install/staging/lib/modules/ -name ${module_name}`
826 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800827 cp ${module} ${OUT_AMLOGIC_DIR}/modules
828 fi
829 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800830 module=${module#*/}
831 local match=
832 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
833 if [[ "${module}" =~ "${ext_module}" ]]; then
834 match=1
835 break
836 fi
837 done
838 if [[ ${match} == 1 ]]; then
839 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
840 else
841 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
842 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800843 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800844 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800845 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800846 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800847
Wanwei Jiangc32c6432024-07-10 17:36:05 +0800848 if [[ -z ${ANDROID_PROJECT} && -n ${FAST_BUILD} ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800849 dep_file=${OUT_AMLOGIC_DIR}/fast_build/amlogic/lib/modules/${kernel_release}/modules.dep
850 else
851 dep_file=`find ${BAZEL_OUT}/amlogic_modules_install -name *.dep | grep "amlogic"`
852 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800853 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800854 if [[ -n ${ANDROID_PROJECT} ]]; then
855 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
856 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
857 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
858 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
859 done
860 done
861
862 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800863 for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800864 order_file_dir=${order_file#*/extra/}
865 order_file_dir=${order_file_dir%/modules.order.*}
866 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
867 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
868 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
869 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
870 fi
871 done
872 else
873 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
874 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800875 else
876 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
877 pushd ${MODULES_ROOT_DIR}
878 local common_drivers=${COMMON_DRIVERS_DIR##*/}
879 local modules_list=$(find -type f -name "*.ko")
880 for module in ${modules_list}; do
881 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
882 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
883 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
884 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800885 local match=
886 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
887 if [[ "${module}" =~ "${ext_module}" ]]; then
888 match=1
889 break
890 fi
891 done
892 if [[ ${match} == 1 ]]; then
893 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
894 else
895 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
896 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800897 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800898 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800899 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
900 fi
901 done
902
903 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
904 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800905 dep_file=modules.dep
906 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
907 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
908 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
909 done
910 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800911 else # all modules, include external modules
912 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800913 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800914 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800915 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800916 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800917 sed -i 's#[^ ]*/##g' modules.dep
918
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800919 echo adjust_sequence_modules_loading
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800920 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800921
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800922 echo create_install_and_order_filles modules.order
923 create_install_and_order_filles modules.dep __install.sh modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800924
925 if [[ -n ${ANDROID_PROJECT} ]]; then
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800926 echo create_install_and_order_filles modules_recovery.order
927 create_install_and_order_filles modules_recovery.dep __install_recovery.sh modules_recovery.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800928 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800929
930 create_ramdisk_vendor_recovery modules.order modules_recovery.order
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800931
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800932 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
933 install_file=manual_install.sh
934 else
935 install_file=install.sh
936 fi
937 echo "#!/bin/sh" > ${install_file}
938 echo "cd ramdisk" >> ${install_file}
939 echo "./ramdisk_install.sh" >> ${install_file}
940 echo "cd ../vendor" >> ${install_file}
941 echo "./vendor_install.sh" >> ${install_file}
942 echo "cd ../" >> ${install_file}
943 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800944
945 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
946
Wanwei Jiang571dde62022-11-17 14:37:41 +0800947 if [[ -n ${ANDROID_PROJECT} ]]; then
948 rm __install_recovery.sh __install_recovery.sh.tmp
949 fi
950
wanwei.jiang236e9a32021-12-07 16:34:14 +0800951 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800952
Wanwei Jiang2218b892023-03-17 17:31:21 +0800953 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiangea102c02024-07-09 17:37:37 +0800954 if [[ -n ${FAST_BUILD} ]]; then
955 cp ${BAZEL_OUT}/kernel_aarch64/vmlinux ${OUT_AMLOGIC_DIR}/symbols
956 cp ${BAZEL_OUT}/kernel_aarch64/vmlinux ${DIST_DIR}/
957 cp ${BAZEL_OUT}/kernel_aarch64/Image* ${DIST_DIR}/
958 else
959 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
960 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800961
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800962 find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800963 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
Wanwei Jiang2218b892023-03-17 17:31:21 +0800964 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800965 else
966 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
967 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
968 for ext_module in ${EXT_MODULES}; do
969 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
970 done
971 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800972}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800973export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800974
Wanwei Jiang2218b892023-03-17 17:31:21 +0800975function rename_external_module_name() {
976 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800977 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 +0800978 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
979 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
980 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800981 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800982 for module in ${modules_name}; do
983 echo module=$module
984 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
985 if [[ -z ${external_coppied} ]]; then
986 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
987 external_coppied=1
988 fi
989 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
990 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800991 done
992 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800993 done
994}
995export -f rename_external_module_name
996
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800997# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800998function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800999 echo
1000 echo "========================================================"
1001 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1002 echo "Rebuild rootfs in order to install modules!"
1003 else
1004 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1005 return
1006 fi
1007
wanwei.jiangff4dccd2022-08-14 01:14:51 +08001008 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +08001009
Lei Zhang475c17b2022-03-03 11:08:50 +08001010 local ARCH=arm64
1011 if [[ -n $1 ]]; then
1012 ARCH=$1
1013 fi
1014
wanwei.jiang612a8882021-11-23 17:12:23 +08001015 rm rootfs -rf
1016 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +08001017 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +08001018 cd rootfs
1019 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
1020 gunzip rootfs_base.cpio.gz
1021 mkdir rootfs
1022 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +08001023 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +08001024 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
1025 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +08001026 fi
wanwei.jiang612a8882021-11-23 17:12:23 +08001027 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +08001028
dongqing.li6fd83502023-06-15 09:59:40 +08001029 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +08001030 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +08001031 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 +08001032 mv rootfs_new.cpio.gz.uboot ../
1033 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +08001034 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +08001035
1036 popd
1037}
1038export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +08001039
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001040# function check_undefined_symbol can check the dependence among the modules
1041# parameter:
1042# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +08001043function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +08001044 if [[ ${MODULES_DEPEND} != "1" ]]; then
1045 return
1046 fi
1047
1048 echo "========================================================"
1049 echo "print modules depend"
1050
wanwei.jiangff4dccd2022-08-14 01:14:51 +08001051 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +08001052 echo
1053 echo "========================================================"
1054 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001055 if [[ -n ${LLVM} ]]; then
1056 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
1057 elif [[ -n ${CROSS_COMPILE} ]]; then
1058 compile_tool=${CROSS_COMPILE}
1059 else
1060 echo "can't find compile tool"
1061 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +08001062 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
Wanwei Jiangd71aca62023-09-13 18:14:07 +08001063 cp modules.order module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001064 cp ramdisk/*.ko .
1065 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +08001066 while read LINE
1067 do
1068 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001069 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 +08001070 do
1071 #echo ${U}
1072 U_v=`grep -w ${U} vmlinux_T.txt`
1073 in_vmlinux=0
1074 if [ -n "${U_v}" ];
1075 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08001076 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +08001077 in_vmlinux=1
1078 continue
1079 fi
1080 in_module=0
1081 MODULE=
1082 while read LINE1
1083 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001084 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 +08001085 if [ -n "${U_m}" ];
1086 then
1087 in_module=1
1088 MODULE=${LINE1}
1089 fi
1090 done < module_list.txt
1091 if [ ${in_module} -eq "1" ];
1092 then
1093 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1094 continue
1095 else
1096 printf "\t%-50s <== none\n" ${U}
1097 fi
1098 done
1099 echo
1100 echo
1101 done < module_list.txt
1102 rm vmlinux_T.txt
1103 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001104 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001105 popd
1106}
1107export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001108
1109function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1110 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1111 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1112 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1113}
1114export -f reorganized_abi_symbol_list_file
1115
1116function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001117 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1118 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1119 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1120 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1121 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1122 else
1123 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1124 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1125 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1126 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1127 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001128
1129 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1130 for file in ${file_list}
1131 do
1132 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1133 reorganized_abi_symbol_list_file "${file}"
1134
1135 if [[ -s ${symbol_tmp} ]]; then
1136 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1137 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1138 else
1139 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1140 fi
1141 cat ${symbol_tmp}
1142 echo -e "\n------------------------------------------------------------"
1143 fi
1144 rm ${symbol_tmp}
1145 done
1146}
1147export -f abi_symbol_list_detect
1148
Dezhen Wangf9bec562023-10-16 16:15:26 +08001149# this function is for kernel higher than 13-5.15
1150function set_env_for_adjust_config_action () {
1151 set -a # export the value changed to environment
1152 . ${ROOT_DIR}/${BUILD_CONFIG}
1153 set +a
1154 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1155 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1156 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1157
1158 # set the version of clang bin
1159 prebuilts_paths=(
1160 CLANG_PREBUILT_BIN
1161 BUILDTOOLS_PREBUILT_BIN
1162 )
1163 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1164 prebuilt_bin=\${${prebuilt_bin}}
1165 eval prebuilt_bin="${prebuilt_bin}"
1166 if [ -n "${prebuilt_bin}" ]; then
1167 # Mitigate dup paths
1168 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1169 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH}
1170 fi
1171 done
1172 export PATH
1173
1174 # support the ndk tools
1175 if [[ -n "${NDK_TRIPLE}" ]]; then
1176 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1177 if [[ ! -d "${NDK_DIR}" ]]; then
1178 # Kleaf/Bazel will checkout the ndk to a different directory than build.sh.
1179 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1180 if [[ ! -d "${NDK_DIR}" ]]; then
1181 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1182 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1183 exit 1
1184 fi
1185 fi
1186 USERCFLAGS="--target=${NDK_TRIPLE} "
1187 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1188 # up two line set the CONFIG_CC_CAN_LINK CONFIG_CC_CAN_LINK_STATIC CONFIG_UAPI_HEADER_TEST to y
1189 else
1190 USERCFLAGS="--sysroot=/dev/null"
1191 fi
1192 export USERCFLAGS USERLDFLAGS
1193}
1194
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001195# adjust_config_action concerns three types of cmd:
1196# parameters:
1197# --menuconfig: make menuconfig manually based on different gki standard
1198# --basicconfig: only config kernel with google original gki_defconfig as base
1199# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1200function adjust_config_action () {
1201 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1202 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1203 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001204
1205 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1206 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1207 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1208 else
Dezhen Wangf9bec562023-10-16 16:15:26 +08001209 set_env_for_adjust_config_action
Dezhen Wang2edb5232023-07-06 14:15:33 +08001210 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001211
1212 orig_config=$(mktemp)
1213 orig_defconfig=$(mktemp)
1214 out_config="${OUT_DIR}/.config"
1215 out_defconfig="${OUT_DIR}/defconfig"
1216 changed_config=$(mktemp)
1217 changed_defconfig=$(mktemp)
1218
1219 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1220 set -x
1221 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1222 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1223 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1224 cp ${out_config} ${orig_config}
1225 cp ${out_defconfig} ${orig_defconfig}
1226 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1227 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1228 fi
1229 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1230 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1231 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1232 if [ "${ARCH}" = "arm" ]; then
1233 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1234 fi
1235 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1236 echo
1237 echo "========================================================"
1238 echo "==================== .config diff ===================="
1239 cat ${changed_config}
1240 echo "==================== defconfig diff ===================="
1241 cat ${changed_defconfig}
1242 echo "========================================================"
1243 echo
1244 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1245 set -x
1246 pre_defconfig_cmds
1247 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1248 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1249 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1250 post_defconfig_cmds
1251 set +x
1252 else # make menuconfig based on config with different gki standard
1253 set -x
1254 pre_defconfig_cmds
1255 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1256 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1257 cp ${out_config} ${orig_config}
1258 cp ${out_defconfig} ${orig_defconfig}
1259 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1260 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1261 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1262 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1263 post_defconfig_cmds
1264 set +x
1265 echo
1266 echo "========================================================"
1267 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1268 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1269 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1270 echo "==================== .config diff ===================="
1271 cat ${changed_config}
1272 echo "==================== defconfig diff ===================="
1273 cat ${changed_defconfig}
1274 echo "========================================================"
1275 echo
1276 fi
1277 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1278 exit
1279 fi
1280}
1281export -f adjust_config_action
1282
1283# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1284# parameter:
1285# --image: only build image
1286# --modules: only build kernel modules
1287# --dtbs: only build dtbs
1288function build_part_of_kernel () {
1289 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1290 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001291 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1292 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1293 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1294 else
1295 source ${ROOT_DIR}/${BUILD_CONFIG}
1296 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1297 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1298 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1299 tool_args+=("LLVM=1")
1300 tool_args+=("DEPMOD=${DEPMOD}")
1301 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001302
1303 if [[ ! -f ${OUT_DIR}/.config ]]; then
1304 pre_defconfig_cmds
1305 set -x
1306 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1307 set +x
1308 post_defconfig_cmds
1309 fi
1310
1311 if [[ -n ${IMAGE} ]]; then
1312 set -x
1313 if [ "${ARCH}" = "arm64" ]; then
1314 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1315 elif [ "${ARCH}" = "arm" ]; then
1316 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1317 fi
1318 set +x
1319 fi
1320 mkdir -p ${DIST_DIR}
1321 if [[ -n ${DTB_BUILD} ]]; then
1322 set -x
1323 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1324 set +x
1325 fi
1326 if [[ -n ${MODULES} ]]; then
1327 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1328 rm -rf ${MODULES_STAGING_DIR}
1329 mkdir -p ${MODULES_STAGING_DIR}
1330 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1331 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1332 fi
1333 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1334 set -x
1335 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1336 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1337 set +x
1338 fi
1339 echo EXT_MODULES=$EXT_MODULES
1340 prepare_module_build
1341 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1342 echo "========================================================"
1343 echo " Building external modules and installing them into staging directory"
1344 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1345 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001346 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001347 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1348 set -x
1349 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1350 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1351 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1352 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1353 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1354 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1355 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1356 "${MAKE_ARGS[@]}" modules_install
1357 set +x
1358 done
1359 fi
1360 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1361 set -x
1362 extra_cmds
1363 set +x
1364 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1365 cp -p ${MODULES} ${DIST_DIR}
1366
1367 new_path=${PATH}
1368 PATH=${old_path}
1369 echo "========================================================"
1370 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1371 echo "Rebuild rootfs in order to install modules!"
1372 rebuild_rootfs ${ARCH}
1373 else
1374 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1375 fi
1376 PATH=${new_path}
1377 fi
1378 if [ -n "${DTS_EXT_DIR}" ]; then
1379 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
qinglin.lia40f7b62023-07-26 18:52:35 +08001380 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001381 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1382 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1383 fi
1384 fi
1385 fi
1386 for FILE in ${FILES}; do
1387 if [ -f ${OUT_DIR}/${FILE} ]; then
1388 echo " $FILE"
1389 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1390 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1391 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1392 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1393 echo " $FILE"
1394 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1395 else
1396 echo " $FILE is not a file, skipping"
1397 fi
1398 done
1399 exit
1400 fi
1401}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001402export -f build_part_of_kernel
1403
1404function export_env_variable () {
1405 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001406 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 +08001407 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
qinglin.lib71c3202023-08-01 10:29:53 +08001408 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 +08001409
1410 echo ROOT_DIR=$ROOT_DIR
1411 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 +08001412 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 +08001413 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001414 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
qinglin.lib71c3202023-08-01 10:29:53 +08001415 echo AMLOGIC_R_USER_DIFFCONFIG=${AMLOGIC_R_USER_DIFFCONFIG} CONFIG_BOOTIMAGE=${CONFIG_BOOTIMAGE}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001416}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001417export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001418
1419function handle_input_parameters () {
1420 VA=
1421 ARGS=()
1422 for i in "$@"
1423 do
1424 case $i in
1425 --arch)
1426 ARCH=$2
1427 VA=1
1428 shift
1429 ;;
1430 --abi)
1431 ABI=1
1432 shift
1433 ;;
1434 --build_config)
1435 BUILD_CONFIG=$2
1436 VA=1
1437 shift
1438 ;;
1439 --lto)
1440 LTO=$2
1441 VA=1
1442 shift
1443 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001444 --menuconfig)
1445 MENUCONFIG=1
1446 shift
1447 ;;
1448 --basicconfig)
1449 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1450 BASICCONFIG=$2
1451 else
1452 BASICCONFIG="m"
1453 fi
1454 VA=1
1455 shift
1456 ;;
1457 --image)
1458 IMAGE=1
1459 shift
1460 ;;
1461 --modules)
1462 MODULES=1
1463 shift
1464 break
1465 ;;
1466 --dtbs)
1467 DTB_BUILD=1
1468 shift
1469 ;;
1470 --build_dir)
1471 BUILD_DIR=$2
1472 VA=1
1473 shift
1474 ;;
1475 --check_defconfig)
1476 CHECK_DEFCONFIG=1
1477 shift
1478 ;;
1479 --modules_depend)
1480 MODULES_DEPEND=1
1481 shift
1482 ;;
1483 --android_project)
1484 ANDROID_PROJECT=$2
1485 VA=1
1486 shift
1487 ;;
1488 --gki_20)
1489 GKI_CONFIG=gki_20
1490 shift
1491 ;;
1492 --gki_10)
1493 GKI_CONFIG=gki_10
1494 shift
1495 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001496 --fast_build)
1497 FAST_BUILD=1
1498 shift
1499 ;;
1500 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001501 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001502 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001503 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001504 VA=1
1505 shift
1506 ;;
1507 --manual_insmod_module)
1508 MANUAL_INSMOD_MODULE=1
1509 shift
1510 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001511 --check_gki_20)
1512 CHECK_GKI_20=1
1513 GKI_CONFIG=gki_20
1514 LTO=none
1515 shift
1516 ;;
1517 --dev_config)
1518 DEV_CONFIGS=$2
1519 VA=1
1520 shift
1521 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001522 --use_prebuilt_gki)
1523 PREBUILT_GKI=$2
1524 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001525 shift
1526 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001527 --kasan)
1528 KASAN=1
1529 LTO=none
1530 shift
1531 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001532 -h|--help)
1533 show_help
1534 exit 0
1535 ;;
1536 *)
1537 if [[ -n $1 ]];
1538 then
1539 if [[ -z ${VA} ]];
1540 then
1541 ARGS+=("$1")
1542 fi
1543 fi
1544 VA=
1545 shift
1546 ;;
1547 esac
1548 done
1549}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001550export -f handle_input_parameters
1551
1552function set_default_parameters () {
1553 if [ "${ARCH}" = "arm" ]; then
1554 ARGS+=("LOADADDR=0x108000")
1555 else
1556 ARCH=arm64
1557 fi
1558
1559 if [[ -z "${ABI}" ]]; then
1560 ABI=0
1561 fi
1562 if [[ -z "${LTO}" ]]; then
1563 LTO=thin
1564 fi
1565 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1566 ANDROID_PROJECT=ohm
1567 fi
1568
1569 if [[ -z "${BUILD_CONFIG}" ]]; then
1570 if [ "${ARCH}" = "arm64" ]; then
1571 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1572 elif [ "${ARCH}" = "arm" ]; then
1573 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1574 fi
1575 fi
1576 if [[ -z "${BUILD_DIR}" ]]; then
1577 BUILD_DIR=build
1578 fi
1579
1580 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1581 version_message="common${version_message##*android}"
1582 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1583 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1584 echo "kernel version is not match!!"
1585 exit
1586 fi
1587 else
1588 FULL_KERNEL_VERSION=${version_message}
1589 fi
1590
1591 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001592 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001593 fi
1594
1595 auto_patch_to_common_dir
1596
qinglin.lieafebcf2023-06-27 12:48:22 +08001597 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001598 echo "The directory of build does not exist";
1599 exit
1600 fi
1601
1602 ROOT_DIR=$(readlink -f $(dirname $0))
1603 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1604 ROOT_DIR=`pwd`
1605 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1606 echo "the file path of $0 is incorrect"
1607 exit
1608 fi
1609 fi
1610 export ROOT_DIR
1611
1612 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1613 MODULES_DEPEND=${MODULES_DEPEND:-0}
1614 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1615 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1616 RM_KERNEL_BUILD_VAR_FILE=1
1617 fi
1618
Dezhen Wang850c0d22023-05-31 19:26:20 +08001619 export CROSS_COMPILE=
1620
1621 if [ "${ABI}" -eq "1" ]; then
1622 export OUT_DIR_SUFFIX="_abi"
1623 else
1624 OUT_DIR_SUFFIX=
1625 fi
1626}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001627export -f set_default_parameters
1628
1629function auto_patch_to_common_dir () {
1630 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001631
1632 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1633 export PATCH_PARM
1634 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001635 if [[ $? -ne 0 ]]; then
1636 echo "auto patch error!"
1637 exit 1
1638 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001639 fi
1640
1641 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1642 cd ${CURRENT_DIR}
1643 exit
1644 fi
1645}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001646export -f auto_patch_to_common_dir
1647
Dezhen Wang850c0d22023-05-31 19:26:20 +08001648function build_ext_modules() {
1649 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001650 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001651 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1652
1653 set -x
1654 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1655 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1656 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1657 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1658 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1659 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1660 INSTALL_MOD_STRIP=1 \
1661 modules_install -j12 || exit
1662 set +x
1663 done
1664}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001665export -f build_ext_modules
1666
Dezhen Wang1176fad2023-06-09 11:22:17 +08001667function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001668 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1669 if [ -n "${MODULES}" ]; then
1670 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1671 echo "========================================================"
1672 echo " Copying modules files"
1673 for module in ${MODULES}; do
1674 cp ${module} ${DIST_DIR}
1675 done
1676 if [ "${COMPRESS_MODULES}" = "1" ]; then
1677 echo " Archiving modules to ${MODULES_ARCHIVE}"
1678 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1679 fi
1680 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001681 fi
1682}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001683export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001684
Dezhen Wang1176fad2023-06-09 11:22:17 +08001685function copy_files_to_dist_dir () {
1686 echo "========================================================"
1687 echo " Copying files"
1688 for FILE in ${FILES}; do
1689 if [ -f ${OUT_DIR}/${FILE} ]; then
1690 echo " $FILE"
1691 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1692 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1693 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1694 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1695 echo " $FILE"
1696 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1697 else
1698 echo " $FILE is not a file, skipping"
1699 fi
1700 done
1701}
1702export -f copy_files_to_dist_dir
1703
1704function make_dtbo() {
1705 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1706 echo "========================================================"
1707 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1708 (
1709 cd ${OUT_DIR}
1710 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1711 )
1712 fi
1713}
1714export -f make_dtbo
1715
1716function installing_UAPI_kernel_headers () {
1717 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1718 echo "========================================================"
1719 echo " Installing UAPI kernel headers:"
1720 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1721 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1722 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1723 headers_install
1724 # The kernel makefiles create files named ..install.cmd and .install which
1725 # are only side products. We don't want those. Let's delete them.
1726 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1727 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1728 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1729 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1730 fi
1731}
1732export -f installing_UAPI_kernel_headers
1733
1734function copy_kernel_headers_to_compress () {
1735 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1736 echo "========================================================"
1737 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1738 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1739 pushd $ROOT_DIR/$KERNEL_DIR
1740 find arch include $OUT_DIR -name *.h -print0 \
1741 | tar -czf $KERNEL_HEADERS_TAR \
1742 --absolute-names \
1743 --dereference \
1744 --transform "s,.*$OUT_DIR,," \
1745 --transform "s,^,kernel-headers/," \
1746 --null -T -
1747 popd
1748 fi
1749}
1750export -f copy_kernel_headers_to_compress
1751
1752function set_default_parameters_for_32bit () {
1753 tool_args=()
1754 prebuilts_paths=(
1755 CLANG_PREBUILT_BIN
1756 CLANGTOOLS_PREBUILT_BIN
1757 RUST_PREBUILT_BIN
1758 LZ4_PREBUILTS_BIN
1759 DTC_PREBUILTS_BIN
1760 LIBUFDT_PREBUILTS_BIN
1761 BUILDTOOLS_PREBUILT_BIN
1762 )
1763 echo CC_CLANG=$CC_CLANG
1764 if [[ $CC_CLANG -eq "1" ]]; then
1765 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1766 if [[ -n "${LLVM}" ]]; then
1767 tool_args+=("LLVM=1")
1768 # Reset a bunch of variables that the kernel's top level Makefile does, just
1769 # in case someone tries to use these binaries in this script such as in
1770 # initramfs generation below.
1771 HOSTCC=clang
1772 HOSTCXX=clang++
1773 CC=clang
1774 LD=ld.lld
1775 AR=llvm-ar
1776 NM=llvm-nm
1777 OBJCOPY=llvm-objcopy
1778 OBJDUMP=llvm-objdump
1779 OBJSIZE=llvm-size
1780 READELF=llvm-readelf
1781 STRIP=llvm-strip
1782 else
1783 if [ -n "${HOSTCC}" ]; then
1784 tool_args+=("HOSTCC=${HOSTCC}")
1785 fi
1786
1787 if [ -n "${CC}" ]; then
1788 tool_args+=("CC=${CC}")
1789 if [ -z "${HOSTCC}" ]; then
1790 tool_args+=("HOSTCC=${CC}")
1791 fi
1792 fi
1793
1794 if [ -n "${LD}" ]; then
1795 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1796 fi
1797
1798 if [ -n "${NM}" ]; then
1799 tool_args+=("NM=${NM}")
1800 fi
1801
1802 if [ -n "${OBJCOPY}" ]; then
1803 tool_args+=("OBJCOPY=${OBJCOPY}")
1804 fi
1805 fi
1806
1807 if [ -n "${DTC}" ]; then
1808 tool_args+=("DTC=${DTC}")
1809 fi
1810 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1811 prebuilt_bin=\${${prebuilt_bin}}
1812 eval prebuilt_bin="${prebuilt_bin}"
1813 if [ -n "${prebuilt_bin}" ]; then
1814 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1815 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1816 fi
1817 done
1818 export PATH
1819 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1820 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1821 fi
1822
1823 # Have host compiler use LLD and compiler-rt.
1824 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1825 if [[ -n "${NDK_TRIPLE}" ]]; then
1826 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1827
1828 if [[ ! -d "${NDK_DIR}" ]]; then
1829 # Kleaf/Bazel will checkout the ndk to a different directory than
1830 # build.sh.
1831 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1832 if [[ ! -d "${NDK_DIR}" ]]; then
1833 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1834 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1835 exit 1
1836 fi
1837 fi
1838 USERCFLAGS="--target=${NDK_TRIPLE} "
1839 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1840 # Some kernel headers trigger -Wunused-function for unused static functions
1841 # with clang; GCC does not warn about unused static inline functions. The
1842 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1843 # not set.
1844 USERCFLAGS+="-Wno-unused-function "
1845 # To help debug these flags, consider commenting back in the following, and
1846 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1847 # in scripts/cc-can-link.sh.
1848 #USERCFLAGS+=" -Wl,--verbose -v"
1849 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1850 # clang is not configured to use LLD by default, and BFD has been
1851 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1852 # scripts/cc-can-link.sh.
1853 USERLDFLAGS="${LLD_COMPILER_RT} "
1854 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1855 else
1856 USERCFLAGS="--sysroot=/dev/null"
1857 fi
1858
1859 #setting_the_default_output_dir
1860 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1861 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1862 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1863 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1864 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1865 export MODULES_ARCHIVE=modules.tar.gz
1866 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1867 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1868 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1869 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1870 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1871 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1872 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1873 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1874
1875 tool_args+=("LOADADDR=0x108000")
1876 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08001877 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
1878 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08001879 TOOL_ARGS="${tool_args[@]}"
1880
1881 mkdir -p ${OUT_DIR}
1882 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1883 rm -rf ${COMMON_OUT_DIR}
1884 fi
1885
1886 source ${ROOT_DIR}/build/kernel/build_utils.sh
1887
1888 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08001889 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang1176fad2023-06-09 11:22:17 +08001890 export dtstree=${DTS_EXT_DIR}
1891 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1892
1893 EXT_MODULES="
1894 ${EXT_MODULES}
1895 "
1896
1897 EXT_MODULES_CONFIG="
1898 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1899 "
1900
1901 EXT_MODULES_PATH="
1902 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1903 "
1904
1905 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1906 EXTRA_CMDS="extra_cmds"
1907
1908 IN_KERNEL_MODULES=1
1909}
1910export -f set_default_parameters_for_32bit
1911
1912function generating_test_mappings_zip () {
1913 echo "========================================================"
1914 echo " Generating test_mappings.zip"
1915 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
1916 find ${ROOT_DIR} -name TEST_MAPPING \
1917 -not -path "${ROOT_DIR}/\.git*" \
1918 -not -path "${ROOT_DIR}/\.repo*" \
1919 -not -path "${ROOT_DIR}/out*" \
1920 > ${TEST_MAPPING_FILES}
1921 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
1922}
1923export -f generating_test_mappings_zip
1924
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001925function setting_up_for_build () {
1926 echo "========================================================"
1927 echo " Setting up for build"
1928 if [ "${SKIP_MRPROPER}" != "1" ] ; then
1929 set -x
1930 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper)
1931 set +x
1932 fi
1933}
1934export -f setting_up_for_build
1935
1936function build_kernel_for_32bit () {
1937 set -x
Dezhen Wang170460d2024-04-01 07:57:23 +00001938 pre_defconfig_cmds
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001939 if [ "${SKIP_DEFCONFIG}" != "1" ] ; then
1940 (cd ${KERNEL_DIR} && make ARCH=arm ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1941 fi
Dezhen Wang170460d2024-04-01 07:57:23 +00001942 post_defconfig_cmds
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001943
1944 echo "========================================================"
1945 echo " Building kernel"
1946
1947 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1948 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1949 if [[ -n ${ANDROID_PROJECT} ]]; then
1950 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} android_overlay_dt.dtbo -j12
1951 fi
1952 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1953 set +x
1954}
1955export -f build_kernel_for_32bit
1956
1957function modules_install_for_32bit () {
1958 set -x
1959 if [ "${BUILD_INITRAMFS}" = "1" -o -n "${IN_KERNEL_MODULES}" ]; then
1960 echo "========================================================"
1961 echo " Installing kernel modules into staging directory"
1962
1963 (cd ${OUT_DIR} && make ARCH=arm O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_STRIP=1 \
1964 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install)
1965 fi
1966 set +x
1967}
1968export -f modules_install_for_32bit
Dezhen Wangad3fffe2023-08-24 11:07:55 +08001969
1970function build_android_32bit () {
1971
1972 source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1973
Dezhen Wangad3fffe2023-08-24 11:07:55 +08001974 CC_CLANG=1
1975
1976 set_default_parameters_for_32bit
1977
1978 export USERCFLAGS USERLDFLAGS BRANCH KMI_GENERATION
1979 export HOSTCC HOSTCXX CC LD AR NM OBJCOPY OBJDUMP OBJSIZE READELF STRIP PATH KCONFIG_CONFIG
1980 export KERNEL_DIR ROOT_DIR OUT_DIR TOOL_ARGS MODULE_STRIP_FLAG DEPMOD INSTALL_MOD_DIR COMMON_OUT_DIR
1981
1982 setting_up_for_build
1983
1984 mkdir -p ${DIST_DIR} ${MODULES_STAGING_DIR}
1985
1986 build_kernel_for_32bit
1987
Dezhen Wangad3fffe2023-08-24 11:07:55 +08001988 eval ${POST_KERNEL_BUILD_CMDS}
1989
1990 modules_install_for_32bit
1991
1992 build_ext_modules
1993
1994 set -x
1995 eval ${EXTRA_CMDS}
1996 set +x
1997
1998 copy_files_to_dist_dir
1999
2000 installing_UAPI_kernel_headers
2001
2002 copy_kernel_headers_to_compress
2003
2004 copy_modules_files_to_dist_dir
2005
2006 make_dtbo
2007
2008}
2009export -f build_android_32bit
Dezhen Wang0ac8a6a2023-06-28 11:03:23 +08002010
2011function clear_files_compressed_with_lzma_in_last_build () {
2012 file_lzma="Image.lzma boot-lzma.img boot.img.lzma"
2013 for remove_file in ${file_lzma}
2014 do
2015 file_path=`find -name $remove_file`
2016 if [[ -n ${file_path} ]]; then
2017 rm ${file_path}
2018 fi
2019 done
2020}
2021export -f clear_files_compressed_with_lzma_in_last_build
2022
2023function generate_lzma_format_image () {
qinglin.li71c0eed2024-07-10 17:06:06 +08002024 {
2025 pushd ${DIST_DIR}
2026 lzma -z -k -f -9 Image
2027 popd
2028 } &
2029
2030 {
2031 pushd ${DIST_DIR}
2032 lzma -z -k -f -9 boot.img
2033 popd
2034 } &
Dezhen Wang0ac8a6a2023-06-28 11:03:23 +08002035}
2036export -f generate_lzma_format_image