blob: 53a797426727fd6ab370df848350eb6c8e55f03a [file] [log] [blame]
wanwei.jiang612a8882021-11-23 17:12:23 +08001#!/bin/bash
2
wanwei.jiang612a8882021-11-23 17:12:23 +08003function show_help {
4 echo "USAGE: $0 [--nongki] [--abi]"
5 echo
Lei Zhang2853aa52022-08-23 09:40:06 +08006 echo " --arch for ARCH, build 64 or 32 bit kernel, arm|arm64[default], require parameter value"
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08007 echo " --abi for ABI, call build_abi.sh not build.sh, 1|0[default], not require parameter value"
8 echo " --build_config for BUILD_CONFIG, common_drivers/build.config.amlogic[default]|common/build.config.gki.aarch64, require parameter value"
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08009 echo " --symbol_strict for KMI_SYMBOL_LIST_STRICT_MODE, 1[default]|0, require parameter value"
wanwei.jiangd7b29ef2021-12-01 19:59:41 +080010 echo " --lto for LTO, full|thin[default]|none, require parameter value"
Wanwei Jiang0a74fb12022-12-09 16:27:40 +080011 echo " --menuconfig for only menuconfig, not require parameter value"
12 echo " --basicconfig for basicconfig, m(menuconfig)[default]|n"
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080013 echo " --image for only build kernel, not require parameter value"
14 echo " --modules for only build modules, not require parameter value"
15 echo " --dtbs for only build dtbs, not require parameter value"
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080016 echo " --kernel_dir for KERNEL_DIR, common[default]|other dir, require parameter value"
17 echo " --common_drivers_dir for COMMON_DRIVERS_DIR, common[default]|other dir, require parameter value"
18 echo " --build_dir for BUILD_DIR, build[default]|other dir, require parameter value"
wanwei.jiang1482c872022-05-13 20:33:51 +080019 echo " --check_defconfig for check defconfig"
20 echo " --modules_depend for check modules depend"
wanwei.jiang3eab75f2022-05-25 00:39:52 +080021 echo " --android_project for android project build"
Wanwei Jiang0a74fb12022-12-09 16:27:40 +080022 echo " --gki_20 for build gki 2.0 kernel: gki_defconfig + amlogic_gki.fragment"
Wanwei Jiange5426752023-07-03 00:56:39 +080023 echo " --gki_10 for build gki 1.0 kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10 + amlogic_gki.debug"
Wanwei Jiang0a74fb12022-12-09 16:27:40 +080024 echo " --fast_build for fast build"
Dezhen Wang850c0d22023-05-31 19:26:20 +080025 echo " --upgrade for android upgrade builtin module optimize vendor_boot size" following with android project name
Dezhen Wang124ad7d2023-02-06 15:35:14 +080026 echo " --manual_insmod_module for insmod ko manually when kernel is booting.It's usually used in debug test"
Wanwei Jiange9412ec2023-02-11 20:07:38 +080027 echo " --patch for only am patches"
qinglin.li8d41aaf2023-02-07 19:49:44 +080028 echo " --check_gki_20 for gki 2.0 check kernel build"
Dezhen Wangab7ba642023-03-15 14:10:44 +080029 echo " --dev_config for use the config specified by oem instead of amlogic like ./mk.sh --dev_config a_config+b_config+c_config"
Wanwei Jiang0a519f62023-06-30 16:56:28 +080030 echo " --use_prebuilt_gki for use prebuilt gki, require parameter value, https://ci.android.com/builds/submitted/10412065/kernel_aarch64/latest, --use_prebuilt_gki 10412065"
qinglin.li7cf37c02023-07-04 16:06:04 +080031 echo " --kasan for build kernel with config kasan"
wanwei.jiang612a8882021-11-23 17:12:23 +080032}
wanwei.jiang612a8882021-11-23 17:12:23 +080033
Dezhen Wang850c0d22023-05-31 19:26:20 +080034# handle the dir parameters for amlogic_utils.sh
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080035VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080036ARGS=()
37for i in "$@"
38do
39 case $i in
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080040 --kernel_dir)
41 KERNEL_DIR=$2
42 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +080043 shift
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080044 ;;
45 --common_drivers_dir)
46 COMMON_DRIVERS_DIR=$2
47 VA=1
wanwei.jiang1482c872022-05-13 20:33:51 +080048 shift
49 ;;
Dezhen Wang556827e2023-06-13 13:57:35 +080050 --patch)
51 ONLY_PATCH=1
52 PATCH_PARM=$2
53 if [[ "${PATCH_PARM}" == "lunch" ]]; then
54 VA=1
55 fi
56 CURRENT_DIR=`pwd`
57 cd $(dirname $0)
58 shift
59 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +080060 *)
61 if [[ -n $1 ]];
62 then
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080063 if [[ -z ${VA} ]];
64 then
65 ARGS+=("$1")
66 fi
wanwei.jiang612a8882021-11-23 17:12:23 +080067 fi
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080068 VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080069 shift
70 ;;
71 esac
72done
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080073
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080074if [[ -z "${KERNEL_DIR}" ]]; then
75 KERNEL_DIR=common
76fi
77if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
78 echo "The directory of kernel does not exist";
79 exit
80fi
81if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
82 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
83 COMMON_DRIVERS_DIR=../common_drivers
84 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
85 COMMON_DRIVERS_DIR=common_drivers
86 fi
87fi
88if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
89 echo "The directory of common_drivers does not exist";
90 exit
91fi
Wanwei Jiang2218b892023-03-17 17:31:21 +080092
Dezhen Wang850c0d22023-05-31 19:26:20 +080093set -- "${ARGS[@]}" # other parameters are used as script parameters to handle_input_parameters
94
Dezhen Wang556827e2023-06-13 13:57:35 +080095source "${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh"
96
Dezhen Wang850c0d22023-05-31 19:26:20 +080097handle_input_parameters "$@"
98
99set_default_parameters # set amlogic parameters default value
100
101set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
102
103set -e
104
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800105export_env_variable
wanwei.jiang612a8882021-11-23 17:12:23 +0800106
pengzhao.liua923dea2023-06-25 09:58:20 +0800107autotest
108
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800109adjust_config_action
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800110
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800111build_part_of_kernel
wanwei.jiang612a8882021-11-23 17:12:23 +0800112
Dezhen Wang20069292023-06-20 14:51:21 +0800113if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" = "arm64" && ${BAZEL} == 1 ]]; then
Wanwei Jiang0a519f62023-06-30 16:56:28 +0800114 [[ -z ${PREBUILT_GKI} ]] && args="$@ --lto=${LTO}"
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800115 [[ -z ${GKI_CONFIG} ]] && args="$@ --notrim --lto=none --nokmi_symbol_list_strict_mode"
116
Wanwei Jiang92c89432023-05-15 23:57:16 +0800117 PROJECT_DIR=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/project
118 [[ -d ${PROJECT_DIR} ]] || mkdir -p ${PROJECT_DIR}
119
120 pushd ${ROOT_DIR}/${KERNEL_DIR}
121 git checkout android/abi_gki_aarch64_amlogic
122 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic >> android/abi_gki_aarch64_amlogic
123 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10 >> android/abi_gki_aarch64_amlogic
124 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug >> android/abi_gki_aarch64_amlogic
125 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal >> android/abi_gki_aarch64_amlogic
126 popd
127
128 if [[ ! -f ${PROJECT_DIR}/build.config.project ]]; then
129 touch ${PROJECT_DIR}/build.config.project
130 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/build.config.project
131 echo >> ${PROJECT_DIR}/build.config.project
132 fi
133
134 [[ -f ${PROJECT_DIR}/build.config.gki10 ]] || touch ${PROJECT_DIR}/build.config.gki10
135 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/build.config.gki10
136 echo >> ${PROJECT_DIR}/build.config.gki10
137 echo "GKI_CONFIG=${GKI_CONFIG}" >> ${PROJECT_DIR}/build.config.gki10
138 echo "ANDROID_PROJECT=${ANDROID_PROJECT}" >> ${PROJECT_DIR}/build.config.gki10
Wanwei Jiang92c89432023-05-15 23:57:16 +0800139 echo "COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR}" >> ${PROJECT_DIR}/build.config.gki10
qinglin.li62b23332023-06-25 10:37:41 +0800140 echo "UPGRADE_PROJECT=${UPGRADE_PROJECT}" >> ${PROJECT_DIR}/build.config.gki10
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800141 echo "DEV_CONFIGS=\"${DEV_CONFIGS}\"" >> ${PROJECT_DIR}/build.config.gki10
qinglin.li7cf37c02023-07-04 16:06:04 +0800142 echo "KASAN=${KASAN}" >> ${PROJECT_DIR}/build.config.gki10
143 echo "CHECK_GKI_20=${CHECK_GKI_20}" >> ${PROJECT_DIR}/build.config.gki10
Wanwei Jiang92c89432023-05-15 23:57:16 +0800144
Wanwei Jiang0bde3122023-07-20 10:24:07 +0800145 if [[ -z ${ANDROID_PROJECT} ]]; then
146 [[ -f ${PROJECT_DIR}/Kconfig.ext_modules ]] && rm -rf ${PROJECT_DIR}/Kconfig.ext_modules
147 touch ${PROJECT_DIR}/Kconfig.ext_modules
148 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/Kconfig.ext_modules
149 echo >> ${PROJECT_DIR}/Kconfig.ext_modules
150
151 [[ -f ${PROJECT_DIR}/project.bzl ]] && rm -f ${PROJECT_DIR}/project.bzl
Wanwei Jiang92c89432023-05-15 23:57:16 +0800152 touch ${PROJECT_DIR}/project.bzl
153 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/project.bzl
154 echo >> ${PROJECT_DIR}/project.bzl
155
Wanwei Jiang92c89432023-05-15 23:57:16 +0800156 echo >> ${PROJECT_DIR}/project.bzl
157 echo "EXT_MODULES_ANDROID = [" >> ${PROJECT_DIR}/project.bzl
158 echo "]" >> ${PROJECT_DIR}/project.bzl
qinglin.li62b23332023-06-25 10:37:41 +0800159
160 echo >> ${PROJECT_DIR}/project.bzl
161 echo "VENDOR_MODULES_REMOVE = [" >> ${PROJECT_DIR}/project.bzl
162 echo "]" >> ${PROJECT_DIR}/project.bzl
163
164 echo >> ${PROJECT_DIR}/project.bzl
165 echo "VENDOR_MODULES_ADD = [" >> ${PROJECT_DIR}/project.bzl
166 echo "]" >> ${PROJECT_DIR}/project.bzl
Wanwei Jiang0bde3122023-07-20 10:24:07 +0800167
168 echo >> ${PROJECT_DIR}/project.bzl
169 echo "KCONFIG_EXT_SRCS = [" >> ${PROJECT_DIR}/project.bzl
170 echo "]" >> ${PROJECT_DIR}/project.bzl
Wanwei Jiang92c89432023-05-15 23:57:16 +0800171 fi
172
qinglin.li62b23332023-06-25 10:37:41 +0800173 echo >> ${PROJECT_DIR}/project.bzl
174 sed -i "/ANDROID_PROJECT/d" ${PROJECT_DIR}/project.bzl
175 echo "ANDROID_PROJECT = \"${ANDROID_PROJECT}\"" >> ${PROJECT_DIR}/project.bzl
176
Wanwei Jiang92c89432023-05-15 23:57:16 +0800177 sed -i "/GKI_CONFIG/d" ${PROJECT_DIR}/project.bzl
qinglin.li62b23332023-06-25 10:37:41 +0800178 echo "GKI_CONFIG = \"${GKI_CONFIG}\"" >> ${PROJECT_DIR}/project.bzl
179
180 sed -i "/UPGRADE_PROJECT/d" ${PROJECT_DIR}/project.bzl
181 echo "UPGRADE_PROJECT = \"${UPGRADE_PROJECT}\"" >> ${PROJECT_DIR}/project.bzl
Wanwei Jiang92c89432023-05-15 23:57:16 +0800182
183 [[ -f ${PROJECT_DIR}/dtb.bzl ]] || touch ${PROJECT_DIR}/dtb.bzl
184 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/dtb.bzl
185 echo >> ${PROJECT_DIR}/dtb.bzl
186
187 echo "AMLOGIC_DTBS = [" >> ${PROJECT_DIR}/dtb.bzl
188 cat ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/boot/dts/amlogic/Makefile | grep -n "dtb" | cut -d "=" -f 2 | sed 's/[[:space:]][[:space:]]*/ /g' | sed 's/^[ ]*//' | sed 's/[ ]*$//' | sed '/^#/d;/^$/d' | sed 's/^/ "/' | sed 's/$/",/' >> ${PROJECT_DIR}/dtb.bzl
189 echo "]" >> ${PROJECT_DIR}/dtb.bzl
190
qinglin.li7cf37c02023-07-04 16:06:04 +0800191 if [[ "${GKI_CONFIG}" != "gki_20" || -n ${KASAN} || -z ${ANDROID_PROJECT} ]]; then
192 args="${args} --gki_build_config_fragment=//common:common_drivers/build.config.amlogic.fragment.bazel"
193 fi
194
195 if [[ ${GKI_CONFIG} != gki_20 || -n ${KASAN} || -n ${CHECK_GKI_20} ]]; then
196 args="${args} --allow_undeclared_modules"
197 fi
198
199 [[ -n ${KASAN} ]] && args="${args} --kasan"
200
201 if [[ -n ${CHECK_GKI_20} ]]; then
202 args="${args} --lto=none --notrim --nokmi_symbol_list_strict_mode"
203 fi
204
Wanwei Jiang92c89432023-05-15 23:57:16 +0800205 echo args=${args}
Wanwei Jiang0a519f62023-06-30 16:56:28 +0800206 set -x
Wanwei Jiangcd1d9122023-06-21 16:22:13 +0800207 if [[ -n ${GOOGLE_BAZEL_BUILD_COMMAND_LINE} ]]; then
qinglin.li7cf37c02023-07-04 16:06:04 +0800208 if [[${GOOGLE_BAZEL_BUILD_COMMAND_LINE} =~ "--kasan" ]]; then
209 GOOGLE_BAZEL_BUILD_COMMAND_LINE="${GOOGLE_BAZEL_BUILD_COMMAND_LINE} \
210 --gki_build_config_fragment=//common:common_drivers/build.config.amlogic.fragment.bazel \
211 --allow_undeclared_modules"
212 fi
Wanwei Jiangcd1d9122023-06-21 16:22:13 +0800213 ${GOOGLE_BAZEL_BUILD_COMMAND_LINE}
Wanwei Jiang0a519f62023-06-30 16:56:28 +0800214 elif [[ "${ABI}" -eq "1" ]]; then
Wanwei Jiang92c89432023-05-15 23:57:16 +0800215 tools/bazel run //common:amlogic_abi_update_symbol_list --sandbox_debug --verbose_failures ${args}
216 tools/bazel run //common:kernel_aarch64_abi_dist --sandbox_debug --verbose_failures ${args}
217 exit
Wanwei Jiang0a519f62023-06-30 16:56:28 +0800218 elif [[ -n ${PREBUILT_GKI} ]]; then
219 tools/bazel run --use_prebuilt_gki=${PREBUILT_GKI} //common:amlogic_dist --sandbox_debug --verbose_failures ${args}
Wanwei Jiang92c89432023-05-15 23:57:16 +0800220 else
221 tools/bazel run //common:amlogic_dist --sandbox_debug --verbose_failures ${args}
222 fi
Wanwei Jiang0a519f62023-06-30 16:56:28 +0800223 set +x
Wanwei Jiang92c89432023-05-15 23:57:16 +0800224
225 sed -i "/GKI_BUILD_CONFIG_FRAGMENT/d" ${PROJECT_DIR}/build.config.gki10
226
227 echo "========================================================"
228 echo "after compiling with bazel and organizing the document"
229 source ${KERNEL_DIR}/build.config.constants
230 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
231 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
232 source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh
233
234 bazel_extra_cmds
Wanwei Jiang7c582c02023-07-21 18:34:50 +0800235 if [[ -n ${COPY_DEV_CONFIGS} ]]; then
236 for config_name in ${COPY_DEV_CONFIGS}; do
237 if [[ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name} ]]; then
238 rm -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/arch/${ARCH}/configs/${config_name}
239 else
240 echo "ERROR: config file ${config_name} is not in the right path!!"
241 exit
242 fi
243 done
244 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800245else
Wanwei Jiang92c89432023-05-15 23:57:16 +0800246 if [ "${ABI}" -eq "1" ]; then
247 export OUT_DIR_SUFFIX="_abi"
248 else
249 OUT_DIR_SUFFIX=
250 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800251
Wanwei Jiang92c89432023-05-15 23:57:16 +0800252 if [ "${ABI}" -eq "1" ]; then
253 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
254 else
255 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" = "arm64" ]]; then
Wanwei Jiang2218b892023-03-17 17:31:21 +0800256 if [[ -z ${EXT_MODULES} ]]; then
257 echo
258 echo
259 echo "========================================================"
260 echo " Build GKI boot image and GKI modules"
261 echo
262 source ${KERNEL_DIR}/build.config.constants
263 export OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}_gki})
264 COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
265 export DIST_GKI_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
266
267 if [[ "${GKI_CONFIG}" == "gki_20" ]]; then
268 BUILD_CONFIG=${KERNEL_DIR}/build.config.gki.aarch64 ${ROOT_DIR}/${BUILD_DIR}/build.sh
269 else
270 export IN_BUILD_GKI_10=1
271 ${ROOT_DIR}/${BUILD_DIR}/build.sh
272 unset IN_BUILD_GKI_10
273 fi
274 unset OUT_DIR
275 fi
276
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800277 echo
278 echo
279 echo "========================================================"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800280 echo " Build Vendor modules"
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800281 echo
Wanwei Jiang2218b892023-03-17 17:31:21 +0800282 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
Wanwei Jiang92c89432023-05-15 23:57:16 +0800283 else
Dezhen Wang1176fad2023-06-09 11:22:17 +0800284 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" = "arm" ]]; then
285 ${ROOT_DIR}/common/common_drivers/scripts/amlogic/mk_android32.sh $@
286 else
287 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
288 fi
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800289 fi
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800290 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800291fi
292
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800293source ${ROOT_DIR}/${BUILD_CONFIG}
294
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800295source ${KERNEL_BUILD_VAR_FILE}
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800296
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800297if [[ -n ${RM_KERNEL_BUILD_VAR_FILE} ]]; then
298 rm -f ${KERNEL_BUILD_VAR_FILE}
299fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800300
Wanwei Jiang2218b892023-03-17 17:31:21 +0800301rename_external_module_name
302
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800303rebuild_rootfs ${ARCH}
304
wanwei.jiang236e9a32021-12-07 16:34:14 +0800305set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800306
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800307check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +0800308
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800309abi_symbol_list_detect