blob: 9d334d077052b635579e3dc6b48b45faa74f6403 [file] [log] [blame]
wanwei.jiang91776952021-11-19 13:10:32 +08001#!/bin/bash
2
3function pre_defconfig_cmds() {
wanwei.jiangff4dccd2022-08-14 01:14:51 +08004 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
Lei Zhang2853aa52022-08-23 09:40:06 +08005 if [ "${ARCH}" = "arm" ]; then
6 export PATH=${PATH}:/usr/bin/
7 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +08008
Wanwei Jiang51217812022-11-01 20:23:03 +08009 if [[ -z ${ANDROID_PROJECT} ]]; then
10 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
11 echo "CONFIG_AMLOGIC_SERIAL_MESON=y" > ${temp_file}
qinglin.li931a53f2022-11-23 11:09:03 +080012 echo "CONFIG_DEVTMPFS=y" >> ${temp_file}
Dezhen Wanga6806c52023-06-13 19:47:05 +080013 if [[ ${ARCH} == arm ]]; then
Wanwei Jiang51217812022-11-01 20:23:03 +080014 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 +080015 else
16 if [[ ${GKI_CONFIG} == gki_20 ]]; then
17 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 +080018 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080019 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}
20 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080021 fi
22 rm ${temp_file}
23 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080024 if [[ ${ARCH} == arm ]]; then
25 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}
26 else
27 if [[ ${GKI_CONFIG} == gki_20 ]]; then
28 if [[ -n ${CHECK_GKI_20} ]]; then
29 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
30 echo "CONFIG_STMMAC_ETH=n" > ${temp_file}
31 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}
32 rm ${temp_file}
33 else
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 fi
Wanwei Jiange5426752023-07-03 00:56:39 +080036 else
Dezhen Wanga6806c52023-06-13 19:47:05 +080037 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 +080038 fi
Wanwei Jiang51217812022-11-01 20:23:03 +080039 fi
wanwei.jiang6fdd3152022-08-01 20:35:05 +080040 fi
qinglin.li7a994a02022-12-05 15:04:40 +080041
42 if [[ -n ${UPGRADE_PROJECT} ]]; then
Dezhen Wang061c4782023-05-25 11:13:08 +080043 if [[ ${ANDROID_VERSION} == r || ${ANDROID_VERSION} == R ]]; then
44 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}
45 fi
qinglin.libce54712023-05-08 13:56:31 +080046 if [[ ${ANDROID_VERSION} == p || ${ANDROID_VERSION} == P ]]; then
47 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}
48 fi
Dezhen Wang061c4782023-05-25 11:13:08 +080049 if [[ ${ANDROID_VERSION} == s || ${ANDROID_VERSION} == S ]]; then
50 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}
51 fi
yao zhang1a0c556a2023-06-27 10:32:14 +080052 if [[ ${ANDROID_VERSION} == u || ${ANDROID_VERSION} == U ]]; then
53 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}
54 fi
qinglin.li7a994a02022-12-05 15:04:40 +080055 fi
Dezhen Wangab7ba642023-03-15 14:10:44 +080056
Wanwei Jiangc65e4d32023-03-21 16:24:41 +080057 if [[ ${IN_BUILD_GKI_10} == 1 ]]; then
58 local temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
59 echo "CONFIG_MODULE_SIG_ALL=y" >> ${temp_file}
60 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${temp_file}
61 rm ${temp_file}
62 fi
Dezhen Wanga5f456a2023-05-05 17:40:31 +080063
64 if [[ -n ${DEV_CONFIGS} ]]; then
65 config_list=$(echo ${DEV_CONFIGS}|sed 's/+/ /g')
66 #verify the extra config is in the right path and merge the config
67 CONFIG_DIR=arch/${ARCH}/configs
68 for config_name in ${config_list[@]}
69 do
70 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name} ]]; then
71 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/${CONFIG_DIR}/${config_name}
72 elif [[ -f ${config_name} ]]; then
73 KCONFIG_CONFIG=${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KCONFIG_DEFCONFIG} ${config_name}
74 else
75 echo "ERROR: config file ${config_name} is not in the right path!!"
76 exit
77 fi
78 done
79 fi
wanwei.jiang91776952021-11-19 13:10:32 +080080}
81export -f pre_defconfig_cmds
82
83function post_defconfig_cmds() {
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080084 rm ${ROOT_DIR}/${KCONFIG_DEFCONFIG}
wanwei.jiang91776952021-11-19 13:10:32 +080085}
86export -f post_defconfig_cmds
87
88function read_ext_module_config() {
89 ALL_LINE=""
90 while read LINE
91 do
92 if [[ $LINE != \#* && $LINE != "" ]]; then
93 ALL_LINE="$ALL_LINE"" ""$LINE"
94 fi
95 done < $1
wanwei.jiang5c861ae2022-04-21 00:51:50 +080096
97 echo "${ALL_LINE}"
wanwei.jiang91776952021-11-19 13:10:32 +080098}
99
pengzhao.liua923dea2023-06-25 09:58:20 +0800100function autotest(){
101 if [[ -d ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/ ]]; then
102 if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit ]]; then
103 cp ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
104 cp ${KERNEL_DIR}/scripts/amlogic/pre-commit ${KERNEL_DIR}/.git/hooks/pre-commit
105 chmod +x ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/.git/hooks/pre-commit
106 chmod +x ${KERNEL_DIR}/.git/hooks/pre-commit
107 fi
108 fi
109}
110
wanwei.jiang91776952021-11-19 13:10:32 +0800111function read_ext_module_predefine() {
112 PRE_DEFINE=""
113
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800114 for y_config in `cat $1 | grep "^CONFIG_.*=y" | sed 's/=y//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800115 PRE_DEFINE="$PRE_DEFINE"" -D"${y_config}
116 done
117
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800118 for m_config in `cat $1 | grep "^CONFIG_.*=m" | sed 's/=m//'`; do
wanwei.jiang91776952021-11-19 13:10:32 +0800119 PRE_DEFINE="$PRE_DEFINE"" -D"${m_config}_MODULE
120 done
121
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800122 echo "${PRE_DEFINE}"
wanwei.jiang91776952021-11-19 13:10:32 +0800123}
124
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800125top_ext_drivers=top_ext_drivers
wanwei.jiang91776952021-11-19 13:10:32 +0800126function prepare_module_build() {
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800127 local temp_file=`mktemp /tmp/kernel.XXXXXXXXXXXX`
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800128 if [[ ! `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800129 sed 's:#.*$::g' ${ROOT_DIR}/${FRAGMENT_CONFIG} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
130 GKI_EXT_KERNEL_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
131 GKI_EXT_KERNEL_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
132 export GKI_EXT_KERNEL_MODULE_CONFIG GKI_EXT_KERNEL_MODULE_PREDEFINE
wanwei.jiang91776952021-11-19 13:10:32 +0800133 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800134
135 for ext_module_config in ${EXT_MODULES_CONFIG}; do
136 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_config} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
137 GKI_EXT_MODULE_CONFIG=$(read_ext_module_config ${temp_file})
138 GKI_EXT_MODULE_PREDEFINE=$(read_ext_module_predefine ${temp_file})
139 done
140 export GKI_EXT_MODULE_CONFIG GKI_EXT_MODULE_PREDEFINE
141 echo GKI_EXT_MODULE_CONFIG=${GKI_EXT_MODULE_CONFIG}
142 echo GKI_EXT_MODULE_PREDEFINE=${GKI_EXT_MODULE_PREDEFINE}
143
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800144 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
145 if [[ -d ${top_ext_drivers} ]]; then
146 rm -rf ${top_ext_drivers}
147 fi
148 mkdir -p ${top_ext_drivers}
149 fi
150
151 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
152 extra_symbols="KBUILD_EXTRA_SYMBOLS +="
153 fi
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800154 ext_modules=
155 for ext_module in ${EXT_MODULES}; do
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800156 module_abs_path=`readlink -e ${ext_module}`
157 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
158 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
159 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
160 cp -rf ${module_abs_path} ${top_ext_drivers}
161 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
162 fi
163 fi
164 ext_modules="${ext_modules} ${module_rel_path}"
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800165 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800166
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800167 for ext_module_path in ${EXT_MODULES_PATH}; do
168 sed 's:#.*$::g' ${ROOT_DIR}/${ext_module_path} | sed '/^$/d' | sed 's/^[ ]*//' | sed 's/[ ]*$//' > ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800169 while read LINE
170 do
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800171 module_abs_path=`readlink -e ${LINE}`
172 module_rel_path=$(rel_path ${module_abs_path} ${ROOT_DIR})
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800173 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
174 if [[ `echo ${module_rel_path} | grep "\.\.\/"` ]]; then
175 cp -rf ${module_abs_path} ${top_ext_drivers}
176 module_rel_path=${top_ext_drivers}/${module_abs_path##*/}
177 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800178 fi
179 ext_modules="${ext_modules} ${module_rel_path}"
180
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800181 done < ${temp_file}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800182 done
wanwei.jiangcb5c4c82022-04-25 16:47:24 +0800183 EXT_MODULES=${ext_modules}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800184
185 local flag=0
186 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
187 for ext_module in ${EXT_MODULES}; do
188 ext_mod_rel=$(rel_path ${ext_module} ${KERNEL_DIR})
189 if [[ ${flag} -eq "1" ]]; then
190 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
191 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS end" ${ext_module}/Makefile
192 sed -i "2 i ${extra_symbols}" ${ext_module}/Makefile
193 sed -i "2 i # auto add KBUILD_EXTRA_SYMBOLS start" ${ext_module}/Makefile
194 echo "${ext_module}/Makefile add: ${extra_symbols}"
195 fi
196 extra_symbols="${extra_symbols} ${ext_mod_rel}/Module.symvers"
197 flag=1
198 done
199 fi
200
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800201 export EXT_MODULES
202 echo EXT_MODULES=${EXT_MODULES}
203
204 rm ${temp_file}
wanwei.jiang91776952021-11-19 13:10:32 +0800205}
wanwei.jiang91776952021-11-19 13:10:32 +0800206export -f prepare_module_build
wanwei.jiang612a8882021-11-23 17:12:23 +0800207
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800208function extra_cmds() {
Dezhen Wang1176fad2023-06-09 11:22:17 +0800209 echo "========================================================"
210 echo " Running extra build command(s):"
211
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800212 if [[ ${AUTO_ADD_EXT_SYMBOLS} -eq "1" ]]; then
213 for ext_module in ${EXT_MODULES}; do
214 sed -i "/# auto add KBUILD_EXTRA_SYMBOLS start/,/# auto add KBUILD_EXTRA_SYMBOLS end/d" ${ext_module}/Makefile
215 done
216 fi
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800217
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800218 if [[ ${TOP_EXT_MODULE_COPY_BUILD} -eq "1" ]]; then
219 if [[ -d ${top_ext_drivers} ]]; then
220 rm -rf ${top_ext_drivers}
221 fi
wanwei.jiang8d4a5132022-04-28 16:43:54 +0800222 fi
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800223
224 for FILE in ${FILES}; do
225 if [[ "${FILE}" =~ \.dtbo ]] && \
226 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
227 MKDTIMG_DTBOS="${MKDTIMG_DTBOS} ${DIST_DIR}/${FILE}"
228 fi
229 done
230 export MKDTIMG_DTBOS
231
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800232 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800233 modules_install
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800234 set -x
235
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800236 local src_dir=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
237 pushd ${src_dir}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800238 cp modules.order modules_order.back
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800239 : > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800240 set +x
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800241 while read LINE
242 do
243 find -name ${LINE} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800244 done < ${OUT_AMLOGIC_DIR}/modules/modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800245 set -x
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800246 sed -i "s/^\.\///" modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800247 : > ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800248 ext_modules=
249 for ext_module in ${EXT_MODULES}; do
250 if [[ ${ext_module} =~ "../" ]]; then
251 ext_module_old=${ext_module}
252 ext_module=${ext_module//\.\.\//}
253 ext_dir=$(dirname ${ext_module})
254 [[ -d extra/${ext_module} ]] && rm -rf extra/${ext_dir}
255 mkdir -p extra/${ext_dir}
256 cp -rf extra/${ext_module_old} extra/${ext_dir}
257
258 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
259 ext_dir_top=${ext_module%/*}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800260 sed -i "s/\.\.\///g" ${ext_modules_order_file}
261 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800262 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800263 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800264 else
265 ext_modules_order_file=$(ls extra/${ext_module}/modules.order.*)
wanwei.jiangf73b2202022-07-23 16:00:44 +0800266 cat ${ext_modules_order_file} >> modules.order
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800267 cat ${ext_modules_order_file} | awk -F/ '{print $NF}' >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
wanwei.jiangf73b2202022-07-23 16:00:44 +0800268 : > ${ext_modules_order_file}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800269 fi
270 ext_modules="${ext_modules} ${ext_module}"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800271 done
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800272 EXT_MODULES=${ext_modules}
273 echo EXT_MODULES=${EXT_MODULES}
274 export EXT_MODULES
wanwei.jiangf73b2202022-07-23 16:00:44 +0800275
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800276 head -n ${ramdisk_last_line} modules.order > vendor_boot_modules
wanwei.jiangf73b2202022-07-23 16:00:44 +0800277 file_last_line=`sed -n "$=" modules.order`
278 let line=${file_last_line}-${ramdisk_last_line}
279 tail -n ${line} modules.order > vendor_dlkm_modules
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800280 export MODULES_LIST=${src_dir}/vendor_boot_modules
281 if [[ "${ARCH}" = "arm64" && -z ${FAST_BUILD} ]]; then
Lei Zhang96efea62022-09-02 14:55:06 +0800282 export VENDOR_DLKM_MODULES_LIST=${src_dir}/vendor_dlkm_modules
283 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800284
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800285 popd
wanwei.jiang1d154992022-05-30 14:56:26 +0800286
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800287 if [[ -z ${ANDROID_PROJECT} ]] && [[ -d ${OUT_DIR}/${DTS_EXT_DIR} ]]; then
wanwei.jiang1d154992022-05-30 14:56:26 +0800288 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
289 fi
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800290
291 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
292 : > ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangb2ed83c2022-09-09 14:01:20 +0800293 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800294 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
295 echo "OUT_DIR=${OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
296 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800297 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800298 echo "MODULES_STAGING_DIR=${MODULES_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
299 echo "MODULES_PRIVATE_DIR=${MODULES_PRIVATE_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
300 echo "INITRAMFS_STAGING_DIR=${INITRAMFS_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
301 echo "SYSTEM_DLKM_STAGING_DIR=${SYSTEM_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
302 echo "VENDOR_DLKM_STAGING_DIR=${VENDOR_DLKM_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
303 echo "MKBOOTIMG_STAGING_DIR=${MKBOOTIMG_STAGING_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800304 echo "DIST_GKI_DIR=${DIST_GKI_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
305 echo "FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION}" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8fe00342023-05-16 22:53:14 +0800306 echo "GKI_MODULES_LOAD_WHITE_LIST=\"${GKI_MODULES_LOAD_WHITE_LIST[*]}\"" >> ${KERNEL_BUILD_VAR_FILE}
Wanwei Jiang8042e472023-06-06 14:12:32 +0800307 echo "BAZEL=${BAZEL}" >> ${KERNEL_BUILD_VAR_FILE}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800308 fi
Wanwei Jianga07f9a52022-09-30 18:40:40 +0800309
310 for module_path in ${PREBUILT_MODULES_PATH}; do
311 find ${module_path} -type f -name "*.ko" -exec cp {} ${DIST_DIR} \;
312 done
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800313}
wanwei.jiang5c861ae2022-04-21 00:51:50 +0800314export -f extra_cmds
315
Wanwei Jiang2218b892023-03-17 17:31:21 +0800316function bazel_extra_cmds() {
317 modules_install
318
319 if [[ -f ${KERNEL_BUILD_VAR_FILE} ]]; then
320 : > ${KERNEL_BUILD_VAR_FILE}
321 echo "KERNEL_DIR=${KERNEL_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
322 echo "COMMON_OUT_DIR=${COMMON_OUT_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
323 echo "DIST_DIR=${DIST_DIR}" >> ${KERNEL_BUILD_VAR_FILE}
324 echo "OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR}" >> ${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 Jiang2218b892023-03-17 17:31:21 +0800327 fi
328
329 if [[ ${GKI_CONFIG} != gki_20 ]]; then
330 [[ -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz ]] && rm -f ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
331 mv ${DIST_DIR}/system_dlkm_staging_archive.tar.gz ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
332 [[ -d ${DIST_DIR}/system_dlkm_gki10 ]] && rm -rf ${DIST_DIR}/system_dlkm_gki10
333 mkdir ${DIST_DIR}/system_dlkm_gki10
334 pushd ${DIST_DIR}/system_dlkm_gki10
335 tar zxf ${DIST_DIR}/system_dlkm_staging_archive_back.tar.gz
336 find -name "*.ko" | while read module; do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800337 module_name=${module##*/}
Wanwei Jiang2218b892023-03-17 17:31:21 +0800338 if [[ ! `grep "/${module_name}" ${DIST_DIR}/system_dlkm.modules.load` ]]; then
339 rm -f ${module}
340 fi
341 done
342 tar czf ${DIST_DIR}/system_dlkm_staging_archive.tar.gz lib
343 popd
344 rm -rf ${DIST_DIR}/system_dlkm_gki10
345 fi
346}
347
348export -f bazel_extra_cmds
349
wanwei.jiang612a8882021-11-23 17:12:23 +0800350function mod_probe() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800351 local ko=$1
352 local loop
qinglin.lia284a932022-09-21 18:07:38 +0800353 for loop in `grep "^$ko:" modules.dep | sed 's/.*://'`; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800354 mod_probe $loop
355 echo insmod $loop >> __install.sh
356 done
wanwei.jiang612a8882021-11-23 17:12:23 +0800357}
358
Wanwei Jiang571dde62022-11-17 14:37:41 +0800359function mod_probe_recovery() {
360 local ko=$1
361 local loop
362 for loop in `grep "^$ko:" modules_recovery.dep | sed 's/.*://'`; do
363 mod_probe_recovery $loop
364 echo insmod $loop >> __install_recovery.sh
365 done
366}
367
wanwei.jiangb12abc82021-12-25 22:17:10 +0800368function adjust_sequence_modules_loading() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800369 if [[ -n $1 ]]; then
370 chips=$1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800371 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800372
373 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
374 cp modules.dep modules.dep.temp
375
376 soc_module=()
377 for chip in ${chips[@]}; do
378 chip_module=`ls amlogic-*-soc-${chip}.ko`
379 soc_module=(${soc_module[@]} ${chip_module[@]})
380 done
381 echo soc_module=${soc_module[*]}
382
383 delete_soc_module=()
384 if [[ ${#soc_module[@]} == 0 ]]; then
385 echo "Use all soc module"
386 else
387 for module in `ls amlogic-*-soc-*`; do
388 if [[ ! "${soc_module[@]}" =~ "${module}" ]] ; then
389 echo Delete soc module: ${module}
390 sed -n "/${module}:/p" modules.dep.temp
391 sed -i "/${module}:/d" modules.dep.temp
392 delete_soc_module=(${delete_soc_module[@]} ${module})
393 fi
394 done
395 echo delete_soc_module=${delete_soc_module[*]}
396 fi
397
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800398 if [[ -n ${CLK_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800399 delete_clk_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800400 for module in `ls amlogic-clk-soc-*`; do
401 if [[ "${CLK_SOC_MODULE}" != "${module}" ]] ; then
402 echo Delete clk soc module: ${module}
403 sed -n "/${module}:/p" modules.dep.temp
404 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800405 delete_clk_soc_modules=(${delete_clk_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800406 fi
407 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800408 echo delete_clk_soc_modules=${delete_clk_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800409 fi
410
411 if [[ -n ${PINCTRL_SOC_MODULE} ]]; then
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800412 delete_pinctrl_soc_modules=()
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800413 for module in `ls amlogic-pinctrl-soc-*`; do
414 if [[ "${PINCTRL_SOC_MODULE}" != "${module}" ]] ; then
415 echo Delete pinctrl soc module: ${module}
416 sed -n "/${module}:/p" modules.dep.temp
417 sed -i "/${module}:/d" modules.dep.temp
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800418 delete_pinctrl_soc_modules=(${delete_pinctrl_soc_modules[@]} ${module})
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800419 fi
420 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800421 echo delete_pinctrl_soc_modules=${delete_pinctrl_soc_modules[*]}
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800422 fi
423
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800424 in_line_i=a
425 delete_type_modules=()
426 echo "TYPE_MODULE_SELECT_MODULE=${TYPE_MODULE_SELECT_MODULE}"
427 mkdir temp_dir
428 cd temp_dir
429 in_temp_dir=y
430 for element in ${TYPE_MODULE_SELECT_MODULE}; do
431 if [[ ${in_temp_dir} = y ]]; then
432 cd ../
433 rm -r temp_dir
434 in_temp_dir=
435 fi
436 if [[ ${in_line_i} = a ]]; then
437 in_line_i=b
438 type_module=${element}
439 select_modules_i=0
440 select_modules_count=
441 select_modules=
442 elif [[ ${in_line_i} = b ]]; then
443 in_line_i=c
444 select_modules_count=${element}
445 else
446 let select_modules_i+=1
447 select_modules="${select_modules} ${element}"
448 if [[ ${select_modules_i} -eq ${select_modules_count} ]]; then
449 in_line_i=a
450 echo type_module=$type_module select_modules=$select_modules
451 for module in `ls ${type_module}`; do
452 dont_delete_module=0
453 for select_module in ${select_modules}; do
454 if [[ "${select_module}" == "${module}" ]] ; then
455 dont_delete_module=1
456 break;
457 fi
458 done
459 if [[ ${dont_delete_module} != 1 ]]; then
460 echo Delete module: ${module}
461 sed -n "/${module}:/p" modules.dep.temp
462 sed -i "/${module}:/d" modules.dep.temp
463 delete_type_modules=(${delete_type_modules[@]} ${module})
464 fi
465 done
466 echo delete_type_modules=${delete_type_modules[*]}
467 fi
468 fi
469 done
470 if [[ -n ${in_temp_dir} ]]; then
471 cd ../
472 rm -r temp_dir
473 fi
474
475 black_modules=()
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800476 mkdir service_module
477 echo MODULES_SERVICE_LOAD_LIST=${MODULES_SERVICE_LOAD_LIST[@]}
478 BLACK_AND_SERVICE_LIST=(${MODULES_LOAD_BLACK_LIST[@]} ${MODULES_SERVICE_LOAD_LIST[@]})
479 echo ${BLACK_AND_SERVICE_LIST[@]}
480 for module in ${BLACK_AND_SERVICE_LIST[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800481 modules=`ls ${module}*`
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800482 black_modules=(${black_modules[@]} ${modules[@]})
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800483 done
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800484 if [[ ${#black_modules[@]} == 0 ]]; then
485 echo "black_modules is null, don't delete modules, MODULES_LOAD_BLACK_LIST=${MODULES_LOAD_BLACK_LIST[*]}"
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800486 else
Wanwei Jiangba4a8f42022-12-18 18:05:38 +0800487 echo black_modules=${black_modules[*]}
488 for module in ${black_modules[@]}; do
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800489 echo Delete module: ${module}
490 sed -n "/${module}:/p" modules.dep.temp
491 sed -i "/${module}:/d" modules.dep.temp
492 done
493 fi
494
Wanwei Jiang475245b2023-05-10 21:06:52 +0800495 GKI_MODULES_LOAD_BLACK_LIST=()
496 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
497 gki_modules_temp_file=`mktemp /tmp/config.XXXXXXXXXXXX`
qinglin.lieafebcf2023-06-27 12:48:22 +0800498 if [[ ${BAZEL} == "1" ]]; then
499 cp $DIST_DIR/system_dlkm.modules.load ${gki_modules_temp_file}
500 else
501 rm -f ${gki_modules_temp_file}
502 cat ${ROOT_DIR}/${KERNEL_DIR}/modules.bzl |grep ko | while read LINE
503 do
504 echo $LINE | sed 's/^[^"]*"//' | sed 's/".*$//' >> ${gki_modules_temp_file}
505 done
506 fi
Wanwei Jiang475245b2023-05-10 21:06:52 +0800507
508 for module in ${GKI_MODULES_LOAD_WHITE_LIST[@]}; do
509 sed -i "/\/${module}/d" ${gki_modules_temp_file}
510 done
511
512 for module in `cat ${gki_modules_temp_file}`; do
513 module=${module##*/}
514 GKI_MODULES_LOAD_BLACK_LIST[${#GKI_MODULES_LOAD_BLACK_LIST[*]}]=${module}
515 done
516 rm -f ${gki_modules_temp_file}
517
518 for module in ${GKI_MODULES_LOAD_BLACK_LIST[@]}; do
519 echo Delete module: ${module}
520 sed -n "/${module}:/p" modules.dep.temp
521 sed -i "/${module}:/d" modules.dep.temp
522 done
523 fi
524
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800525 cat modules.dep.temp | cut -d ':' -f 2 > modules.dep.temp1
Wanwei Jiang475245b2023-05-10 21:06:52 +0800526 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 +0800527 for module in ${delete_modules[@]}; do
Wanwei Jiang5b00e512022-11-05 16:53:13 +0800528 if [[ ! `ls $module` ]]; then
529 continue
530 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800531 match=`sed -n "/${module}/=" modules.dep.temp1`
532 for match in ${match[@]}; do
533 match_count=(${match_count[@]} $match)
534 done
535 if [[ ${#match_count[@]} != 0 ]]; then
536 echo "Error ${#match_count[@]} modules depend on ${module}, please modify:"
wanwei.jiang50759e12022-03-24 12:36:17 +0800537 echo ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list:MODULES_LOAD_BLACK_LIST
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800538 exit
539 fi
Dezhen Wang45dfcb02023-02-13 17:41:44 +0800540 if [[ -n ${ANDROID_PROJECT} ]]; then
541 for service_module_temp in ${MODULES_SERVICE_LOAD_LIST[@]}; do
542 if [[ ${module} = ${service_module_temp} ]]; then
543 mv ${module} service_module
544 fi
545 done
546 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800547 rm -f ${module}
548 done
549 rm -f modules.dep.temp1
wanwei.jiangb12abc82021-12-25 22:17:10 +0800550 touch modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800551
552 for module in ${RAMDISK_MODULES_LOAD_LIST[@]}; do
553 echo RAMDISK_MODULES_LOAD_LIST: $module
wanwei.jiangb12abc82021-12-25 22:17:10 +0800554 sed -n "/${module}:/p" modules.dep.temp
555 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
556 sed -i "/${module}:/d" modules.dep.temp
557 sed -n "/${module}.*\.ko:/p" modules.dep.temp
558 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
559 sed -i "/${module}.*\.ko:/d" modules.dep.temp
560 done
561
Wanwei Jiang571dde62022-11-17 14:37:41 +0800562 if [[ -n ${ANDROID_PROJECT} ]]; then
563 cp modules.dep.temp modules_recovery.dep.temp
564 cp modules.dep.temp1 modules_recovery.dep.temp1
565 fi
566
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800567 for module in ${VENDOR_MODULES_LOAD_FIRST_LIST[@]}; do
568 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
569 sed -n "/${module}:/p" modules.dep.temp
570 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp1
571 sed -i "/${module}:/d" modules.dep.temp
572 sed -n "/${module}.*\.ko:/p" modules.dep.temp
573 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp1
574 sed -i "/${module}.*\.ko:/d" modules.dep.temp
wanwei.jiangb12abc82021-12-25 22:17:10 +0800575 done
576
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800577 if [ -f modules.dep.temp2 ]; then
578 rm modules.dep.temp2
579 fi
580 touch modules.dep.temp2
581 for module in ${VENDOR_MODULES_LOAD_LAST_LIST[@]}; do
582 echo VENDOR_MODULES_LOAD_FIRST_LIST: $module
583 sed -n "/${module}:/p" modules.dep.temp
584 sed -n "/${module}:/p" modules.dep.temp >> modules.dep.temp2
585 sed -i "/${module}:/d" modules.dep.temp
586 sed -n "/${module}.*\.ko:/p" modules.dep.temp
587 sed -n "/${module}.*\.ko:/p" modules.dep.temp >> modules.dep.temp2
588 sed -i "/${module}.*\.ko:/d" modules.dep.temp
589 done
590
591 cat modules.dep.temp >> modules.dep.temp1
592 cat modules.dep.temp2 >> modules.dep.temp1
593
wanwei.jiangb12abc82021-12-25 22:17:10 +0800594 cp modules.dep.temp1 modules.dep
595 rm modules.dep.temp
596 rm modules.dep.temp1
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800597 rm modules.dep.temp2
Wanwei Jiang571dde62022-11-17 14:37:41 +0800598
599 if [[ -n ${ANDROID_PROJECT} ]]; then
600 for module in ${RECOVERY_MODULES_LOAD_LIST[@]}; do
601 echo RECOVERY_MODULES_LOAD_LIST: $module
602 sed -n "/${module}:/p" modules_recovery.dep.temp
603 sed -n "/${module}:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
604 sed -i "/${module}:/d" modules_recovery.dep.temp
605 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp
606 sed -n "/${module}.*\.ko:/p" modules_recovery.dep.temp >> modules_recovery.dep.temp1
607 sed -i "/${module}.*\.ko:/d" modules_recovery.dep.temp
608 done
609
610 cat modules_recovery.dep.temp >> modules_recovery.dep.temp1
611
612 cp modules_recovery.dep.temp1 modules_recovery.dep
613 rm modules_recovery.dep.temp
614 rm modules_recovery.dep.temp1
615 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800616}
617
Wanwei Jiang571dde62022-11-17 14:37:41 +0800618create_ramdisk_vendor_recovery() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800619 install_temp=$1
Wanwei Jiang571dde62022-11-17 14:37:41 +0800620 if [[ -n ${ANDROID_PROJECT} ]]; then
621 recovery_install_temp=$2
622 fi
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800623 source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/modules_sequence_list
Wanwei Jiang9173e462022-09-29 00:58:33 +0800624 ramdisk_module_i=${#RAMDISK_MODULES_LOAD_LIST[@]}
625 while [ ${ramdisk_module_i} -gt 0 ]; do
626 let ramdisk_module_i--
627 echo ramdisk_module_i=$ramdisk_module_i ${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
628 if [[ `grep "${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}" ${install_temp}` ]]; then
629 last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${ramdisk_module_i}]}
630 break;
631 fi
632 done
633 # last_ramdisk_module=${RAMDISK_MODULES_LOAD_LIST[${#RAMDISK_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800634 if [[ -n ${last_ramdisk_module} ]]; then
635 last_ramdisk_module_line=`sed -n "/${last_ramdisk_module}/=" ${install_temp}`
636 for line in ${last_ramdisk_module_line}; do
637 ramdisk_last_line=${line}
638 done
639 else
640 ramdisk_last_line=1
641 fi
wanwei.jiangf73b2202022-07-23 16:00:44 +0800642 export ramdisk_last_line
Wanwei Jiang571dde62022-11-17 14:37:41 +0800643
644 if [[ -n ${ANDROID_PROJECT} ]]; then
645 recovery_module_i=${#RECOVERY_MODULES_LOAD_LIST[@]}
qinglin.lidba324f2023-03-02 19:56:21 +0800646 #when RECOVERY_MODULES_LOAD_LIST is NULL
647 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -eq 0 ]; then
648 last_recovery_module=${last_ramdisk_module}
649 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800650 while [ ${recovery_module_i} -gt 0 ]; do
651 let recovery_module_i--
652 echo recovery_module_i=$recovery_module_i ${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
653 if [[ `grep "${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}" ${recovery_install_temp}` ]]; then
654 last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${recovery_module_i}]}
655 break;
656 fi
657 done
658 # last_recovery_module=${RECOVERY_MODULES_LOAD_LIST[${#RECOVERY_MODULES_LOAD_LIST[@]}-1]}
qinglin.libce54712023-05-08 13:56:31 +0800659 if [[ -n ${last_recovery_module} ]]; then
660 last_recovery_module_line=`sed -n "/${last_recovery_module}/=" ${recovery_install_temp}`
661 for line in ${last_recovery_module_line}; do
662 recovery_last_line=${line}
663 done
664 else
665 recovery_last_line=1
666 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800667 sed -n "${ramdisk_last_line},${recovery_last_line}p" ${recovery_install_temp} > recovery_install.sh
qinglin.libce54712023-05-08 13:56:31 +0800668 if [[ -n ${last_ramdisk_module} ]]; then
669 sed -i "1d" recovery_install.sh
670 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800671 mkdir recovery
672 cat recovery_install.sh | cut -d ' ' -f 2 > recovery/recovery_modules.order
qinglin.lidba324f2023-03-02 19:56:21 +0800673 if [ ${#RECOVERY_MODULES_LOAD_LIST[@]} -ne 0 ]; then
674 cat recovery_install.sh | cut -d ' ' -f 2 | xargs cp -t recovery/
675 fi
Wanwei Jiang571dde62022-11-17 14:37:41 +0800676 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' recovery_install.sh
677 echo "echo Install recovery modules success!" >> recovery_install.sh
678 chmod 755 recovery_install.sh
679 mv recovery_install.sh recovery/
680 fi
681
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800682 head -n ${ramdisk_last_line} ${install_temp} > ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800683 mkdir ramdisk
wanwei.jiangf73b2202022-07-23 16:00:44 +0800684 cat ramdisk_install.sh | cut -d ' ' -f 2 > ramdisk/ramdisk_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800685 cat ramdisk_install.sh | cut -d ' ' -f 2 | xargs mv -t ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800686
qinglin.lie5b951e2022-06-07 16:13:44 +0800687 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' ramdisk_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800688 echo "echo Install ramdisk modules success!" >> ramdisk_install.sh
689 chmod 755 ramdisk_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800690 mv ramdisk_install.sh ramdisk/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800691
692 file_last_line=`sed -n "$=" ${install_temp}`
693 let line=${file_last_line}-${ramdisk_last_line}
694 tail -n ${line} ${install_temp} > vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800695 mkdir vendor
wanwei.jiangf73b2202022-07-23 16:00:44 +0800696 cat vendor_install.sh | cut -d ' ' -f 2 > vendor/vendor_modules.order
wanwei.jiang50759e12022-03-24 12:36:17 +0800697 cat vendor_install.sh | cut -d ' ' -f 2 | xargs mv -t vendor/
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800698
qinglin.lie5b951e2022-06-07 16:13:44 +0800699 sed -i '1s/^/#!\/bin\/sh\n\nset -x\n/' vendor_install.sh
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800700 echo "echo Install vendor modules success!" >> vendor_install.sh
701 chmod 755 vendor_install.sh
wanwei.jiang50759e12022-03-24 12:36:17 +0800702 mv vendor_install.sh vendor/
wanwei.jiangb12abc82021-12-25 22:17:10 +0800703}
704
wanwei.jiang612a8882021-11-23 17:12:23 +0800705function modules_install() {
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800706 arg1=$1
707
Wanwei Jiang2218b892023-03-17 17:31:21 +0800708 export OUT_AMLOGIC_DIR=${OUT_AMLOGIC_DIR:-$(readlink -m ${COMMON_OUT_DIR}/amlogic)}
709 echo $OUT_AMLOGIC_DIR
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800710 rm -rf ${OUT_AMLOGIC_DIR}
711 mkdir -p ${OUT_AMLOGIC_DIR}
712 mkdir -p ${OUT_AMLOGIC_DIR}/modules
713 mkdir -p ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800714 mkdir -p ${OUT_AMLOGIC_DIR}/symbols
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800715
Wanwei Jiang2218b892023-03-17 17:31:21 +0800716 if [[ ${BAZEL} == "1" ]]; then
717 local output="out/bazel/output_user_root"
718 for dir in `ls ${output}`; do
719 if [[ ${dir} =~ ^[0-9A-Fa-f]*$ ]]; then
720 digit_output=${output}/${dir}
721 break
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800722 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800723 done
724
Wanwei Jiang0df84602023-05-05 14:40:42 +0800725 while read module
726 do
Wanwei Jiang475245b2023-05-10 21:06:52 +0800727 module_name=${module##*/}
Wanwei Jiang0df84602023-05-05 14:40:42 +0800728 if [[ `echo ${module} | grep "^kernel\/"` ]]; then
729 if [[ -f ${DIST_DIR}/${module_name} ]]; then
730 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/modules
731 else
732 module=`find ${digit_output}/execroot/ -name ${module_name} | grep "amlogic"`
733 cp ${module} ${OUT_AMLOGIC_DIR}/modules
734 fi
735 elif [[ `echo ${module} | grep "^extra\/"` ]]; then
736 cp ${DIST_DIR}/${module_name} ${OUT_AMLOGIC_DIR}/ext_modules
Wanwei Jiang2218b892023-03-17 17:31:21 +0800737 else
Wanwei Jiang0df84602023-05-05 14:40:42 +0800738 echo "warning unrecognized module: ${module}"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800739 fi
Wanwei Jiang0df84602023-05-05 14:40:42 +0800740 done < ${DIST_DIR}/modules.load
Wanwei Jiang2218b892023-03-17 17:31:21 +0800741
742 dep_file=`find ${digit_output}/execroot/ -name *.dep | grep "amlogic"`
743 cp ${dep_file} ${OUT_AMLOGIC_DIR}/modules/full_modules.dep
Wanwei Jiang0df84602023-05-05 14:40:42 +0800744 grep -E "^kernel\/" ${dep_file} > ${OUT_AMLOGIC_DIR}/modules/modules.dep
Wanwei Jiang2218b892023-03-17 17:31:21 +0800745 touch ${module} ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
746 for order_file in `find ${digit_output}/execroot/ -name "modules.order.*" | grep "amlogic"`; do
747 echo "# ${order_file}" >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
748 cat ${order_file} >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
749 echo >> ${OUT_AMLOGIC_DIR}/ext_modules/ext_modules.order
750 done
751 else
752 local MODULES_ROOT_DIR=$(echo ${MODULES_STAGING_DIR}/lib/modules/*)
753 pushd ${MODULES_ROOT_DIR}
754 local common_drivers=${COMMON_DRIVERS_DIR##*/}
755 local modules_list=$(find -type f -name "*.ko")
756 for module in ${modules_list}; do
757 if [[ -n ${ANDROID_PROJECT} ]]; then # copy internal build modules
758 if [[ `echo ${module} | grep -E "\.\/kernel\/|\/${common_drivers}\/"` ]]; then
759 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
760 else
761 cp ${module} ${OUT_AMLOGIC_DIR}/ext_modules/
762 fi
763 else # copy all modules, include external modules
764 cp ${module} ${OUT_AMLOGIC_DIR}/modules/
765 fi
766 done
767
768 if [[ -n ${ANDROID_PROJECT} ]]; then # internal build modules
769 grep -E "^kernel\/|^${common_drivers}\/" modules.dep > ${OUT_AMLOGIC_DIR}/modules/modules.dep
770 else # all modules, include external modules
771 cp modules.dep ${OUT_AMLOGIC_DIR}/modules
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800772 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800773 popd
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800774 fi
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800775 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang612a8882021-11-23 17:12:23 +0800776 sed -i 's#[^ ]*/##g' modules.dep
777
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800778 adjust_sequence_modules_loading "${arg1[*]}"
wanwei.jiangb12abc82021-12-25 22:17:10 +0800779
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800780 touch __install.sh
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800781 touch modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800782 for loop in `cat modules.dep | sed 's/:.*//'`; do
783 mod_probe $loop
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800784 echo $loop >> modules.order
wanwei.jiang612a8882021-11-23 17:12:23 +0800785 echo insmod $loop >> __install.sh
786 done
787
788 cat __install.sh | awk ' {
789 if (!cnt[$2]) {
790 print $0;
791 cnt[$2]++;
792 }
793 }' > __install.sh.tmp
794
Wanwei Jiangbf119d22022-10-27 09:49:49 +0800795 cp modules.order modules.order.back
796 cut -d ' ' -f 2 __install.sh.tmp > modules.order
Wanwei Jiang571dde62022-11-17 14:37:41 +0800797
798 if [[ -n ${ANDROID_PROJECT} ]]; then
799 touch __install_recovery.sh
800 touch modules_recovery.order
801 for loop in `cat modules_recovery.dep | sed 's/:.*//'`; do
802 mod_probe_recovery $loop
803 echo $loop >> modules_recovery.order
804 echo insmod $loop >> __install_recovery.sh
805 done
806
807 cat __install_recovery.sh | awk ' {
808 if (!cnt[$2]) {
809 print $0;
810 cnt[$2]++;
811 }
812 }' > __install_recovery.sh.tmp
813
814 cut -d ' ' -f 2 __install_recovery.sh.tmp > modules_recovery.order
815 fi
816 create_ramdisk_vendor_recovery __install.sh.tmp __install_recovery.sh.tmp
wanwei.jiang0a8d6ee2022-03-23 09:36:19 +0800817
Dezhen Wang124ad7d2023-02-06 15:35:14 +0800818 if [[ -n ${MANUAL_INSMOD_MODULE} ]]; then
819 install_file=manual_install.sh
820 else
821 install_file=install.sh
822 fi
823 echo "#!/bin/sh" > ${install_file}
824 echo "cd ramdisk" >> ${install_file}
825 echo "./ramdisk_install.sh" >> ${install_file}
826 echo "cd ../vendor" >> ${install_file}
827 echo "./vendor_install.sh" >> ${install_file}
828 echo "cd ../" >> ${install_file}
829 chmod 755 ${install_file}
wanwei.jiang612a8882021-11-23 17:12:23 +0800830
831 echo "/modules/: all `wc -l modules.dep | awk '{print $1}'` modules."
Wanwei Jianga5977bd2022-08-24 22:43:40 +0800832 rm __install.sh __install.sh.tmp
wanwei.jiang612a8882021-11-23 17:12:23 +0800833
Wanwei Jiang571dde62022-11-17 14:37:41 +0800834 if [[ -n ${ANDROID_PROJECT} ]]; then
835 rm __install_recovery.sh __install_recovery.sh.tmp
836 fi
837
wanwei.jiang236e9a32021-12-07 16:34:14 +0800838 popd
Wanwei Jiangae4d7c12023-02-17 19:22:04 +0800839
Wanwei Jiang2218b892023-03-17 17:31:21 +0800840 if [[ ${BAZEL} == "1" ]]; then
841 cp ${DIST_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
842
843 find ${digit_output}/execroot -name *.ko | grep "unstripped" | while read module; do
844 cp ${module} ${OUT_AMLOGIC_DIR}/symbols
845 chmod +w ${OUT_AMLOGIC_DIR}/symbols/$(basename ${module})
846 done
847 chmod -w ${OUT_AMLOGIC_DIR}/symbols/*.ko
848 else
849 cp ${OUT_DIR}/vmlinux ${OUT_AMLOGIC_DIR}/symbols
850 find ${OUT_DIR} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
851 for ext_module in ${EXT_MODULES}; do
852 find ${COMMON_OUT_DIR}/${ext_module} -type f -name "*.ko" -exec cp {} ${OUT_AMLOGIC_DIR}/symbols \;
853 done
854 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800855}
wanwei.jiang236e9a32021-12-07 16:34:14 +0800856export -f modules_install
wanwei.jiang612a8882021-11-23 17:12:23 +0800857
Wanwei Jiang2218b892023-03-17 17:31:21 +0800858function rename_external_module_name() {
859 local external_coppied
860 local vendor_coppied
Wanwei Jiang92c89432023-05-15 23:57:16 +0800861 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 +0800862 target_module_name=`echo ${module_line%%:*} | sed '/^#/d;/^$/d'`
863 modules_name=`echo ${module_line##:*} | sed '/^#/d;/^$/d'`
864 [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name} ]] && external_coppied=1
865 [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name} ]] && vendor_coppied=1
866 echo target_module_name=$target_module_name modules_name=$modules_name external_coppied=$external_coppied vendor_coppied=$vendor_coppied
867 for module in ${modules_name}; do
868 echo module=$module
869 if [[ -f ${OUT_AMLOGIC_DIR}/ext_modules/${module} ]]; then
870 if [[ -z ${external_coppied} ]]; then
871 cp ${OUT_AMLOGIC_DIR}/ext_modules/${module} ${OUT_AMLOGIC_DIR}/ext_modules/${target_module_name}
872 external_coppied=1
873 fi
874 rm -f ${OUT_AMLOGIC_DIR}/ext_modules/${module}
875 fi
876 if [[ -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ]]; then
877 if [[ -z ${vendor_coppied} ]]; then
878 cp ${OUT_AMLOGIC_DIR}/modules/vendor/${module} ${OUT_AMLOGIC_DIR}/modules/vendor/${target_module_name}
879 vendor_coppied=1
880 fi
881 rm -f ${OUT_AMLOGIC_DIR}/modules/vendor/${module}
882 fi
883 done
884 external_coppied=
885 vendor_coppied=
886 done
887}
888export -f rename_external_module_name
889
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800890# function rebuild_rootfs can rebuild the rootfs if rootfs_base.cpio.gz.uboot exist
wanwei.jiang612a8882021-11-23 17:12:23 +0800891function rebuild_rootfs() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800892 echo
893 echo "========================================================"
894 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
895 echo "Rebuild rootfs in order to install modules!"
896 else
897 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
898 return
899 fi
900
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800901 pushd ${OUT_AMLOGIC_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800902
Lei Zhang475c17b2022-03-03 11:08:50 +0800903 local ARCH=arm64
904 if [[ -n $1 ]]; then
905 ARCH=$1
906 fi
907
wanwei.jiang612a8882021-11-23 17:12:23 +0800908 rm rootfs -rf
909 mkdir rootfs
Wanwei Jiang2218b892023-03-17 17:31:21 +0800910 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot rootfs
wanwei.jiang612a8882021-11-23 17:12:23 +0800911 cd rootfs
912 dd if=rootfs_base.cpio.gz.uboot of=rootfs_base.cpio.gz bs=64 skip=1
913 gunzip rootfs_base.cpio.gz
914 mkdir rootfs
915 cd rootfs
dongqing.li6fd83502023-06-15 09:59:40 +0800916 fakeroot cpio -i -F ../rootfs_base.cpio
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800917 if [ -d ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer ]; then
918 cp ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/customer . -rf
qinglin.li3c25dbb2022-01-14 11:23:10 +0800919 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800920 cp -rf ../../modules .
wanwei.jiang8abddcc2022-03-16 21:18:48 +0800921
dongqing.li6fd83502023-06-15 09:59:40 +0800922 find . | fakeroot cpio -o -H newc | gzip > ../rootfs_new.cpio.gz
wanwei.jiang612a8882021-11-23 17:12:23 +0800923 cd ../
Lei Zhang475c17b2022-03-03 11:08:50 +0800924 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 +0800925 mv rootfs_new.cpio.gz.uboot ../
926 cd ../
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800927 cp rootfs_new.cpio.gz.uboot ${DIST_DIR}
wanwei.jiang612a8882021-11-23 17:12:23 +0800928
929 popd
930}
931export -f rebuild_rootfs
wanwei.jiang403c9942021-11-30 18:29:02 +0800932
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800933# function check_undefined_symbol can check the dependence among the modules
934# parameter:
935# --modules_depend
wanwei.jiang403c9942021-11-30 18:29:02 +0800936function check_undefined_symbol() {
Wanwei Jiang2218b892023-03-17 17:31:21 +0800937 if [[ ${MODULES_DEPEND} != "1" ]]; then
938 return
939 fi
940
941 echo "========================================================"
942 echo "print modules depend"
943
wanwei.jiangff4dccd2022-08-14 01:14:51 +0800944 pushd ${OUT_AMLOGIC_DIR}/modules
wanwei.jiang403c9942021-11-30 18:29:02 +0800945 echo
946 echo "========================================================"
947 echo "Functions or variables not defined in this module refer to which module."
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800948 if [[ -n ${LLVM} ]]; then
949 compile_tool=${ROOT_DIR}/${CLANG_PREBUILT_BIN}/llvm-
950 elif [[ -n ${CROSS_COMPILE} ]]; then
951 compile_tool=${CROSS_COMPILE}
952 else
953 echo "can't find compile tool"
954 fi
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800955 ${compile_tool}nm ${DIST_DIR}/vmlinux | grep -E " T | D | B | R | W "> vmlinux_T.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800956 # cat __install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
957 cat ramdisk/ramdisk_install.sh | grep "insmod" | cut -d ' ' -f 2 > module_list.txt
958 cat vendor/vendor_install.sh | grep "insmod" | cut -d ' ' -f 2 >> module_list.txt
959 cp ramdisk/*.ko .
960 cp vendor/*.ko .
wanwei.jiang403c9942021-11-30 18:29:02 +0800961 while read LINE
962 do
963 echo ${LINE}
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800964 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 +0800965 do
966 #echo ${U}
967 U_v=`grep -w ${U} vmlinux_T.txt`
968 in_vmlinux=0
969 if [ -n "${U_v}" ];
970 then
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800971 #printf "\t%-50s <== vmlinux\n" ${U}
wanwei.jiang403c9942021-11-30 18:29:02 +0800972 in_vmlinux=1
973 continue
974 fi
975 in_module=0
976 MODULE=
977 while read LINE1
978 do
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800979 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 +0800980 if [ -n "${U_m}" ];
981 then
982 in_module=1
983 MODULE=${LINE1}
984 fi
985 done < module_list.txt
986 if [ ${in_module} -eq "1" ];
987 then
988 printf "\t%-50s <== %s\n" ${U} ${MODULE}
989 continue
990 else
991 printf "\t%-50s <== none\n" ${U}
992 fi
993 done
994 echo
995 echo
996 done < module_list.txt
997 rm vmlinux_T.txt
998 rm module_list.txt
wanwei.jiang2c818dc2022-03-24 17:48:00 +0800999 rm *.ko
wanwei.jiang403c9942021-11-30 18:29:02 +08001000 popd
1001}
1002export -f check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +08001003
1004function reorganized_abi_symbol_list_file() { # delete the extra information but symbol
1005 cat $@ | sed '/^$/d' >> ${symbol_tmp} # remove blank lines
1006 sed -i '/^\[/d' ${symbol_tmp} # remove the title
1007 sed -i '/^\#/d' ${symbol_tmp} # remove the comment
1008}
1009export -f reorganized_abi_symbol_list_file
1010
1011function abi_symbol_list_detect () { # detect symbol information that should be submitted or fix
Dezhen Wang3e94b292023-07-10 20:14:57 +08001012 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1013 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic
1014 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.10
1015 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.debug
1016 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/abi_gki_aarch64_amlogic.illegal
1017 else
1018 symbol_file1=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic
1019 symbol_file2=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10
1020 symbol_file3=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug
1021 symbol_file4=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal
1022 fi
Dezhen Wangd40fa552023-04-11 16:13:27 +08001023
1024 file_list=("${symbol_file1} ${symbol_file2} ${symbol_file3} ${symbol_file4}")
1025 for file in ${file_list}
1026 do
1027 local symbol_tmp=`mktemp tmp.XXXXXXXXXXXX`
1028 reorganized_abi_symbol_list_file "${file}"
1029
1030 if [[ -s ${symbol_tmp} ]]; then
1031 if [[ ${file} =~ abi_gki_aarch64_amlogic.illegal ]]; then
1032 echo "WARNING: The symbols in ${file} are illegal, please deal with them as soon as possible!!!"
1033 else
1034 echo "WARNING: The symbols in ${file} should be submit to google!!!"
1035 fi
1036 cat ${symbol_tmp}
1037 echo -e "\n------------------------------------------------------------"
1038 fi
1039 rm ${symbol_tmp}
1040 done
1041}
1042export -f abi_symbol_list_detect
1043
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001044# adjust_config_action concerns three types of cmd:
1045# parameters:
1046# --menuconfig: make menuconfig manually based on different gki standard
1047# --basicconfig: only config kernel with google original gki_defconfig as base
1048# --check_defconfig: contrast the defconfig generated in out directory with gki_defconfig and show the difference
1049function adjust_config_action () {
1050 if [[ -n ${MENUCONFIG} ]] || [[ -n ${BASICCONFIG} ]] || [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then
1051 # ${ROOT_DIR}/${BUILD_DIR}/config.sh menuconfig
1052 HERMETIC_TOOLCHAIN=0
Dezhen Wang2edb5232023-07-06 14:15:33 +08001053
1054 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1055 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1056 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1057 else
1058 source ${ROOT_DIR}/${BUILD_CONFIG}
1059 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1060 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1061 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001062
1063 orig_config=$(mktemp)
1064 orig_defconfig=$(mktemp)
1065 out_config="${OUT_DIR}/.config"
1066 out_defconfig="${OUT_DIR}/defconfig"
1067 changed_config=$(mktemp)
1068 changed_defconfig=$(mktemp)
1069
1070 if [[ -n ${BASICCONFIG} ]]; then # config kernel with gki_defconfig or make menuconfig based on it
1071 set -x
1072 defconfig_name=`basename ${GKI_BASE_CONFIG}`
1073 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${defconfig_name})
1074 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1075 cp ${out_config} ${orig_config}
1076 cp ${out_defconfig} ${orig_defconfig}
1077 if [ "${BASICCONFIG}" = "m" ]; then # make menuconfig based on gki_defconfig
1078 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1079 fi
1080 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1081 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1082 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1083 if [ "${ARCH}" = "arm" ]; then
1084 cp ${out_defconfig} ${GKI_BASE_CONFIG}
1085 fi
1086 set +x # show the difference between the gki_defconfig and the config after make menuconfig
1087 echo
1088 echo "========================================================"
1089 echo "==================== .config diff ===================="
1090 cat ${changed_config}
1091 echo "==================== defconfig diff ===================="
1092 cat ${changed_defconfig}
1093 echo "========================================================"
1094 echo
1095 elif [[ ${CHECK_DEFCONFIG} -eq "1" ]]; then # compare the defconfig generated in out directory with gki_defconfig
1096 set -x
1097 pre_defconfig_cmds
1098 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1099 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig) # export the defconfig to out directory
1100 diff -u ${ROOT_DIR}/${GKI_BASE_CONFIG} ${OUT_DIR}/defconfig
1101 post_defconfig_cmds
1102 set +x
1103 else # make menuconfig based on config with different gki standard
1104 set -x
1105 pre_defconfig_cmds
1106 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1107 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1108 cp ${out_config} ${orig_config}
1109 cp ${out_defconfig} ${orig_defconfig}
1110 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
1111 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
1112 ${KERNEL_DIR}/scripts/diffconfig ${orig_config} ${out_config} > ${changed_config}
1113 ${KERNEL_DIR}/scripts/diffconfig ${orig_defconfig} ${out_defconfig} > ${changed_defconfig}
1114 post_defconfig_cmds
1115 set +x
1116 echo
1117 echo "========================================================"
1118 echo "if the config follows GKI2.0, please add it to the file amlogic_gki.fragment manually"
1119 echo "if the config follows GKI1.0 optimize, please add it to the file amlogic_gki.10 manually"
1120 echo "if the config follows GKI1.0 debug, please add it to the file amlogic_gki.debug manually"
1121 echo "==================== .config diff ===================="
1122 cat ${changed_config}
1123 echo "==================== defconfig diff ===================="
1124 cat ${changed_defconfig}
1125 echo "========================================================"
1126 echo
1127 fi
1128 rm -f ${orig_config} ${changed_config} ${orig_defconfig} ${changed_defconfig}
1129 exit
1130 fi
1131}
1132export -f adjust_config_action
1133
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001134if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" ]]; then
1135 function rel_path() {
1136 echo "WARNING: rel_path is deprecated. For Kleaf builds, use 'realpath $1 --relative-to $2' instead." >&2
1137 ${ROOT_DIR}/build/kernel/build-tools/path/linux-x86/realpath "$1" --relative-to="$2"
1138 }
1139fi
1140
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001141# function build_part_of_kernel can only build part of kernel such as image modules or dtbs
1142# parameter:
1143# --image: only build image
1144# --modules: only build kernel modules
1145# --dtbs: only build dtbs
1146function build_part_of_kernel () {
1147 if [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
1148 old_path=${PATH}
Dezhen Wangc5c95c32023-07-09 23:14:12 +08001149 if [[ "${FULL_KERNEL_VERSION}" = "common13-5.15" ]]; then
1150 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
1151 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
1152 else
1153 source ${ROOT_DIR}/${BUILD_CONFIG}
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 tool_args+=("LLVM=1")
1158 tool_args+=("DEPMOD=${DEPMOD}")
1159 fi
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001160
1161 if [[ ! -f ${OUT_DIR}/.config ]]; then
1162 pre_defconfig_cmds
1163 set -x
1164 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
1165 set +x
1166 post_defconfig_cmds
1167 fi
1168
1169 if [[ -n ${IMAGE} ]]; then
1170 set -x
1171 if [ "${ARCH}" = "arm64" ]; then
1172 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
1173 elif [ "${ARCH}" = "arm" ]; then
1174 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) LOADADDR=0x108000 uImage)
1175 fi
1176 set +x
1177 fi
1178 mkdir -p ${DIST_DIR}
1179 if [[ -n ${DTB_BUILD} ]]; then
1180 set -x
1181 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
1182 set +x
1183 fi
1184 if [[ -n ${MODULES} ]]; then
1185 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1186 rm -rf ${MODULES_STAGING_DIR}
1187 mkdir -p ${MODULES_STAGING_DIR}
1188 if [ "${DO_NOT_STRIP_MODULES}" != "1" ]; then
1189 MODULE_STRIP_FLAG="INSTALL_MOD_STRIP=1"
1190 fi
1191 if [[ `grep "CONFIG_AMLOGIC_IN_KERNEL_MODULES=y" ${ROOT_DIR}/${FRAGMENT_CONFIG}` ]]; then
1192 set -x
1193 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
1194 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} "${MAKE_ARGS[@]}" modules_install)
1195 set +x
1196 fi
1197 echo EXT_MODULES=$EXT_MODULES
1198 prepare_module_build
1199 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
1200 echo "========================================================"
1201 echo " Building external modules and installing them into staging directory"
1202 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1203 for EXT_MOD in ${EXT_MODULES}; do
1204 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1205 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1206 set -x
1207 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1208 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
1209 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1210 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1211 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1212 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1213 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
1214 "${MAKE_ARGS[@]}" modules_install
1215 set +x
1216 done
1217 fi
1218 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1219 set -x
1220 extra_cmds
1221 set +x
1222 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1223 cp -p ${MODULES} ${DIST_DIR}
1224
1225 new_path=${PATH}
1226 PATH=${old_path}
1227 echo "========================================================"
1228 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1229 echo "Rebuild rootfs in order to install modules!"
1230 rebuild_rootfs ${ARCH}
1231 else
1232 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1233 fi
1234 PATH=${new_path}
1235 fi
1236 if [ -n "${DTS_EXT_DIR}" ]; then
1237 if [ -d "${ROOT_DIR}/${DTS_EXT_DIR}" ]; then
1238 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1239 if [ -d ${OUT_DIR}/${DTS_EXT_DIR} ]; then
1240 FILES="$FILES `ls ${OUT_DIR}/${DTS_EXT_DIR}`"
1241 fi
1242 fi
1243 fi
1244 for FILE in ${FILES}; do
1245 if [ -f ${OUT_DIR}/${FILE} ]; then
1246 echo " $FILE"
1247 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1248 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1249 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1250 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1251 echo " $FILE"
1252 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1253 else
1254 echo " $FILE is not a file, skipping"
1255 fi
1256 done
1257 exit
1258 fi
1259}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001260export -f build_part_of_kernel
1261
1262function export_env_variable () {
1263 export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG MANUAL_INSMOD_MODULE ARCH
qinglin.libce54712023-05-08 13:56:31 +08001264 export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG UPGRADE_PROJECT ANDROID_VERSION FAST_BUILD CHECK_GKI_20 DEV_CONFIGS
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001265 export FULL_KERNEL_VERSION BAZEL PREBUILT_GKI
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001266
1267 echo ROOT_DIR=$ROOT_DIR
1268 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 +08001269 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}
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001270 echo FULL_KERNEL_VERSION=${FULL_KERNEL_VERSION} BAZEL=${BAZEL} PREBUILT_GKI=${PREBUILT_GKI}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001271 echo MENUCONFIG=${MENUCONFIG} BASICCONFIG=${BASICCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
1272}
Dezhen Wang5ad119c2023-05-04 15:07:49 +08001273export -f export_env_variable
Dezhen Wang850c0d22023-05-31 19:26:20 +08001274
1275function handle_input_parameters () {
1276 VA=
1277 ARGS=()
1278 for i in "$@"
1279 do
1280 case $i in
1281 --arch)
1282 ARCH=$2
1283 VA=1
1284 shift
1285 ;;
1286 --abi)
1287 ABI=1
1288 shift
1289 ;;
1290 --build_config)
1291 BUILD_CONFIG=$2
1292 VA=1
1293 shift
1294 ;;
1295 --lto)
1296 LTO=$2
1297 VA=1
1298 shift
1299 ;;
1300 --symbol_strict)
1301 KMI_SYMBOL_LIST_STRICT_MODE=$2
1302 VA=1
1303 shift
1304 ;;
1305 --menuconfig)
1306 MENUCONFIG=1
1307 shift
1308 ;;
1309 --basicconfig)
1310 if [ "$2" = "m" ] || [ "$2" = "n" ]; then
1311 BASICCONFIG=$2
1312 else
1313 BASICCONFIG="m"
1314 fi
1315 VA=1
1316 shift
1317 ;;
1318 --image)
1319 IMAGE=1
1320 shift
1321 ;;
1322 --modules)
1323 MODULES=1
1324 shift
1325 break
1326 ;;
1327 --dtbs)
1328 DTB_BUILD=1
1329 shift
1330 ;;
1331 --build_dir)
1332 BUILD_DIR=$2
1333 VA=1
1334 shift
1335 ;;
1336 --check_defconfig)
1337 CHECK_DEFCONFIG=1
1338 shift
1339 ;;
1340 --modules_depend)
1341 MODULES_DEPEND=1
1342 shift
1343 ;;
1344 --android_project)
1345 ANDROID_PROJECT=$2
1346 VA=1
1347 shift
1348 ;;
1349 --gki_20)
1350 GKI_CONFIG=gki_20
1351 shift
1352 ;;
1353 --gki_10)
1354 GKI_CONFIG=gki_10
1355 shift
1356 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001357 --fast_build)
1358 FAST_BUILD=1
1359 shift
1360 ;;
1361 --upgrade)
1362 UPGRADE_PROJECT=1
1363 ANDROID_VERSION=$2
1364 VA=1
1365 shift
1366 ;;
1367 --manual_insmod_module)
1368 MANUAL_INSMOD_MODULE=1
1369 shift
1370 ;;
Dezhen Wang850c0d22023-05-31 19:26:20 +08001371 --check_gki_20)
1372 CHECK_GKI_20=1
1373 GKI_CONFIG=gki_20
1374 LTO=none
1375 shift
1376 ;;
1377 --dev_config)
1378 DEV_CONFIGS=$2
1379 VA=1
1380 shift
1381 ;;
Wanwei Jiang0a519f62023-06-30 16:56:28 +08001382 --use_prebuilt_gki)
1383 PREBUILT_GKI=$2
1384 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001385 shift
1386 ;;
1387 -h|--help)
1388 show_help
1389 exit 0
1390 ;;
1391 *)
1392 if [[ -n $1 ]];
1393 then
1394 if [[ -z ${VA} ]];
1395 then
1396 ARGS+=("$1")
1397 fi
1398 fi
1399 VA=
1400 shift
1401 ;;
1402 esac
1403 done
1404}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001405export -f handle_input_parameters
1406
1407function set_default_parameters () {
1408 if [ "${ARCH}" = "arm" ]; then
1409 ARGS+=("LOADADDR=0x108000")
1410 else
1411 ARCH=arm64
1412 fi
1413
1414 if [[ -z "${ABI}" ]]; then
1415 ABI=0
1416 fi
1417 if [[ -z "${LTO}" ]]; then
1418 LTO=thin
1419 fi
1420 if [[ -n ${CHECK_GKI_20} && -z ${ANDROID_PROJECT} ]]; then
1421 ANDROID_PROJECT=ohm
1422 fi
1423
1424 if [[ -z "${BUILD_CONFIG}" ]]; then
1425 if [ "${ARCH}" = "arm64" ]; then
1426 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
1427 elif [ "${ARCH}" = "arm" ]; then
1428 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
1429 fi
1430 fi
1431 if [[ -z "${BUILD_DIR}" ]]; then
1432 BUILD_DIR=build
1433 fi
1434
1435 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1436 version_message="common${version_message##*android}"
1437 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1438 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1439 echo "kernel version is not match!!"
1440 exit
1441 fi
1442 else
1443 FULL_KERNEL_VERSION=${version_message}
1444 fi
1445
1446 if [[ -z ${BAZEL} ]]; then
Dezhen Wang20069292023-06-20 14:51:21 +08001447 [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" == "arm64" && -z ${UPGRADE_PROJECT} ]] && BAZEL=1
Dezhen Wang850c0d22023-05-31 19:26:20 +08001448 fi
1449
1450 auto_patch_to_common_dir
1451
qinglin.lieafebcf2023-06-27 12:48:22 +08001452 if [[ ! -f ${BUILD_DIR}/build_abi.sh && ${BAZEL} == 0 ]]; then
Dezhen Wang850c0d22023-05-31 19:26:20 +08001453 echo "The directory of build does not exist";
1454 exit
1455 fi
1456
1457 ROOT_DIR=$(readlink -f $(dirname $0))
1458 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1459 ROOT_DIR=`pwd`
1460 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
1461 echo "the file path of $0 is incorrect"
1462 exit
1463 fi
1464 fi
1465 export ROOT_DIR
1466
1467 CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
1468 MODULES_DEPEND=${MODULES_DEPEND:-0}
1469 if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
1470 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
1471 RM_KERNEL_BUILD_VAR_FILE=1
1472 fi
1473
Dezhen Wang850c0d22023-05-31 19:26:20 +08001474 export CROSS_COMPILE=
1475
1476 if [ "${ABI}" -eq "1" ]; then
1477 export OUT_DIR_SUFFIX="_abi"
1478 else
1479 OUT_DIR_SUFFIX=
1480 fi
1481}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001482export -f set_default_parameters
1483
1484function auto_patch_to_common_dir () {
1485 #first auto patch when param parse end
Dezhen Wang850c0d22023-05-31 19:26:20 +08001486
1487 if [[ -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ]]; then
1488 export PATCH_PARM
1489 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/auto_patch/auto_patch.sh ${FULL_KERNEL_VERSION}
Dezhen Wang4e608102023-07-05 18:55:30 +08001490 if [[ $? -ne 0 ]]; then
1491 echo "auto patch error!"
1492 exit 1
1493 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001494 fi
1495
1496 if [[ ${ONLY_PATCH} -eq "1" ]]; then
1497 cd ${CURRENT_DIR}
1498 exit
1499 fi
1500}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001501export -f auto_patch_to_common_dir
1502
Dezhen Wang850c0d22023-05-31 19:26:20 +08001503function handle_input_parameters_for_smarthome () {
1504 VA=
1505 ARGS=()
1506 for i in "$@"
1507 do
1508 case $i in
1509 --savedefconfig)
1510 SAVEDEFCONFIG=1
1511 shift
1512 ;;
1513 --menuconfig)
1514 MENUCONFIG=1
1515 shift
1516 ;;
1517 --dtb)
1518 DTB=1
1519 shift
1520 ;;
1521 --manual_insmod_module)
1522 MANUAL_INSMOD_MODULE=1
1523 shift
1524 ;;
1525 --patch)
1526 ONLY_PATCH=1
1527 shift
1528 ;;
1529 -h|--help)
1530 show_help
1531 exit 0
1532 ;;
1533 *)
1534 if [[ -n $1 ]];
1535 then
1536 if [[ -z ${VA} ]];
1537 then
1538 ARGS+=("$1")
1539 fi
1540 fi
1541 VA=
1542 shift
1543 ;;
1544 esac
1545 done
1546}
1547
1548export -f handle_input_parameters_for_smarthome
1549
1550function set_default_parameters_for_smarthome () {
1551 version_message=$(grep -rn BRANCH= ${KERNEL_DIR}/build.config.constants)
1552 version_message="common${version_message##*android}"
1553 if [[ -n ${FULL_KERNEL_VERSION} ]]; then
1554 if [[ "${FULL_KERNEL_VERSION}" != "${version_message}" ]]; then
1555 echo "kernel version is not match!!"
1556 exit
1557 fi
1558 else
1559 FULL_KERNEL_VERSION=${version_message}
1560 fi
1561
1562 tool_args=()
1563 prebuilts_paths=(
1564 CLANG_PREBUILT_BIN
1565 #BUILDTOOLS_PREBUILT_BIN
1566 )
1567 echo CC_CLANG=$CC_CLANG
1568 if [[ $CC_CLANG -eq "1" ]]; then
1569 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1570 if [[ -n "${LLVM}" ]]; then
1571 tool_args+=("LLVM=1")
1572 fi
1573 #if [ -n "${DTC}" ]; then
1574 # tool_args+=("DTC=${DTC}")
1575 #fi
1576 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1577 prebuilt_bin=\${${prebuilt_bin}}
1578 eval prebuilt_bin="${prebuilt_bin}"
1579 if [ -n "${prebuilt_bin}" ]; then
1580 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1581 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1582 fi
1583 done
1584 export PATH
1585 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1586 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1587 fi
1588
1589 if [[ $ARCH == arm64 ]]; then
1590 OUTDIR=${ROOT_DIR}/out/kernel-5.15-64
1591 elif [[ $ARCH == arm ]]; then
1592 OUTDIR=${ROOT_DIR}/out/kernel-5.15-32
Dezhen Wang1176fad2023-06-09 11:22:17 +08001593 tool_args+=("LOADADDR=0x108000")
Dezhen Wang850c0d22023-05-31 19:26:20 +08001594 elif [[ $ARCH == riscv ]]; then
1595 OUTDIR=${ROOT_DIR}/out/riscv-kernel-5.15-64
1596 fi
1597 TOOL_ARGS="${tool_args[@]}"
1598
1599 OUT_DIR=${OUTDIR}/common
1600 mkdir -p ${OUT_DIR}
1601 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1602 rm -rf ${OUTDIR}
1603 fi
1604
1605 echo "========================================================"
1606 echo ""
1607 export DIST_DIR=$(readlink -m ${OUTDIR}/dist)
1608 export MODULES_STAGING_DIR=$(readlink -m ${OUTDIR}/staging)
1609 export OUT_AMLOGIC_DIR=$(readlink -m ${OUTDIR}/amlogic)
1610 echo OUTDIR=$OUTDIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
1611
1612
1613 source ${ROOT_DIR}/build/kernel/build_utils.sh
1614
1615 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1616 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1617 export dtstree=${DTS_EXT_DIR}
1618 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1619
1620 EXT_MODULES="
1621 ${EXT_MODULES}
1622 "
1623
1624 EXT_MODULES_CONFIG="
1625 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1626 "
1627
1628 EXT_MODULES_PATH="
1629 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1630 "
1631
1632 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1633 EXTRA_CMDS="extra_cmds"
1634
1635 IN_KERNEL_MODULES=1
1636}
1637
1638export -f set_default_parameters_for_smarthome
1639
1640function savedefconfig_cmd_for_smarthome () {
1641 if [[ -n ${SAVEDEFCONFIG} ]]; then
1642 set -x
1643 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1644 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} savedefconfig
Dezhen Wang1176fad2023-06-09 11:22:17 +08001645 rm ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001646 cp -f ${OUT_DIR}/defconfig ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${DEFCONFIG}
1647 set +x
1648 exit
1649 fi
1650}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001651export -f savedefconfig_cmd_for_smarthome
1652
1653function only_build_dtb_for_smarthome () {
1654 if [[ -n ${DTB} ]]; then
1655 set -x
1656 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1657 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs || exit
1658 set +x
1659 exit
1660 fi
1661}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001662export -f only_build_dtb_for_smarthome
1663
1664function make_menuconfig_cmd_for_smarthome () {
1665 if [[ -n ${MENUCONFIG} ]]; then
1666 set -x
1667 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${DEFCONFIG}
1668 make ARCH=${ARCH} -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} menuconfig
1669 set +x
1670 exit
1671 fi
1672}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001673export -f make_menuconfig_cmd_for_smarthome
1674
1675function build_kernel_for_different_cpu_architecture () {
1676 set -x
1677 if [[ $ARCH == arm64 ]]; then
1678 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1679 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1680 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1681 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1682 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 &&
1683 make ARCH=arm64 -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001684 elif [[ $ARCH == arm ]]; then
1685 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1686 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1687 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} uImage -j12 &&
1688 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1689 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 &&
1690 make ARCH=arm -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001691 elif [[ $ARCH == riscv ]]; then
1692 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} ${DEFCONFIG}
1693 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} headers_install &&
1694 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} Image -j12 &&
1695 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} modules -j12 &&
1696 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} INSTALL_MOD_PATH=${MODULES_STAGING_DIR} modules_install -j12 &&
1697 make ARCH=riscv -C ${ROOT_DIR}/${KERNEL_DIR} O=${OUT_DIR} ${TOOL_ARGS} dtbs -j12 || exit
Dezhen Wang850c0d22023-05-31 19:26:20 +08001698 fi
1699 cp ${OUT_DIR}/arch/${ARCH}/boot/Image* ${DIST_DIR}
1700 cp ${OUT_DIR}/arch/${ARCH}/boot/uImage* ${DIST_DIR}
1701 cp ${OUT_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/*.dtb ${DIST_DIR}
1702 cp ${OUT_DIR}/vmlinux ${DIST_DIR}
1703 set +x
1704}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001705export -f build_kernel_for_different_cpu_architecture
1706
1707function build_ext_modules() {
1708 for EXT_MOD in ${EXT_MODULES}; do
1709 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
1710 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
1711
1712 set -x
1713 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1714 O=${OUT_DIR} ${TOOL_ARGS} -j12 || exit
1715 make ARCH=${ARCH} -C ${ROOT_DIR}/${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
1716 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
1717 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
1718 INSTALL_MOD_DIR="extra/${EXT_MOD}" \
1719 INSTALL_MOD_STRIP=1 \
1720 modules_install -j12 || exit
1721 set +x
1722 done
1723}
Dezhen Wang850c0d22023-05-31 19:26:20 +08001724export -f build_ext_modules
1725
1726function copy_modules_and_rebuild_rootfs_for_smarthome () {
Dezhen Wang1176fad2023-06-09 11:22:17 +08001727
1728 copy_modules_files_to_dist_dir
1729
1730 if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
1731 echo "========================================================"
1732 echo "Rebuild rootfs in order to install modules!"
1733 rebuild_rootfs ${ARCH}
1734 echo "Build success!"
1735 else
1736 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
1737 fi
1738}
1739export -f copy_modules_and_rebuild_rootfs_for_smarthome
1740
1741function copy_modules_files_to_dist_dir () {
Dezhen Wang850c0d22023-05-31 19:26:20 +08001742 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
1743 if [ -n "${MODULES}" ]; then
1744 if [ -n "${IN_KERNEL_MODULES}" -o -n "${EXT_MODULES}" -o -n "${EXT_MODULES_MAKEFILE}" ]; then
1745 echo "========================================================"
1746 echo " Copying modules files"
1747 for module in ${MODULES}; do
1748 cp ${module} ${DIST_DIR}
1749 done
1750 if [ "${COMPRESS_MODULES}" = "1" ]; then
1751 echo " Archiving modules to ${MODULES_ARCHIVE}"
1752 tar --transform="s,.*/,," -czf ${DIST_DIR}/${MODULES_ARCHIVE} ${MODULES[@]}
1753 fi
1754 fi
Dezhen Wang850c0d22023-05-31 19:26:20 +08001755 fi
1756}
Dezhen Wang1176fad2023-06-09 11:22:17 +08001757export -f copy_modules_files_to_dist_dir
Dezhen Wang850c0d22023-05-31 19:26:20 +08001758
Dezhen Wang1176fad2023-06-09 11:22:17 +08001759function copy_files_to_dist_dir () {
1760 echo "========================================================"
1761 echo " Copying files"
1762 for FILE in ${FILES}; do
1763 if [ -f ${OUT_DIR}/${FILE} ]; then
1764 echo " $FILE"
1765 cp -p ${OUT_DIR}/${FILE} ${DIST_DIR}/
1766 elif [[ "${FILE}" =~ \.dtb|\.dtbo ]] && \
1767 [ -n "${DTS_EXT_DIR}" ] && [ -f "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" ] ; then
1768 # DTS_EXT_DIR is recalculated before to be relative to KERNEL_DIR
1769 echo " $FILE"
1770 cp -p "${OUT_DIR}/${DTS_EXT_DIR}/${FILE}" "${DIST_DIR}/"
1771 else
1772 echo " $FILE is not a file, skipping"
1773 fi
1774 done
1775}
1776export -f copy_files_to_dist_dir
1777
1778function make_dtbo() {
1779 if [[ -n "${BUILD_DTBO_IMG}" ]]; then
1780 echo "========================================================"
1781 echo " Creating dtbo image at ${DIST_DIR}/dtbo.img"
1782 (
1783 cd ${OUT_DIR}
1784 mkdtimg create "${DIST_DIR}"/dtbo.img ${MKDTIMG_FLAGS} ${MKDTIMG_DTBOS}
1785 )
1786 fi
1787}
1788export -f make_dtbo
1789
1790function installing_UAPI_kernel_headers () {
1791 if [ -z "${SKIP_CP_KERNEL_HDR}" ]; then
1792 echo "========================================================"
1793 echo " Installing UAPI kernel headers:"
1794 mkdir -p "${KERNEL_UAPI_HEADERS_DIR}/usr"
1795 make -C ${OUT_DIR} O=${OUT_DIR} ${TOOL_ARGS} \
1796 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" "${MAKE_ARGS[@]}" \
1797 headers_install
1798 # The kernel makefiles create files named ..install.cmd and .install which
1799 # are only side products. We don't want those. Let's delete them.
1800 find ${KERNEL_UAPI_HEADERS_DIR} \( -name ..install.cmd -o -name .install \) -exec rm '{}' +
1801 KERNEL_UAPI_HEADERS_TAR=${DIST_DIR}/kernel-uapi-headers.tar.gz
1802 echo " Copying kernel UAPI headers to ${KERNEL_UAPI_HEADERS_TAR}"
1803 tar -czf ${KERNEL_UAPI_HEADERS_TAR} --directory=${KERNEL_UAPI_HEADERS_DIR} usr/
1804 fi
1805}
1806export -f installing_UAPI_kernel_headers
1807
1808function copy_kernel_headers_to_compress () {
1809 if [ -z "${SKIP_CP_KERNEL_HDR}" ] ; then
1810 echo "========================================================"
1811 KERNEL_HEADERS_TAR=${DIST_DIR}/kernel-headers.tar.gz
1812 echo " Copying kernel headers to ${KERNEL_HEADERS_TAR}"
1813 pushd $ROOT_DIR/$KERNEL_DIR
1814 find arch include $OUT_DIR -name *.h -print0 \
1815 | tar -czf $KERNEL_HEADERS_TAR \
1816 --absolute-names \
1817 --dereference \
1818 --transform "s,.*$OUT_DIR,," \
1819 --transform "s,^,kernel-headers/," \
1820 --null -T -
1821 popd
1822 fi
1823}
1824export -f copy_kernel_headers_to_compress
1825
1826function set_default_parameters_for_32bit () {
1827 tool_args=()
1828 prebuilts_paths=(
1829 CLANG_PREBUILT_BIN
1830 CLANGTOOLS_PREBUILT_BIN
1831 RUST_PREBUILT_BIN
1832 LZ4_PREBUILTS_BIN
1833 DTC_PREBUILTS_BIN
1834 LIBUFDT_PREBUILTS_BIN
1835 BUILDTOOLS_PREBUILT_BIN
1836 )
1837 echo CC_CLANG=$CC_CLANG
1838 if [[ $CC_CLANG -eq "1" ]]; then
1839 source ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
1840 if [[ -n "${LLVM}" ]]; then
1841 tool_args+=("LLVM=1")
1842 # Reset a bunch of variables that the kernel's top level Makefile does, just
1843 # in case someone tries to use these binaries in this script such as in
1844 # initramfs generation below.
1845 HOSTCC=clang
1846 HOSTCXX=clang++
1847 CC=clang
1848 LD=ld.lld
1849 AR=llvm-ar
1850 NM=llvm-nm
1851 OBJCOPY=llvm-objcopy
1852 OBJDUMP=llvm-objdump
1853 OBJSIZE=llvm-size
1854 READELF=llvm-readelf
1855 STRIP=llvm-strip
1856 else
1857 if [ -n "${HOSTCC}" ]; then
1858 tool_args+=("HOSTCC=${HOSTCC}")
1859 fi
1860
1861 if [ -n "${CC}" ]; then
1862 tool_args+=("CC=${CC}")
1863 if [ -z "${HOSTCC}" ]; then
1864 tool_args+=("HOSTCC=${CC}")
1865 fi
1866 fi
1867
1868 if [ -n "${LD}" ]; then
1869 tool_args+=("LD=${LD}" "HOSTLD=${LD}")
1870 fi
1871
1872 if [ -n "${NM}" ]; then
1873 tool_args+=("NM=${NM}")
1874 fi
1875
1876 if [ -n "${OBJCOPY}" ]; then
1877 tool_args+=("OBJCOPY=${OBJCOPY}")
1878 fi
1879 fi
1880
1881 if [ -n "${DTC}" ]; then
1882 tool_args+=("DTC=${DTC}")
1883 fi
1884 for prebuilt_bin in "${prebuilts_paths[@]}"; do
1885 prebuilt_bin=\${${prebuilt_bin}}
1886 eval prebuilt_bin="${prebuilt_bin}"
1887 if [ -n "${prebuilt_bin}" ]; then
1888 PATH=${PATH//"${ROOT_DIR}\/${prebuilt_bin}:"}
1889 PATH=${ROOT_DIR}/${prebuilt_bin}:${PATH} # add the clang tool to env PATH
1890 fi
1891 done
1892 export PATH
1893 elif [[ -n $CROSS_COMPILE_TOOL ]]; then
1894 export CROSS_COMPILE=${CROSS_COMPILE_TOOL}
1895 fi
1896
1897 # Have host compiler use LLD and compiler-rt.
1898 LLD_COMPILER_RT="-fuse-ld=lld --rtlib=compiler-rt"
1899 if [[ -n "${NDK_TRIPLE}" ]]; then
1900 NDK_DIR=${ROOT_DIR}/prebuilts/ndk-r23
1901
1902 if [[ ! -d "${NDK_DIR}" ]]; then
1903 # Kleaf/Bazel will checkout the ndk to a different directory than
1904 # build.sh.
1905 NDK_DIR=${ROOT_DIR}/external/prebuilt_ndk
1906 if [[ ! -d "${NDK_DIR}" ]]; then
1907 echo "ERROR: NDK_TRIPLE set, but unable to find prebuilts/ndk." 1>&2
1908 echo "Did you forget to checkout prebuilts/ndk?" 1>&2
1909 exit 1
1910 fi
1911 fi
1912 USERCFLAGS="--target=${NDK_TRIPLE} "
1913 USERCFLAGS+="--sysroot=${NDK_DIR}/toolchains/llvm/prebuilt/linux-x86_64/sysroot "
1914 # Some kernel headers trigger -Wunused-function for unused static functions
1915 # with clang; GCC does not warn about unused static inline functions. The
1916 # kernel sets __attribute__((maybe_unused)) on such functions when W=1 is
1917 # not set.
1918 USERCFLAGS+="-Wno-unused-function "
1919 # To help debug these flags, consider commenting back in the following, and
1920 # add `echo $@ > /tmp/log.txt` and `2>>/tmp/log.txt` to the invocation of $@
1921 # in scripts/cc-can-link.sh.
1922 #USERCFLAGS+=" -Wl,--verbose -v"
1923 # We need to set -fuse-ld=lld for Android's build env since AOSP LLVM's
1924 # clang is not configured to use LLD by default, and BFD has been
1925 # intentionally removed. This way CC_CAN_LINK can properly link the test in
1926 # scripts/cc-can-link.sh.
1927 USERLDFLAGS="${LLD_COMPILER_RT} "
1928 USERLDFLAGS+="--target=${NDK_TRIPLE} "
1929 else
1930 USERCFLAGS="--sysroot=/dev/null"
1931 fi
1932
1933 #setting_the_default_output_dir
1934 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
1935 export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
1936 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
1937 export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
1938 export UNSTRIPPED_MODULES_ARCHIVE=unstripped_modules.tar.gz
1939 export MODULES_ARCHIVE=modules.tar.gz
1940 export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
1941 export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
1942 export KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
1943 export INITRAMFS_STAGING_DIR=${MODULES_STAGING_DIR}/initramfs_staging
1944 export SYSTEM_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/system_dlkm_staging
1945 export VENDOR_DLKM_STAGING_DIR=${MODULES_STAGING_DIR}/vendor_dlkm_staging
1946 export MKBOOTIMG_STAGING_DIR="${MODULES_STAGING_DIR}/mkbootimg_staging"
1947 export OUT_AMLOGIC_DIR=$(readlink -m ${COMMON_OUT_DIR}/amlogic)
1948
1949 tool_args+=("LOADADDR=0x108000")
1950 tool_args+=("DEPMOD=depmod")
1951 TOOL_ARGS="${tool_args[@]}"
1952
1953 mkdir -p ${OUT_DIR}
1954 if [ "${SKIP_RM_OUTDIR}" != "1" ] ; then
1955 rm -rf ${COMMON_OUT_DIR}
1956 fi
1957
1958 source ${ROOT_DIR}/build/kernel/build_utils.sh
1959
1960 DTS_EXT_DIR=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic
1961 DTS_EXT_DIR=$(rel_path ${ROOT_DIR}/${DTS_EXT_DIR} ${KERNEL_DIR})
1962 export dtstree=${DTS_EXT_DIR}
1963 export DTC_INCLUDE=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/include
1964
1965 EXT_MODULES="
1966 ${EXT_MODULES}
1967 "
1968
1969 EXT_MODULES_CONFIG="
1970 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_config
1971 "
1972
1973 EXT_MODULES_PATH="
1974 ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/scripts/amlogic/ext_modules_path
1975 "
1976
1977 POST_KERNEL_BUILD_CMDS="prepare_module_build"
1978 EXTRA_CMDS="extra_cmds"
1979
1980 IN_KERNEL_MODULES=1
1981}
1982export -f set_default_parameters_for_32bit
1983
1984function generating_test_mappings_zip () {
1985 echo "========================================================"
1986 echo " Generating test_mappings.zip"
1987 TEST_MAPPING_FILES=${OUT_DIR}/test_mapping_files.txt
1988 find ${ROOT_DIR} -name TEST_MAPPING \
1989 -not -path "${ROOT_DIR}/\.git*" \
1990 -not -path "${ROOT_DIR}/\.repo*" \
1991 -not -path "${ROOT_DIR}/out*" \
1992 > ${TEST_MAPPING_FILES}
1993 soong_zip -o ${DIST_DIR}/test_mappings.zip -C ${ROOT_DIR} -l ${TEST_MAPPING_FILES}
1994}
1995export -f generating_test_mappings_zip
1996