blob: 4e536138655def78f97e5c61614aa172dba277b7 [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
wanwei.jiang91776952021-11-19 13:10:32 +080090}
91export -f pre_defconfig_cmds
92
93function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080094 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080095}
96export -f post_defconfig_cmds
97
98function read_ext_module_config() {
99 ALL_LINE=""
100 while read LINE
101 do
102 if [[ $LINE != \#* && $LINE != "" ]]; then
103 ALL_LINE="$ALL_LINE"" ""$LINE"
104 fi
105 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800106
107 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800108}
109
pengzhao.liua923dea2023-06-25 09:58:20 +0800110function autotest(){
111 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
112 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
113 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
114 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
115 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
116 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
117 fi
118 fi
119}
120
wanwei.jiang91776952021-11-19 13:10:32 +0800121function read_ext_module_predefine() {
122 PRE_DEFINE=""
123
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800124 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800125 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
126 done
127
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800128 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800129 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
130 done
131
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800132 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800133}
134
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800135top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800136function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800137 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800138 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800139 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
140 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
141 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
142 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800143 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800144
145 for ext_module_config in ${EXT_MODULES_CONFIG}; do
146 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
147 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
148 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
149 done
150 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
151 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
152 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
153
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800154 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
155 if [[ -d ${top_ext_drivers} ]]; then
156 rm -rf ${top_ext_drivers}
157 fi
158 mkdir -p ${top_ext_drivers}
159 fi
160
161 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
162 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
163 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800164 ext_modules=
165 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800166 module_abs_path=`readlink -e ${ext_module}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800167 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800168 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
169 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
170 cp -rf ${module_abs_path} ${top_ext_drivers}
171 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
172 fi
173 fi
174 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800175 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800176
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800177 for ext_module_path in ${EXT_MODULES_PATH}; do
178 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800179 while read LINE
180 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800181 module_abs_path=`readlink -e ${LINE}`
qinglin.lia40f7b62023-07-26 18:52:35 +0800182 module_rel_path=$(real_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800183 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
184 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
185 cp -rf ${module_abs_path} ${top_ext_drivers}
186 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
187 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800188 fi
189 ext_modules="${ext_modules} ${module_rel_path}"
190
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800191 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800192 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800193 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800194
195 local flag=0
196 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
197 for ext_module in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +0800198 ext_mod_rel=$(real_path ${ext_module} ${KERNEL_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800199 if [[ ${flag} -eq "1" ]]; then
200 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
201 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
202 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
203 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
204 echo "${ext_module}/Makefile add: ${extra_symbols}"
205 fi
206 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
207 flag=1
208 done
209 fi
210
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800211 export EXT_MODULES
212 echo EXT_MODULES=${EXT_MODULES}
213
214 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800215}
wanwei.jiang91776952021-11-19 13:10:32 +0800216export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800217
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800218function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800219 echo "========================================================"
220 echo " Running extra build command(s):"
221
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800222 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
223 for ext_module in ${EXT_MODULES}; do
224 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
225 done
226 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800227
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800228 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
229 if [[ -d ${top_ext_drivers} ]]; then
230 rm -rf ${top_ext_drivers}
231 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800232 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800233
234 for FILE in ${FILES}; do
235 if [[ "${FILE}" =~ \.dtbo ]] && \
236 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
237 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
238 fi
239 done
240 export MKDTIMG_DTBOS
241
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800242 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800243 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800244 set -x
245
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800246 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
247 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800248 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800249 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800250 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800251 while read LINE
252 do
253 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800254 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800255 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800256 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800257 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800258 ext_modules=
259 for ext_module in ${EXT_MODULES}; do
260 if [[ ${ext_module} =~ "../" ]]; then
261 ext_module_old=${ext_module}
262 ext_module=${ext_module//\.\.\//}
263 ext_dir=$(dirname ${ext_module})
264 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
265 mkdir -p extra/${ext_dir}
266 cp -rf extra/${ext_module_old} extra/${ext_dir}
267
268 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
269 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800270 sed -i "s/\.\.\///g" ${ext_modules_order_file}
271 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800272 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800273 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800274 else
275 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800276 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800277 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800278 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800279 fi
280 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800281 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800282 EXT_MODULES=${ext_modules}
283 echo EXT_MODULES=${EXT_MODULES}
284 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800285
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800286 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800287 file_last_line=`sed -n "$=" modules.order`
288 let line=${file_last_line}-${ramdisk_last_line}
289 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800290 export MODULES_LIST=${src_dir}/vendor_boot_modules
291 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800292 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
293 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800294
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800295 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800296
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800297 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800298 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
299 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800300
301 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
302 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800303 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800304 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
305 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
306 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800307 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800308 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
309 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
310 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
311 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
312 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
313 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800314 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
315 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800316 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800317 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800318 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800319
320 for module_path in ${PREBUILT_MODULES_PATH}; do
321 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
322 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800323}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800324export -f extra_cmds
325
Wanwei Jiang2218b892023-03-17 17:31:21 +0800326function bazel_extra_cmds() {
327 modules_install
328
329 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
330 : > ${KERNEL_BUILD_VAR_FILE}
331 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
332 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
333 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
334 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800335 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800336 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800337 fi
338
339 if [[ ${GKI_CONFIG} != gki_20 ]]; then
340 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
341 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
342 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
343 mkdir ${DIST_DIR}/system_dlkm_gki10
344 pushd ${DIST_DIR}/system_dlkm_gki10
345 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
346 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800347 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800348 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
349 rm -f ${module}
350 fi
351 done
352 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
353 popd
354 rm -rf ${DIST_DIR}/system_dlkm_gki10
355 fi
356}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800357export -f bazel_extra_cmds
358
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800359#$1 dep_file
360#$2 ko
361#$3 install_sh
wanwei.jiang612a8882021-11-23 17:12:23 +0800362function mod_probe() {
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800363 local dep_file=$1
364 local ko=$2
365 local install_sh=$3
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800366 local loop
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800367 for loop in `grep "^${ko}:" ${dep_file} | sed 's/.*://'`; do
Dezhen Wang50d56482023-11-20 19:56:14 +0800368 [[ `grep "^${loop}" ${install_sh}` ]] && continue
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800369 mod_probe ${dep_file} ${loop} ${install_sh}
370 echo insmod ${loop} >> ${install_sh}
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800371 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800372}
373
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800374function create_install_and_order_filles() {
375 local modules_dep_file=$1
376 local install_file=$2
377 local modules_order_file=$3
Wanwei Jiang571dde62022-11-17 14:37:41 +0800378 local loop
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800379
380 [[ -f ${install_file} ]] && rm -f ${install_file}
381 touch ${install_file}
382 [[ -f ${install_file}.tmp ]] && rm -f ${install_file}.tmp
383 touch ${install_file}.tmp
384 [[ -f ${modules_order_file} ]] && rm -f ${modules_order_file}
385 touch ${modules_order_file}
386 [[ -f ${modules_order_file}.tmp ]] && rm -f ${modules_order_file}.tmp
387 touch ${modules_order_file}.tmp
388
389 for loop in `cat ${modules_dep_file} | sed 's/:.*//'`; do
390 echo ${loop} >> ${modules_order_file}.tmp
Dezhen Wang50d56482023-11-20 19:56:14 +0800391 [[ `grep "^${loop}" ${install_file}.tmp` ]] && continue
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800392 mod_probe ${modules_dep_file} ${loop} ${install_file}.tmp
393 echo insmod ${loop} >> ${install_file}.tmp
Wanwei Jiang571dde62022-11-17 14:37:41 +0800394 done
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800395
396 cat ${install_file}.tmp | awk ' {
397 if (!cnt[$2]) {
398 print $0;
399 cnt[$2]++;
400 }
401 }' > ${install_file}
402
403 cut -d ' ' -f 2 ${install_file} > ${modules_order_file}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800404}
405
wanwei.jiangb12abc82021-12-25 22:17:10 +0800406function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800407 if [[ -n $1 ]]; then
408 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800409 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800410
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800411 cp modules.dep modules.dep.temp
412
413 soc_module=()
414 for chip in ${chips[@]}; do
415 chip_module=`ls amlogic-*-soc-${chip}.ko`
416 soc_module=(${soc_module[@]} ${chip_module[@]})
417 done
418 echo soc_module=${soc_module[*]}
419
420 delete_soc_module=()
421 if [[ ${#soc_module[@]} == 0 ]]; then
422 echo "Use all soc module"
423 else
424 for module in `ls amlogic-*-soc-*`; do
425 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
426 echo Delete soc module: ${module}
427 sed -n "/${module}:/p" modules.dep.temp
428 sed -i "/${module}:/d" modules.dep.temp
429 delete_soc_module=(${delete_soc_module[@]} ${module})
430 fi
431 done
432 echo delete_soc_module=${delete_soc_module[*]}
433 fi
434
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800435 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800436 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800437 for module in `ls amlogic-clk-soc-*`; do
438 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
439 echo Delete clk soc module: ${module}
440 sed -n "/${module}:/p" modules.dep.temp
441 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800442 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800443 fi
444 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800445 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800446 fi
447
448 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800449 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800450 for module in `ls amlogic-pinctrl-soc-*`; do
451 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
452 echo Delete pinctrl soc module: ${module}
453 sed -n "/${module}:/p" modules.dep.temp
454 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800455 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800456 fi
457 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800458 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800459 fi
460
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800461 in_line_i=a
462 delete_type_modules=()
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800463 [[ -z ${TYPE_MODULE_SELECT_MODULE} ]] && TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE_ANDROID}
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800464 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
465 mkdir temp_dir
466 cd temp_dir
467 in_temp_dir=y
468 for element in ${TYPE_MODULE_SELECT_MODULE}; do
469 if [[ ${in_temp_dir} = y ]]; then
470 cd ../
471 rm -r temp_dir
472 in_temp_dir=
473 fi
474 if [[ ${in_line_i} = a ]]; then
475 in_line_i=b
476 type_module=${element}
477 select_modules_i=0
478 select_modules_count=
479 select_modules=
480 elif [[ ${in_line_i} = b ]]; then
481 in_line_i=c
482 select_modules_count=${element}
483 else
484 let select_modules_i+=1
485 select_modules="${select_modules} ${element}"
486 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
487 in_line_i=a
488 echo type_module=$type_module select_modules=$select_modules
489 for module in `ls ${type_module}`; do
490 dont_delete_module=0
491 for select_module in ${select_modules}; do
492 if [[ "${select_module}" == "${module}" ]] ; then
493 dont_delete_module=1
494 break;
495 fi
496 done
497 if [[ ${dont_delete_module} != 1 ]]; then
498 echo Delete module: ${module}
499 sed -n "/${module}:/p" modules.dep.temp
500 sed -i "/${module}:/d" modules.dep.temp
501 delete_type_modules=(${delete_type_modules[@]} ${module})
502 fi
503 done
504 echo delete_type_modules=${delete_type_modules[*]}
505 fi
506 fi
507 done
508 if [[ -n ${in_temp_dir} ]]; then
509 cd ../
510 rm -r temp_dir
511 fi
512
513 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800514 mkdir service_module
515 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
516 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
517 echo ${BLACK_AND_SERVICE_LIST[@]}
518 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800519 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800520 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800521 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800522 if [[ ${#black_modules[@]} == 0 ]]; then
523 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800524 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800525 echo black_modules=${black_modules[*]}
526 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800527 echo Delete module: ${module}
528 sed -n "/${module}:/p" modules.dep.temp
529 sed -i "/${module}:/d" modules.dep.temp
530 done
531 fi
532
Wanwei Jiang475245b2023-05-10 21:06:52 +0800533 GKI_MODULES_LOAD_BLACK_LIST=()
Wanwei Jiang16554d02023-07-14 17:01:00 +0800534 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]]; then
Wanwei Jiang475245b2023-05-10 21:06:52 +0800535 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800536 if [[ ${BAZEL} == "1" ]]; then
537 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
538 else
539 rm -f ${gki_modules_temp_file}
540 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
541 do
542 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
543 done
544 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800545
546 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
547 sed -i "/\/${module}/d" ${gki_modules_temp_file}
548 done
549
550 for module in `cat ${gki_modules_temp_file}`; do
551 module=${module##*/}
552 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
553 done
554 rm -f ${gki_modules_temp_file}
555
556 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
557 echo Delete module: ${module}
Dezhen Wang50d56482023-11-20 19:56:14 +0800558 sed -n "/^${module}:/p" modules.dep.temp
559 sed -i "/^${module}:/d" modules.dep.temp
Wanwei Jiang475245b2023-05-10 21:06:52 +0800560 done
561 fi
562
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800563 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800564 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 +0800565 for module in ${delete_modules[@]}; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800566 if [[ ! -f $module ]]; then
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800567 continue
568 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800569 match=`sed -n "/${module}/=" modules.dep.temp1`
570 for match in ${match[@]}; do
571 match_count=(${match_count[@]} $match)
572 done
573 if [[ ${#match_count[@]} != 0 ]]; then
574 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800575 echo ${MODULES_SEQUENCE_LIST}:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800576 exit
577 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800578 if [[ -n ${ANDROID_PROJECT} ]]; then
579 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
580 if [[ ${module} = ${service_module_temp} ]]; then
581 mv ${module} service_module
582 fi
583 done
584 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800585 rm -f ${module}
586 done
587 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800588 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800589
590 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
591 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800592 sed -n "/${module}:/p" modules.dep.temp
593 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
594 sed -i "/${module}:/d" modules.dep.temp
595 sed -n "/${module}.*\.ko:/p" modules.dep.temp
596 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
597 sed -i "/${module}.*\.ko:/d" modules.dep.temp
598 done
599
Wanwei Jiang571dde62022-11-17 14:37:41 +0800600 if [[ -n ${ANDROID_PROJECT} ]]; then
601 cp modules.dep.temp modules_recovery.dep.temp
602 cp modules.dep.temp1 modules_recovery.dep.temp1
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800603 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
604 echo RECOVERY_MODULES_LOAD_LIST: $module
605 sed -n "/${module}:/p" modules_recovery.dep.temp
606 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
607 sed -i "/${module}:/d" modules_recovery.dep.temp
608 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
609 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
610 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
611 done
612 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
613 cp modules_recovery.dep.temp1 modules_recovery.dep
614 rm modules_recovery.dep.temp
615 rm modules_recovery.dep.temp1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800616 fi
617
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800618 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
619 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
620 sed -n "/${module}:/p" modules.dep.temp
621 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
622 sed -i "/${module}:/d" modules.dep.temp
623 sed -n "/${module}.*\.ko:/p" modules.dep.temp
624 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
625 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800626 done
627
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800628 : > modules.dep.temp2
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800629 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
630 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
631 sed -n "/${module}:/p" modules.dep.temp
632 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
633 sed -i "/${module}:/d" modules.dep.temp
634 sed -n "/${module}.*\.ko:/p" modules.dep.temp
635 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
636 sed -i "/${module}.*\.ko:/d" modules.dep.temp
637 done
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800638 cat modules.dep.temp >> modules.dep.temp1
639 cat modules.dep.temp2 >> modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800640 cp modules.dep.temp1 modules.dep
641 rm modules.dep.temp
642 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800643 rm modules.dep.temp2
644}
645
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800646function calculate_first_line() {
647 local modules_order_file=$1
648 local modules_list=($2)
649 local module
650 local module_lines=()
651 local lines
652 local first_line
653
654 for module in ${modules_list[@]}; do
655 module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}`
Wanwei Jiang9173e462022-09-29 00:58:33 +0800656 done
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800657 lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n`
658 first_line=`echo ${lines} | cut -d ' ' -f 1`
659 echo ${first_line}
660}
661
662function calculate_last_line() {
663 local modules_order_file=$1
664 local modules_list=($2)
665 local module
666 local module_lines=()
667 local lines
668 local last_line
669
670 for module in ${modules_list[@]}; do
671 module_lines[${#module_lines[@]}]=`sed -n "/${module}/=" ${modules_order_file}`
672 done
673 lines=`echo ${module_lines[*]} | tr ' ' '\n' | sort -n -r`
674 last_line=`echo ${lines} | cut -d ' ' -f 1`
675 [[ -z ${last_line} ]] && last_line=0
676 echo ${last_line}
677}
678
679function create_ramdisk_vendor_recovery() {
680 modules_order=$1
681 if [[ -n ${ANDROID_PROJECT} ]]; then
682 modules_recovery_order=$2
qinglin.libce54712023-05-08 13:56:31 +0800683 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800684 local modules_list
685
686 modules_list=`echo ${RAMDISK_MODULES_LOAD_LIST[@]}`
687 export ramdisk_last_line=`calculate_last_line ${modules_order} "${modules_list}"`
688 export ramdisk_last_line_add_1=${ramdisk_last_line}
689 let ramdisk_last_line_add_1+=1
690 echo ramdisk_last_line=${ramdisk_last_line}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800691
692 if [[ -n ${ANDROID_PROJECT} ]]; then
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800693 modules_list=`echo ${RECOVERY_MODULES_LOAD_LIST[@]}`
694 recovery_last_line=`calculate_last_line ${modules_recovery_order} "${modules_list}"`
695 echo recovery_last_line=${recovery_last_line}
Wanwei Jiang571dde62022-11-17 14:37:41 +0800696 mkdir recovery
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800697 if [[ ${recovery_last_line} == 0 ]]; then
698 : > recovery/recovery_modules.order
699 : > recovery_install.sh
700 else
701 sed -n "${ramdisk_last_line_add_1},${recovery_last_line}p" ${modules_recovery_order} > recovery/recovery_modules.order
702 cat recovery/recovery_modules.order | xargs cp -t recovery/
703 cat recovery/recovery_modules.order | sed "s/^/insmod &/" > recovery_install.sh
qinglin.lidba324f2023-03-02 19:56:21 +0800704 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800705
Wanwei Jiang571dde62022-11-17 14:37:41 +0800706 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
707 echo "echo Install recovery modules success!" >> recovery_install.sh
708 chmod 755 recovery_install.sh
709 mv recovery_install.sh recovery/
710 fi
711
wanwei.jiang50759e12022-03-24 12:36:17 +0800712 mkdir ramdisk
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800713 head -n ${ramdisk_last_line} ${modules_order} > ramdisk/ramdisk_modules.order
714 echo -e "#!/bin/sh\n\nset -x" > ramdisk/ramdisk_install.sh
715 if [[ ${ramdisk_last_line} != 0 ]]; then
716 cat ramdisk/ramdisk_modules.order | xargs mv -t ramdisk/
717 cat ramdisk/ramdisk_modules.order | sed "s/^/insmod &/" >> ramdisk/ramdisk_install.sh
qinglin.li6e3847d2023-08-09 15:39:05 +0800718 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800719 echo "echo Install ramdisk modules success!" >> ramdisk/ramdisk_install.sh
720 chmod 755 ramdisk/ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800721
wanwei.jiang50759e12022-03-24 12:36:17 +0800722 mkdir vendor
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800723 sed -n "${ramdisk_last_line_add_1},$$p" ${modules_order} > vendor/vendor_modules.order
724 echo -e "#!/bin/sh\n\nset -x" > vendor/vendor_install.sh
725 if [[ -s vendor/vendor_modules.order ]]; then
726 cat vendor/vendor_modules.order | xargs mv -t vendor/
727 cat vendor/vendor_modules.order | sed "s/^/insmod &/" >> vendor/vendor_install.sh
728 fi
729 echo "echo Install vendor modules success!" >> vendor/vendor_install.sh
730 chmod 755 vendor/vendor_install.sh
wanwei.jiangb12abc82021-12-25 22:17:10 +0800731}
732
wanwei.jiang612a8882021-11-23 17:12:23 +0800733function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800734 arg1=$1
735
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800736 if [[ ! -f ${MODULES_SEQUENCE_LIST} ]]; then
737 MODULES_SEQUENCE_LIST=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
738 fi
739 source ${MODULES_SEQUENCE_LIST}
740
Wanwei Jiang2218b892023-03-17 17:31:21 +0800741 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
742 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800743 rm -rf ${OUT_AMLOGIC_DIR}
744 mkdir -p ${OUT_AMLOGIC_DIR}
745 mkdir -p ${OUT_AMLOGIC_DIR}/modules
746 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800747 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800748
Wanwei Jiang2218b892023-03-17 17:31:21 +0800749 if [[ ${BAZEL} == "1" ]]; then
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800750 BAZEL_OUT=bazel-out/
Wanwei Jiang0df84602023-05-05 14:40:42 +0800751 while read module
752 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800753 module_name=${module##*/}
Wanwei Jiang16554d02023-07-14 17:01:00 +0800754 if [[ -z ${ANDROID_PROJECT} || `echo ${module} | grep "^kernel\/"` ]]; then
Wanwei Jiang0df84602023-05-05 14:40:42 +0800755 if [[ -f ${DIST_DIR}/${module_name} ]]; then
756 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
757 else
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800758 module=`find ${BAZEL_OUT} -name ${module_name} | grep "amlogic_modules_install"`
Wanwei Jiang0df84602023-05-05 14:40:42 +0800759 cp ${module} ${OUT_AMLOGIC_DIR}/modules
760 fi
761 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
Wanwei Jiang16554d02023-07-14 17:01:00 +0800762 module=${module#*/}
763 local match=
764 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
765 if [[ "${module}" =~ "${ext_module}" ]]; then
766 match=1
767 break
768 fi
769 done
770 if [[ ${match} == 1 ]]; then
771 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
772 else
773 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
774 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800775 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800776 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800777 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800778 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800779
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800780 dep_file=`find ${BAZEL_OUT} -name *.dep | grep "amlogic"`
Wanwei Jiang2218b892023-03-17 17:31:21 +0800781 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800782 if [[ -n ${ANDROID_PROJECT} ]]; then
783 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
784 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
785 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
786 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
787 done
788 done
789
790 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800791 for order_file in `find ${BAZEL_OUT} -name "modules.order.*" | grep "amlogic"`; do
Wanwei Jiang16554d02023-07-14 17:01:00 +0800792 order_file_dir=${order_file#*/extra/}
793 order_file_dir=${order_file_dir%/modules.order.*}
794 if [[ ! "${EXT_MODULES_ANDROID_AUTO_LOAD}" =~ "${order_file_dir}" ]]; then
795 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
796 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
797 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
798 fi
799 done
800 else
801 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/modules.dep
802 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800803 else
804 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
805 pushd ${MODULES_ROOT_DIR}
806 local common_drivers=${COMMON_DRIVERS_DIR##*/}
807 local modules_list=$(find -type f -name "*.ko")
808 for module in ${modules_list}; do
809 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
810 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
811 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
812 else
Wanwei Jiang16554d02023-07-14 17:01:00 +0800813 local match=
814 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
815 if [[ "${module}" =~ "${ext_module}" ]]; then
816 match=1
817 break
818 fi
819 done
820 if [[ ${match} == 1 ]]; then
821 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
822 else
823 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
824 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800825 fi
Wanwei Jiang16554d02023-07-14 17:01:00 +0800826 else
Wanwei Jiang2218b892023-03-17 17:31:21 +0800827 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
828 fi
829 done
830
831 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
832 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang16554d02023-07-14 17:01:00 +0800833 dep_file=modules.dep
834 for ext_module in ${EXT_MODULES_ANDROID_AUTO_LOAD}; do
835 cat ${dep_file} | cut -d ':' -f 1 | grep -n "${ext_module}" | cut -d ':' -f 1 | while read line; do
836 sed -n ${line}p ${dep_file} >> ${OUT_AMLOGIC_DIR}/modules/modules.dep
837 done
838 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800839 else # all modules, include external modules
840 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800841 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800842 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800843 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800844 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800845 sed -i 's#[^ ]*/##g' modules.dep
846
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800847 echo adjust_sequence_modules_loading
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800848 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800849
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800850 echo create_install_and_order_filles modules.order
851 create_install_and_order_filles modules.dep __install.sh modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800852
853 if [[ -n ${ANDROID_PROJECT} ]]; then
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800854 echo create_install_and_order_filles modules_recovery.order
855 create_install_and_order_filles modules_recovery.dep __install_recovery.sh modules_recovery.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800856 fi
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800857
858 create_ramdisk_vendor_recovery modules.order modules_recovery.order
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800859
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800860 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
861 install_file=manual_install.sh
862 else
863 install_file=install.sh
864 fi
865 echo "#!/bin/sh" > ${install_file}
866 echo "cd ramdisk" >> ${install_file}
867 echo "./ramdisk_install.sh" >> ${install_file}
868 echo "cd ../vendor" >> ${install_file}
869 echo "./vendor_install.sh" >> ${install_file}
870 echo "cd ../" >> ${install_file}
871 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800872
873 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
874
Wanwei Jiang571dde62022-11-17 14:37:41 +0800875 if [[ -n ${ANDROID_PROJECT} ]]; then
876 rm __install_recovery.sh __install_recovery.sh.tmp
877 fi
878
wanwei.jiang236e9a32021-12-07 16:34:14 +0800879 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800880
Wanwei Jiang2218b892023-03-17 17:31:21 +0800881 if [[ ${BAZEL} == "1" ]]; then
882 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
883
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800884 find ${BAZEL_OUT} -name *.ko | grep "unstripped" | while read module; do
Wanwei Jiang2218b892023-03-17 17:31:21 +0800885 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
Wanwei Jiang2218b892023-03-17 17:31:21 +0800886 done
Wanwei Jiang2218b892023-03-17 17:31:21 +0800887 else
888 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
889 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
890 for ext_module in ${EXT_MODULES}; do
891 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
892 done
893 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800894}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800895export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800896
Wanwei Jiang2218b892023-03-17 17:31:21 +0800897function rename_external_module_name() {
898 local external_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800899 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 +0800900 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
901 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
902 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
Wanwei Jiang16554d02023-07-14 17:01:00 +0800903 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied
Wanwei Jiang2218b892023-03-17 17:31:21 +0800904 for module in ${modules_name}; do
905 echo module=$module
906 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
907 if [[ -z ${external_coppied} ]]; then
908 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
909 external_coppied=1
910 fi
911 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
912 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800913 done
914 external_coppied=
Wanwei Jiang2218b892023-03-17 17:31:21 +0800915 done
916}
917export -f rename_external_module_name
918
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800919# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800920function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800921 echo
922 echo "========================================================"
923 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
924 echo "Rebuild rootfs in order to install modules!"
925 else
926 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
927 return
928 fi
929
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800930 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800931
Lei Zhang475c17b2022-03-03 11:08:50 +0800932 local ARCH=arm64
933 if [[ -n $1 ]]; then
934 ARCH=$1
935 fi
936
wanwei.jiang612a8882021-11-23 17:12:23 +0800937 rm rootfs -rf
938 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800939 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800940 cd rootfs
941 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
942 gunzip rootfs_base.cpio.gz
943 mkdir rootfs
944 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800945 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800946 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
947 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800948 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800949 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800950
dongqing.li6fd83502023-06-15 09:59:40 +0800951 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800952 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800953 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 +0800954 mv rootfs_new.cpio.gz.uboot ../
955 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800956 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800957
958 popd
959}
960export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800961
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800962# function check_undefined_symbol can check the dependence among the modules
963# parameter:
964# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800965function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800966 if [[ ${MODULES_DEPEND} != "1" ]]; then
967 return
968 fi
969
970 echo "========================================================"
971 echo "print modules depend"
972
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800973 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800974 echo
975 echo "========================================================"
976 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800977 if [[ -n ${LLVM} ]]; then
978 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
979 elif [[ -n ${CROSS_COMPILE} ]]; then
980 compile_tool=${CROSS_COMPILE}
981 else
982 echo "can't find compile tool"
983 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800984 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
Wanwei Jiangd71aca62023-09-13 18:14:07 +0800985 cp modules.order module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800986 cp ramdisk/*.ko .
987 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800988 while read LINE
989 do
990 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800991 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 +0800992 do
993 #echo ${U}
994 U_v=`grep -w ${U} vmlinux_T.txt`
995 in_vmlinux=0
996 if [ -n "${U_v}" ];
997 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800998 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800999 in_vmlinux=1
1000 continue
1001 fi
1002 in_module=0
1003 MODULE=
1004 while read LINE1
1005 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001006 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 +08001007 if [ -n "${U_m}" ];
1008 then
1009 in_module=1
1010 MODULE=${LINE1}
1011 fi
1012 done < module_list.txt
1013 if [ ${in_module} -eq "1" ];
1014 then
1015 printf "\t%-50s <== %s\n" ${U} ${MODULE}
1016 continue
1017 else
1018 printf "\t%-50s <== none\n" ${U}
1019 fi
1020 done
1021 echo
1022 echo
1023 done < module_list.txt
1024 rm vmlinux_T.txt
1025 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +08001026 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001027 popd
1028}
1029export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001030
1031function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1032 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1033 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1034 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1035}
1036export -f reorganized_abi_symbol_list_file
1037
1038function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001039 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1040 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1041 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1042 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1043 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1044 else
1045 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1046 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1047 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1048 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1049 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001050
1051 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1052 for file in ${file_list}
1053 do
1054 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1055 reorganized_abi_symbol_list_file "${file}"
1056
1057 if [[ -s ${symbol_tmp} ]]; then
1058 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1059 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1060 else
1061 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1062 fi
1063 cat ${symbol_tmp}
1064 echo -e "\n------------------------------------------------------------"
1065 fi
1066 rm ${symbol_tmp}
1067 done
1068}
1069export -f abi_symbol_list_detect
1070
Dezhen Wangf9bec562023-10-16 16:15:26 +08001071# this function is for kernel higher than 13-5.15
1072function set_env_for_adjust_config_action () {
1073 set -a # export the value changed to environment
1074 . ${ROOT_DIR}/${BUILD_CONFIG}
1075 set +a
1076 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1077 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1078 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1079
1080 # set the version of clang bin
1081 prebuilts_paths=(
1082 CLANG_PREBUILT_BIN
1083 BUILDTOOLS_PREBUILT_BIN
1084 )
1085 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1086 prebuilt_bin=\${${prebuilt_bin}}
1087 eval prebuilt_bin="${prebuilt_bin}"
1088 if [ -n "${prebuilt_bin}" ]; then
1089 # Mitigate dup paths
1090 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1091 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH}
1092 fi
1093 done
1094 export PATH
1095
1096 # support the ndk tools
1097 if [[ -n "${NDK_TRIPLE}" ]]; then
1098 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1099 if [[ ! -d "${NDK_DIR}" ]]; then
1100 # Kleaf/Bazel will checkout the ndk to a different directory than build.sh.
1101 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1102 if [[ ! -d "${NDK_DIR}" ]]; then
1103 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1104 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1105 exit 1
1106 fi
1107 fi
1108 USERCFLAGS="--target=${NDK_TRIPLE} "
1109 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1110 # up two line set the CONFIG_CC_CAN_LINK CONFIG_CC_CAN_LINK_STATIC CONFIG_UAPI_HEADER_TEST to y
1111 else
1112 USERCFLAGS="--sysroot=/dev/null"
1113 fi
1114 export USERCFLAGS USERLDFLAGS
1115}
1116
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001117# adjust_config_action concerns three types of cmd:
1118# parameters:
1119# --menuconfig: make menuconfig manually based on different gki standard
1120# --basicconfig: only config kernel with google original gki_defconfig as base
1121# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1122function adjust_config_action () {
1123 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1124 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1125 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001126
1127 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1128 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1129 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1130 else
Dezhen Wangf9bec562023-10-16 16:15:26 +08001131 set_env_for_adjust_config_action
Dezhen Wang2edb5232023-07-06 14:15:33 +08001132 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001133
1134 orig_config=$(mktemp)
1135 orig_defconfig=$(mktemp)
1136 out_config="${OUT_DIR}/.config"
1137 out_defconfig="${OUT_DIR}/defconfig"
1138 changed_config=$(mktemp)
1139 changed_defconfig=$(mktemp)
1140
1141 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1142 set -x
1143 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1144 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1145 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1146 cp ${out_config} ${orig_config}
1147 cp ${out_defconfig} ${orig_defconfig}
1148 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1149 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1150 fi
1151 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1152 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1153 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1154 if [ "${ARCH}" = "arm" ]; then
1155 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1156 fi
1157 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1158 echo
1159 echo "========================================================"
1160 echo "==================== .config diff ===================="
1161 cat ${changed_config}
1162 echo "==================== defconfig diff ===================="
1163 cat ${changed_defconfig}
1164 echo "========================================================"
1165 echo
1166 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1167 set -x
1168 pre_defconfig_cmds
1169 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1170 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1171 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1172 post_defconfig_cmds
1173 set +x
1174 else # make menuconfig based on config with different gki standard
1175 set -x
1176 pre_defconfig_cmds
1177 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1178 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1179 cp ${out_config} ${orig_config}
1180 cp ${out_defconfig} ${orig_defconfig}
1181 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1182 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1183 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1184 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1185 post_defconfig_cmds
1186 set +x
1187 echo
1188 echo "========================================================"
1189 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1190 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1191 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1192 echo "==================== .config diff ===================="
1193 cat ${changed_config}
1194 echo "==================== defconfig diff ===================="
1195 cat ${changed_defconfig}
1196 echo "========================================================"
1197 echo
1198 fi
1199 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1200 exit
1201 fi
1202}
1203export -f adjust_config_action
1204
1205# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1206# parameter:
1207# --image: only build image
1208# --modules: only build kernel modules
1209# --dtbs: only build dtbs
1210function build_part_of_kernel () {
1211 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1212 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001213 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1214 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1215 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1216 else
1217 source ${ROOT_DIR}/${BUILD_CONFIG}
1218 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1219 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1220 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1221 tool_args+=("LLVM=1")
1222 tool_args+=("DEPMOD=${DEPMOD}")
1223 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001224
1225 if [[ ! -f ${OUT_DIR}/.config ]]; then
1226 pre_defconfig_cmds
1227 set -x
1228 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1229 set +x
1230 post_defconfig_cmds
1231 fi
1232
1233 if [[ -n ${IMAGE} ]]; then
1234 set -x
1235 if [ "${ARCH}" = "arm64" ]; then
1236 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1237 elif [ "${ARCH}" = "arm" ]; then
1238 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1239 fi
1240 set +x
1241 fi
1242 mkdir -p ${DIST_DIR}
1243 if [[ -n ${DTB_BUILD} ]]; then
1244 set -x
1245 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1246 set +x
1247 fi
1248 if [[ -n ${MODULES} ]]; then
1249 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1250 rm -rf ${MODULES_STAGING_DIR}
1251 mkdir -p ${MODULES_STAGING_DIR}
1252 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1253 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1254 fi
1255 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1256 set -x
1257 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1258 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1259 set +x
1260 fi
1261 echo EXT_MODULES=$EXT_MODULES
1262 prepare_module_build
1263 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1264 echo "========================================================"
1265 echo " Building external modules and installing them into staging directory"
1266 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1267 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001268 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001269 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1270 set -x
1271 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1272 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1273 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1274 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1275 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1276 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1277 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1278 "${MAKE_ARGS[@]}" modules_install
1279 set +x
1280 done
1281 fi
1282 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1283 set -x
1284 extra_cmds
1285 set +x
1286 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1287 cp -p ${MODULES} ${DIST_DIR}
1288
1289 new_path=${PATH}
1290 PATH=${old_path}
1291 echo "========================================================"
1292 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1293 echo "Rebuild rootfs in order to install modules!"
1294 rebuild_rootfs ${ARCH}
1295 else
1296 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1297 fi
1298 PATH=${new_path}
1299 fi
1300 if [ -n "${DTS_EXT_DIR}" ]; then
1301 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
qinglin.lia40f7b62023-07-26 18:52:35 +08001302 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001303 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1304 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1305 fi
1306 fi
1307 fi
1308 for FILE in ${FILES}; do
1309 if [ -f ${OUT_DIR}/${FILE} ]; then
1310 echo " $FILE"
1311 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1312 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1313 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1314 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1315 echo " $FILE"
1316 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1317 else
1318 echo " $FILE is not a file, skipping"
1319 fi
1320 done
1321 exit
1322 fi
1323}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001324export -f build_part_of_kernel
1325
1326function export_env_variable () {
1327 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001328 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 +08001329 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI KASAN
qinglin.lib71c3202023-08-01 10:29:53 +08001330 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 +08001331
1332 echo ROOT_DIR=$ROOT_DIR
1333 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 +08001334 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 +08001335 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI} KASAN=${KASAN}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001336 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
qinglin.lib71c3202023-08-01 10:29:53 +08001337 echo AMLOGIC_R_USER_DIFFCONFIG=${AMLOGIC_R_USER_DIFFCONFIG} CONFIG_BOOTIMAGE=${CONFIG_BOOTIMAGE}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001338}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001339export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001340
1341function handle_input_parameters () {
1342 VA=
1343 ARGS=()
1344 for i in "$@"
1345 do
1346 case $i in
1347 --arch)
1348 ARCH=$2
1349 VA=1
1350 shift
1351 ;;
1352 --abi)
1353 ABI=1
1354 shift
1355 ;;
1356 --build_config)
1357 BUILD_CONFIG=$2
1358 VA=1
1359 shift
1360 ;;
1361 --lto)
1362 LTO=$2
1363 VA=1
1364 shift
1365 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001366 --menuconfig)
1367 MENUCONFIG=1
1368 shift
1369 ;;
1370 --basicconfig)
1371 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1372 BASICCONFIG=$2
1373 else
1374 BASICCONFIG="m"
1375 fi
1376 VA=1
1377 shift
1378 ;;
1379 --image)
1380 IMAGE=1
1381 shift
1382 ;;
1383 --modules)
1384 MODULES=1
1385 shift
1386 break
1387 ;;
1388 --dtbs)
1389 DTB_BUILD=1
1390 shift
1391 ;;
1392 --build_dir)
1393 BUILD_DIR=$2
1394 VA=1
1395 shift
1396 ;;
1397 --check_defconfig)
1398 CHECK_DEFCONFIG=1
1399 shift
1400 ;;
1401 --modules_depend)
1402 MODULES_DEPEND=1
1403 shift
1404 ;;
1405 --android_project)
1406 ANDROID_PROJECT=$2
1407 VA=1
1408 shift
1409 ;;
1410 --gki_20)
1411 GKI_CONFIG=gki_20
1412 shift
1413 ;;
1414 --gki_10)
1415 GKI_CONFIG=gki_10
1416 shift
1417 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001418 --fast_build)
1419 FAST_BUILD=1
1420 shift
1421 ;;
1422 --upgrade)
qinglin.li62b23332023-06-25 10:37:41 +08001423 UPGRADE_PROJECT=$2
Dezhen Wang850c0d22023-05-31 19:26:20 +08001424 ANDROID_VERSION=$2
qinglin.li62b23332023-06-25 10:37:41 +08001425 GKI_CONFIG=
Dezhen Wang850c0d22023-05-31 19:26:20 +08001426 VA=1
1427 shift
1428 ;;
1429 --manual_insmod_module)
1430 MANUAL_INSMOD_MODULE=1
1431 shift
1432 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001433 --check_gki_20)
1434 CHECK_GKI_20=1
1435 GKI_CONFIG=gki_20
1436 LTO=none
1437 shift
1438 ;;
1439 --dev_config)
1440 DEV_CONFIGS=$2
1441 VA=1
1442 shift
1443 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001444 --use_prebuilt_gki)
1445 PREBUILT_GKI=$2
1446 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001447 shift
1448 ;;
qinglin.li7cf37c02023-07-04 16:06:04 +08001449 --kasan)
1450 KASAN=1
1451 LTO=none
1452 shift
1453 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001454 -h|--help)
1455 show_help
1456 exit 0
1457 ;;
1458 *)
1459 if [[ -n $1 ]];
1460 then
1461 if [[ -z ${VA} ]];
1462 then
1463 ARGS+=("$1")
1464 fi
1465 fi
1466 VA=
1467 shift
1468 ;;
1469 esac
1470 done
1471}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001472export -f handle_input_parameters
1473
1474function set_default_parameters () {
1475 if [ "${ARCH}" = "arm" ]; then
1476 ARGS+=("LOADADDR=0x108000")
1477 else
1478 ARCH=arm64
1479 fi
1480
1481 if [[ -z "${ABI}" ]]; then
1482 ABI=0
1483 fi
1484 if [[ -z "${LTO}" ]]; then
1485 LTO=thin
1486 fi
1487 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1488 ANDROID_PROJECT=ohm
1489 fi
1490
1491 if [[ -z "${BUILD_CONFIG}" ]]; then
1492 if [ "${ARCH}" = "arm64" ]; then
1493 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1494 elif [ "${ARCH}" = "arm" ]; then
1495 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1496 fi
1497 fi
1498 if [[ -z "${BUILD_DIR}" ]]; then
1499 BUILD_DIR=build
1500 fi
1501
1502 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1503 version_message="common${version_message##*android}"
1504 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1505 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1506 echo "kernel version is not match!!"
1507 exit
1508 fi
1509 else
1510 FULL_KERNEL_VERSION=${version_message}
1511 fi
1512
1513 if [[ -z ${BAZEL} ]]; then
qinglin.li62b23332023-06-25 10:37:41 +08001514 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001515 fi
1516
1517 auto_patch_to_common_dir
1518
qinglin.lieafebcf2023-06-27 12:48:22 +08001519 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001520 echo "The directory of build does not exist";
1521 exit
1522 fi
1523
1524 ROOT_DIR=$(readlink -f $(dirname $0))
1525 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1526 ROOT_DIR=`pwd`
1527 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1528 echo "the file path of $0 is incorrect"
1529 exit
1530 fi
1531 fi
1532 export ROOT_DIR
1533
1534 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1535 MODULES_DEPEND=${MODULES_DEPEND:-0}
1536 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1537 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1538 RM_KERNEL_BUILD_VAR_FILE=1
1539 fi
1540
Dezhen Wang850c0d22023-05-31 19:26:20 +08001541 export CROSS_COMPILE=
1542
1543 if [ "${ABI}" -eq "1" ]; then
1544 export OUT_DIR_SUFFIX="_abi"
1545 else
1546 OUT_DIR_SUFFIX=
1547 fi
1548}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001549export -f set_default_parameters
1550
1551function auto_patch_to_common_dir () {
1552 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001553
1554 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1555 export PATCH_PARM
1556 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001557 if [[ $? -ne 0 ]]; then
1558 echo "auto patch error!"
1559 exit 1
1560 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001561 fi
1562
1563 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1564 cd ${CURRENT_DIR}
1565 exit
1566 fi
1567}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001568export -f auto_patch_to_common_dir
1569
Dezhen Wang850c0d22023-05-31 19:26:20 +08001570function build_kernel_for_different_cpu_architecture () {
1571 set -x
1572 if [[ $ARCH == arm64 ]]; then
1573 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1574 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1575 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1576 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1577 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} INSTALL_MOD_STRIP=1 modules_install -j12 &&
1578 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001579 elif [[ $ARCH == arm ]]; then
1580 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1581 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1582 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1583 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1584 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} INSTALL_MOD_STRIP=1 modules_install -j12 &&
1585 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001586 elif [[ $ARCH == riscv ]]; then
1587 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1588 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1589 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1590 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1591 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1592 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001593 fi
1594 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1595 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1596 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1597 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1598 set +x
1599}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001600export -f build_kernel_for_different_cpu_architecture
1601
1602function build_ext_modules() {
1603 for EXT_MOD in ${EXT_MODULES}; do
qinglin.lia40f7b62023-07-26 18:52:35 +08001604 EXT_MOD_REL=$(real_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
Dezhen Wang850c0d22023-05-31 19:26:20 +08001605 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1606
1607 set -x
1608 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1609 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1610 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1611 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1612 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1613 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1614 INSTALL_MOD_STRIP=1 \
1615 modules_install -j12 || exit
1616 set +x
1617 done
1618}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001619export -f build_ext_modules
1620
Dezhen Wang1176fad2023-06-09 11:22:17 +08001621function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001622 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1623 if [ -n "${MODULES}" ]; then
1624 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1625 echo "========================================================"
1626 echo " Copying modules files"
1627 for module in ${MODULES}; do
1628 cp ${module} ${DIST_DIR}
1629 done
1630 if [ "${COMPRESS_MODULES}" = "1" ]; then
1631 echo " Archiving modules to ${MODULES_ARCHIVE}"
1632 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1633 fi
1634 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001635 fi
1636}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001637export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001638
Dezhen Wang1176fad2023-06-09 11:22:17 +08001639function copy_files_to_dist_dir () {
1640 echo "========================================================"
1641 echo " Copying files"
1642 for FILE in ${FILES}; do
1643 if [ -f ${OUT_DIR}/${FILE} ]; then
1644 echo " $FILE"
1645 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1646 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1647 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1648 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1649 echo " $FILE"
1650 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1651 else
1652 echo " $FILE is not a file, skipping"
1653 fi
1654 done
1655}
1656export -f copy_files_to_dist_dir
1657
1658function make_dtbo() {
1659 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1660 echo "========================================================"
1661 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1662 (
1663 cd ${OUT_DIR}
1664 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1665 )
1666 fi
1667}
1668export -f make_dtbo
1669
1670function installing_UAPI_kernel_headers () {
1671 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1672 echo "========================================================"
1673 echo " Installing UAPI kernel headers:"
1674 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1675 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1676 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1677 headers_install
1678 # The kernel makefiles create files named ..install.cmd and .install which
1679 # are only side products. We don't want those. Let's delete them.
1680 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1681 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1682 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1683 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1684 fi
1685}
1686export -f installing_UAPI_kernel_headers
1687
1688function copy_kernel_headers_to_compress () {
1689 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1690 echo "========================================================"
1691 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1692 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1693 pushd $ROOT_DIR/$KERNEL_DIR
1694 find arch include $OUT_DIR -name *.h -print0 \
1695 | tar -czf $KERNEL_HEADERS_TAR \
1696 --absolute-names \
1697 --dereference \
1698 --transform "s,.*$OUT_DIR,," \
1699 --transform "s,^,kernel-headers/," \
1700 --null -T -
1701 popd
1702 fi
1703}
1704export -f copy_kernel_headers_to_compress
1705
1706function set_default_parameters_for_32bit () {
1707 tool_args=()
1708 prebuilts_paths=(
1709 CLANG_PREBUILT_BIN
1710 CLANGTOOLS_PREBUILT_BIN
1711 RUST_PREBUILT_BIN
1712 LZ4_PREBUILTS_BIN
1713 DTC_PREBUILTS_BIN
1714 LIBUFDT_PREBUILTS_BIN
1715 BUILDTOOLS_PREBUILT_BIN
1716 )
1717 echo CC_CLANG=$CC_CLANG
1718 if [[ $CC_CLANG -eq "1" ]]; then
1719 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1720 if [[ -n "${LLVM}" ]]; then
1721 tool_args+=("LLVM=1")
1722 # Reset a bunch of variables that the kernel's top level Makefile does, just
1723 # in case someone tries to use these binaries in this script such as in
1724 # initramfs generation below.
1725 HOSTCC=clang
1726 HOSTCXX=clang++
1727 CC=clang
1728 LD=ld.lld
1729 AR=llvm-ar
1730 NM=llvm-nm
1731 OBJCOPY=llvm-objcopy
1732 OBJDUMP=llvm-objdump
1733 OBJSIZE=llvm-size
1734 READELF=llvm-readelf
1735 STRIP=llvm-strip
1736 else
1737 if [ -n "${HOSTCC}" ]; then
1738 tool_args+=("HOSTCC=${HOSTCC}")
1739 fi
1740
1741 if [ -n "${CC}" ]; then
1742 tool_args+=("CC=${CC}")
1743 if [ -z "${HOSTCC}" ]; then
1744 tool_args+=("HOSTCC=${CC}")
1745 fi
1746 fi
1747
1748 if [ -n "${LD}" ]; then
1749 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1750 fi
1751
1752 if [ -n "${NM}" ]; then
1753 tool_args+=("NM=${NM}")
1754 fi
1755
1756 if [ -n "${OBJCOPY}" ]; then
1757 tool_args+=("OBJCOPY=${OBJCOPY}")
1758 fi
1759 fi
1760
1761 if [ -n "${DTC}" ]; then
1762 tool_args+=("DTC=${DTC}")
1763 fi
1764 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1765 prebuilt_bin=\${${prebuilt_bin}}
1766 eval prebuilt_bin="${prebuilt_bin}"
1767 if [ -n "${prebuilt_bin}" ]; then
1768 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1769 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1770 fi
1771 done
1772 export PATH
1773 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1774 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1775 fi
1776
1777 # Have host compiler use LLD and compiler-rt.
1778 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1779 if [[ -n "${NDK_TRIPLE}" ]]; then
1780 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1781
1782 if [[ ! -d "${NDK_DIR}" ]]; then
1783 # Kleaf/Bazel will checkout the ndk to a different directory than
1784 # build.sh.
1785 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1786 if [[ ! -d "${NDK_DIR}" ]]; then
1787 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1788 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1789 exit 1
1790 fi
1791 fi
1792 USERCFLAGS="--target=${NDK_TRIPLE} "
1793 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1794 # Some kernel headers trigger -Wunused-function for unused static functions
1795 # with clang; GCC does not warn about unused static inline functions. The
1796 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1797 # not set.
1798 USERCFLAGS+="-Wno-unused-function "
1799 # To help debug these flags, consider commenting back in the following, and
1800 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1801 # in scripts/cc-can-link.sh.
1802 #USERCFLAGS+=" -Wl,--verbose -v"
1803 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1804 # clang is not configured to use LLD by default, and BFD has been
1805 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1806 # scripts/cc-can-link.sh.
1807 USERLDFLAGS="${LLD_COMPILER_RT} "
1808 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1809 else
1810 USERCFLAGS="--sysroot=/dev/null"
1811 fi
1812
1813 #setting_the_default_output_dir
1814 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1815 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1816 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1817 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1818 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1819 export MODULES_ARCHIVE=modules.tar.gz
1820 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1821 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1822 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1823 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1824 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1825 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1826 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1827 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1828
1829 tool_args+=("LOADADDR=0x108000")
1830 tool_args+=("DEPMOD=depmod")
Wanwei Jiang0bde3122023-07-20 10:24:07 +08001831 tool_args+=("KCONFIG_EXT_MODULES_PREFIX=${KCONFIG_EXT_MODULES_PREFIX}")
1832 tool_args+=("KCONFIG_EXT_PREFIX=${KCONFIG_EXT_PREFIX}")
Dezhen Wang1176fad2023-06-09 11:22:17 +08001833 TOOL_ARGS="${tool_args[@]}"
1834
1835 mkdir -p ${OUT_DIR}
1836 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1837 rm -rf ${COMMON_OUT_DIR}
1838 fi
1839
1840 source ${ROOT_DIR}/build/kernel/build_utils.sh
1841
1842 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
qinglin.lia40f7b62023-07-26 18:52:35 +08001843 DTS_EXT_DIR=$(real_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
Dezhen Wang1176fad2023-06-09 11:22:17 +08001844 export dtstree=${DTS_EXT_DIR}
1845 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1846
1847 EXT_MODULES="
1848 ${EXT_MODULES}
1849 "
1850
1851 EXT_MODULES_CONFIG="
1852 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1853 "
1854
1855 EXT_MODULES_PATH="
1856 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1857 "
1858
1859 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1860 EXTRA_CMDS="extra_cmds"
1861
1862 IN_KERNEL_MODULES=1
1863}
1864export -f set_default_parameters_for_32bit
1865
1866function generating_test_mappings_zip () {
1867 echo "========================================================"
1868 echo " Generating test_mappings.zip"
1869 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
1870 find ${ROOT_DIR} -name TEST_MAPPING \
1871 -not -path "${ROOT_DIR}/\.git*" \
1872 -not -path "${ROOT_DIR}/\.repo*" \
1873 -not -path "${ROOT_DIR}/out*" \
1874 > ${TEST_MAPPING_FILES}
1875 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
1876}
1877export -f generating_test_mappings_zip
1878
Dezhen Wang42c6bf82023-07-20 10:16:49 +08001879function setting_up_for_build () {
1880 echo "========================================================"
1881 echo " Setting up for build"
1882 if [ "${SKIP_MRPROPER}" != "1" ] ; then
1883 set -x
1884 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" mrproper)
1885 set +x
1886 fi
1887}
1888export -f setting_up_for_build
1889
1890function build_kernel_for_32bit () {
1891 set -x
1892 if [ "${SKIP_DEFCONFIG}" != "1" ] ; then
1893 (cd ${KERNEL_DIR} && make ARCH=arm ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1894 fi
1895
1896 echo "========================================================"
1897 echo " Building kernel"
1898
1899 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1900 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1901 if [[ -n ${ANDROID_PROJECT} ]]; then
1902 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} android_overlay_dt.dtbo -j12
1903 fi
1904 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
1905 set +x
1906}
1907export -f build_kernel_for_32bit
1908
1909function modules_install_for_32bit () {
1910 set -x
1911 if [ "${BUILD_INITRAMFS}" = "1" -o -n "${IN_KERNEL_MODULES}" ]; then
1912 echo "========================================================"
1913 echo " Installing kernel modules into staging directory"
1914
1915 (cd ${OUT_DIR} && make ARCH=arm O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_STRIP=1 \
1916 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install)
1917 fi
1918 set +x
1919}
1920export -f modules_install_for_32bit
Dezhen Wangad3fffe2023-08-24 11:07:55 +08001921
1922function build_android_32bit () {
1923
1924 source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1925
1926 pre_defconfig_cmds
1927
1928 CC_CLANG=1
1929
1930 set_default_parameters_for_32bit
1931
1932 export USERCFLAGS USERLDFLAGS BRANCH KMI_GENERATION
1933 export HOSTCC HOSTCXX CC LD AR NM OBJCOPY OBJDUMP OBJSIZE READELF STRIP PATH KCONFIG_CONFIG
1934 export KERNEL_DIR ROOT_DIR OUT_DIR TOOL_ARGS MODULE_STRIP_FLAG DEPMOD INSTALL_MOD_DIR COMMON_OUT_DIR
1935
1936 setting_up_for_build
1937
1938 mkdir -p ${DIST_DIR} ${MODULES_STAGING_DIR}
1939
1940 build_kernel_for_32bit
1941
1942 post_defconfig_cmds
1943
1944 eval ${POST_KERNEL_BUILD_CMDS}
1945
1946 modules_install_for_32bit
1947
1948 build_ext_modules
1949
1950 set -x
1951 eval ${EXTRA_CMDS}
1952 set +x
1953
1954 copy_files_to_dist_dir
1955
1956 installing_UAPI_kernel_headers
1957
1958 copy_kernel_headers_to_compress
1959
1960 copy_modules_files_to_dist_dir
1961
1962 make_dtbo
1963
1964}
1965export -f build_android_32bit