blob: 3b2c96bd1446e9773f8845e356f600628ecb09d1 [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"
23 echo " --gki_10 for build gki 1.0 kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10"
24 echo " --gki_debug for build gki debug kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10 + amlogic_gki.debug"
25 echo " for note: current can't use --gki_10, amlogic_gki.10 for optimize, amlogic_gki.debug for debug, and follow GKI1.0"
26 echo " so build GKI1.0 Image need with --gki_debug, default parameter --gki_debug"
27 echo " --fast_build for fast build"
Dezhen Wang850c0d22023-05-31 19:26:20 +080028 echo " --upgrade for android upgrade builtin module optimize vendor_boot size" following with android project name
Dezhen Wang124ad7d2023-02-06 15:35:14 +080029 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 +080030 echo " --patch for only am patches"
qinglin.li8d41aaf2023-02-07 19:49:44 +080031 echo " --check_gki_20 for gki 2.0 check kernel build"
Dezhen Wangab7ba642023-03-15 14:10:44 +080032 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 Jiang2218b892023-03-17 17:31:21 +080033 echo " --bazel for choose bazel tool to build"
wanwei.jiang612a8882021-11-23 17:12:23 +080034}
wanwei.jiang612a8882021-11-23 17:12:23 +080035
Dezhen Wang850c0d22023-05-31 19:26:20 +080036# handle the dir parameters for amlogic_utils.sh
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080037VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080038ARGS=()
39for i in "$@"
40do
41 case $i in
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080042 --kernel_dir)
43 KERNEL_DIR=$2
44 VA=1
Dezhen Wang850c0d22023-05-31 19:26:20 +080045 shift
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080046 ;;
47 --common_drivers_dir)
48 COMMON_DRIVERS_DIR=$2
49 VA=1
wanwei.jiang1482c872022-05-13 20:33:51 +080050 shift
51 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +080052 *)
53 if [[ -n $1 ]];
54 then
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080055 if [[ -z ${VA} ]];
56 then
57 ARGS+=("$1")
58 fi
wanwei.jiang612a8882021-11-23 17:12:23 +080059 fi
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080060 VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080061 shift
62 ;;
63 esac
64done
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080065
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080066if [[ -z "${KERNEL_DIR}" ]]; then
67 KERNEL_DIR=common
68fi
69if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
70 echo "The directory of kernel does not exist";
71 exit
72fi
73if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
74 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
75 COMMON_DRIVERS_DIR=../common_drivers
76 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
77 COMMON_DRIVERS_DIR=common_drivers
78 fi
79fi
80if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
81 echo "The directory of common_drivers does not exist";
82 exit
83fi
Wanwei Jiang2218b892023-03-17 17:31:21 +080084
Dezhen Wang5ad119c2023-05-04 15:07:49 +080085source "${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh"
Wanwei Jiange9412ec2023-02-11 20:07:38 +080086
Dezhen Wang850c0d22023-05-31 19:26:20 +080087set -- "${ARGS[@]}" # other parameters are used as script parameters to handle_input_parameters
88
89handle_input_parameters "$@"
90
91set_default_parameters # set amlogic parameters default value
92
93set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
94
95set -e
96
Dezhen Wang5ad119c2023-05-04 15:07:49 +080097export_env_variable
wanwei.jiang612a8882021-11-23 17:12:23 +080098
Dezhen Wang5ad119c2023-05-04 15:07:49 +080099adjust_config_action
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800100
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800101build_part_of_kernel
wanwei.jiang612a8882021-11-23 17:12:23 +0800102
Dezhen Wang0a44bf12023-06-19 18:44:42 +0800103if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" = "arm64" && ${BAZEL} == 1 && -z ${UPGRADE_PROJECT} ]]; then
Wanwei Jiang92c89432023-05-15 23:57:16 +0800104 args="$@ --lto=${LTO}"
105 PROJECT_DIR=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/project
106 [[ -d ${PROJECT_DIR} ]] || mkdir -p ${PROJECT_DIR}
107
108 pushd ${ROOT_DIR}/${KERNEL_DIR}
109 git checkout android/abi_gki_aarch64_amlogic
110 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic >> android/abi_gki_aarch64_amlogic
111 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.10 >> android/abi_gki_aarch64_amlogic
112 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.debug >> android/abi_gki_aarch64_amlogic
113 cat ${COMMON_DRIVERS_DIR}/android/${FULL_KERNEL_VERSION}_abi_gki_aarch64_amlogic.illegal >> android/abi_gki_aarch64_amlogic
114 popd
115
116 if [[ ! -f ${PROJECT_DIR}/build.config.project ]]; then
117 touch ${PROJECT_DIR}/build.config.project
118 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/build.config.project
119 echo >> ${PROJECT_DIR}/build.config.project
120 fi
121
122 [[ -f ${PROJECT_DIR}/build.config.gki10 ]] || touch ${PROJECT_DIR}/build.config.gki10
123 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/build.config.gki10
124 echo >> ${PROJECT_DIR}/build.config.gki10
125 echo "GKI_CONFIG=${GKI_CONFIG}" >> ${PROJECT_DIR}/build.config.gki10
126 echo "ANDROID_PROJECT=${ANDROID_PROJECT}" >> ${PROJECT_DIR}/build.config.gki10
127 echo "GKI_BUILD_CONFIG_FRAGMENT=${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic.fragment.bazel" >> ${PROJECT_DIR}/build.config.gki10
128 echo "COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR}" >> ${PROJECT_DIR}/build.config.gki10
129
130 if [[ ${GKI_CONFIG} == gki_20 ]]; then
131 [[ -n ${ANDROID_PROJECT} ]] && sed -i "/GKI_BUILD_CONFIG_FRAGMENT/d" ${PROJECT_DIR}/build.config.gki10
132 else
133 args="${args} --allow_undeclared_modules"
134 fi
135
136 if [[ ! -f ${PROJECT_DIR}/project.bzl ]]; then
137 touch ${PROJECT_DIR}/project.bzl
138 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/project.bzl
139 echo >> ${PROJECT_DIR}/project.bzl
140
141 echo "AMLOGIC_MODULES_ANDROID = [" >> ${PROJECT_DIR}/project.bzl
142 echo " \"common_drivers/drivers/tty/serial/amlogic-uart.ko\"," >> ${PROJECT_DIR}/project.bzl
143 echo "]" >> ${PROJECT_DIR}/project.bzl
144
145 echo >> ${PROJECT_DIR}/project.bzl
146 echo "EXT_MODULES_ANDROID = [" >> ${PROJECT_DIR}/project.bzl
147 echo "]" >> ${PROJECT_DIR}/project.bzl
148 fi
149
150 if [[ -z ${ANDROID_PROJECT} ]]; then
151 sed -i "/amlogic-uart.ko/d" ${PROJECT_DIR}/project.bzl
152 else
153 echo >> ${PROJECT_DIR}/project.bzl
154 echo "ANDROID_PROJECT = \"${ANDROID_PROJECT}\"" >> ${PROJECT_DIR}/project.bzl
155 fi
156 sed -i "/GKI_CONFIG/d" ${PROJECT_DIR}/project.bzl
157 echo "GKI_CONFIG = \"${GKI_CONFIG}\"" >> ${PROJECT_DIR}/project.bzl
158
159 [[ -f ${PROJECT_DIR}/dtb.bzl ]] || touch ${PROJECT_DIR}/dtb.bzl
160 echo "# SPDX-License-Identifier: GPL-2.0" > ${PROJECT_DIR}/dtb.bzl
161 echo >> ${PROJECT_DIR}/dtb.bzl
162
163 echo "AMLOGIC_DTBS = [" >> ${PROJECT_DIR}/dtb.bzl
164 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
165 echo "]" >> ${PROJECT_DIR}/dtb.bzl
166
167 echo args=${args}
168 if [ "${ABI}" -eq "1" ]; then
169 tools/bazel run //common:amlogic_abi_update_symbol_list --sandbox_debug --verbose_failures ${args}
170 tools/bazel run //common:kernel_aarch64_abi_dist --sandbox_debug --verbose_failures ${args}
171 exit
172 else
173 tools/bazel run //common:amlogic_dist --sandbox_debug --verbose_failures ${args}
174 fi
175
176 sed -i "/GKI_BUILD_CONFIG_FRAGMENT/d" ${PROJECT_DIR}/build.config.gki10
177
178 echo "========================================================"
179 echo "after compiling with bazel and organizing the document"
180 source ${KERNEL_DIR}/build.config.constants
181 export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
182 export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
183 source ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh
184
185 bazel_extra_cmds
wanwei.jiang612a8882021-11-23 17:12:23 +0800186else
Wanwei Jiang92c89432023-05-15 23:57:16 +0800187 if [ "${ABI}" -eq "1" ]; then
188 export OUT_DIR_SUFFIX="_abi"
189 else
190 OUT_DIR_SUFFIX=
191 fi
Wanwei Jiang2218b892023-03-17 17:31:21 +0800192
Wanwei Jiang92c89432023-05-15 23:57:16 +0800193 if [ "${ABI}" -eq "1" ]; then
194 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
195 else
196 if [[ "${FULL_KERNEL_VERSION}" != "common13-5.15" && "${ARCH}" = "arm64" ]]; then
Wanwei Jiang2218b892023-03-17 17:31:21 +0800197 if [[ -z ${EXT_MODULES} ]]; then
198 echo
199 echo
200 echo "========================================================"
201 echo " Build GKI boot image and GKI modules"
202 echo
203 source ${KERNEL_DIR}/build.config.constants
204 export OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}_gki})
205 COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
206 export DIST_GKI_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
207
208 if [[ "${GKI_CONFIG}" == "gki_20" ]]; then
209 BUILD_CONFIG=${KERNEL_DIR}/build.config.gki.aarch64 ${ROOT_DIR}/${BUILD_DIR}/build.sh
210 else
211 export IN_BUILD_GKI_10=1
212 ${ROOT_DIR}/${BUILD_DIR}/build.sh
213 unset IN_BUILD_GKI_10
214 fi
215 unset OUT_DIR
216 fi
217
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800218 echo
219 echo
220 echo "========================================================"
Wanwei Jiang2218b892023-03-17 17:31:21 +0800221 echo " Build Vendor modules"
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800222 echo
Wanwei Jiang2218b892023-03-17 17:31:21 +0800223 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
Wanwei Jiang92c89432023-05-15 23:57:16 +0800224 else
225 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800226 fi
Wanwei Jiangc65e4d32023-03-21 16:24:41 +0800227 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800228fi
229
Wanwei Jiang0a74fb12022-12-09 16:27:40 +0800230source ${ROOT_DIR}/${BUILD_CONFIG}
231
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800232source ${KERNEL_BUILD_VAR_FILE}
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800233
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800234if [[ -n ${RM_KERNEL_BUILD_VAR_FILE} ]]; then
235 rm -f ${KERNEL_BUILD_VAR_FILE}
236fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800237
Wanwei Jiang2218b892023-03-17 17:31:21 +0800238rename_external_module_name
239
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800240rebuild_rootfs ${ARCH}
241
wanwei.jiang236e9a32021-12-07 16:34:14 +0800242set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800243
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800244check_undefined_symbol
Dezhen Wangd40fa552023-04-11 16:13:27 +0800245
Dezhen Wang5ad119c2023-05-04 15:07:49 +0800246abi_symbol_list_detect