blob: e944831a9b3315edb4f6f24cbbe847d29e7b4cd0 [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.jiang5d97ab12022-07-25 21:30:39 +080011 echo " --savedefconfig for only savedefconfig, not require parameter value"
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080012 echo " --image for only build kernel, not require parameter value"
13 echo " --modules for only build modules, not require parameter value"
14 echo " --dtbs for only build dtbs, not require parameter value"
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080015 echo " --kernel_dir for KERNEL_DIR, common[default]|other dir, require parameter value"
16 echo " --common_drivers_dir for COMMON_DRIVERS_DIR, common[default]|other dir, require parameter value"
17 echo " --build_dir for BUILD_DIR, build[default]|other dir, require parameter value"
wanwei.jiang1482c872022-05-13 20:33:51 +080018 echo " --check_defconfig for check defconfig"
19 echo " --modules_depend for check modules depend"
wanwei.jiang3eab75f2022-05-25 00:39:52 +080020 echo " --android_project for android project build"
Wanwei Jiang2d4f9742022-09-13 11:22:17 +080021 echo " --gki_20" for build gki 2.0 kernel: gki_defconfig + amlogic_gki.fragment
22 echo " --gki_10" for build gki 1.0 kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10
23 echo " --gki_debug" for build gki debug kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.10 + amlogic_gki.debug
wanwei.jiang612a8882021-11-23 17:12:23 +080024}
wanwei.jiang612a8882021-11-23 17:12:23 +080025
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080026VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080027ARGS=()
28for i in "$@"
29do
30 case $i in
Lei Zhang2853aa52022-08-23 09:40:06 +080031 --arch)
32 ARCH=$2
33 VA=1
34 shift
35 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +080036 --abi)
37 ABI=1
38 shift
39 ;;
40 --build_config)
41 BUILD_CONFIG=$2
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080042 VA=1
wanwei.jiang612a8882021-11-23 17:12:23 +080043 shift
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080044 ;;
wanwei.jiangd7b29ef2021-12-01 19:59:41 +080045 --lto)
46 LTO=$2
47 VA=1
48 shift
49 ;;
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080050 --symbol_strict)
51 KMI_SYMBOL_LIST_STRICT_MODE=$2
52 VA=1
53 shift
wanwei.jiang612a8882021-11-23 17:12:23 +080054 ;;
wanwei.jiang5d97ab12022-07-25 21:30:39 +080055 --savedefconfig)
56 SAVEDEFCONFIG=1
wanwei.jiang612a8882021-11-23 17:12:23 +080057 shift
58 ;;
59 --image)
60 IMAGE=1
61 shift
62 ;;
63 --modules)
64 MODULES=1
65 shift
66 break
67 ;;
68 --dtbs)
69 DTB_BUILD=1
70 shift
71 ;;
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080072 --kernel_dir)
73 KERNEL_DIR=$2
74 VA=1
75 shift
76 ;;
77 --common_drivers_dir)
78 COMMON_DRIVERS_DIR=$2
79 VA=1
80 shift
81 ;;
82 --build_dir)
83 BUILD_DIR=$2
84 VA=1
85 shift
86 ;;
wanwei.jiang1482c872022-05-13 20:33:51 +080087 --check_defconfig)
88 CHECK_DEFCONFIG=1
89 shift
90 ;;
91 --modules_depend)
92 MODULES_DEPEND=1
93 shift
94 ;;
wanwei.jiang3eab75f2022-05-25 00:39:52 +080095 --android_project)
96 ANDROID_PROJECT=$2
97 VA=1
98 shift
99 ;;
Wanwei Jiang2d4f9742022-09-13 11:22:17 +0800100 --gki_20)
101 GKI_CONFIG=gki_20
wanwei.jiang6fdd3152022-08-01 20:35:05 +0800102 shift
103 ;;
Wanwei Jiang2d4f9742022-09-13 11:22:17 +0800104 --gki_10)
105 GKI_CONFIG=gki_10
wanwei.jiang6fdd3152022-08-01 20:35:05 +0800106 shift
107 ;;
Wanwei Jiang2d4f9742022-09-13 11:22:17 +0800108 --gki_debug)
109 GKI_CONFIG=gki_debug
wanwei.jiang6fdd3152022-08-01 20:35:05 +0800110 shift
111 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +0800112 -h|--help)
113 show_help
114 exit 0
115 ;;
116 *)
117 if [[ -n $1 ]];
118 then
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800119 if [[ -z ${VA} ]];
120 then
121 ARGS+=("$1")
122 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800123 fi
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800124 VA=
wanwei.jiang612a8882021-11-23 17:12:23 +0800125 shift
126 ;;
127 esac
128done
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800129
Lei Zhang2853aa52022-08-23 09:40:06 +0800130if [ "${ARCH}" = "arm" ]; then
131 ARGS+=("LOADADDR=0x108000")
132else
133 ARCH=arm64
134fi
135
136set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800137 # amlogic parameters default value
138if [[ -z "${ABI}" ]]; then
139 ABI=0
140fi
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800141if [[ -z "${LTO}" ]]; then
142 LTO=thin
143fi
144if [[ -z "${KERNEL_DIR}" ]]; then
145 KERNEL_DIR=common
146fi
147if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
148 echo "The directory of kernel does not exist";
149 exit
150fi
151if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
152 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
153 COMMON_DRIVERS_DIR=../common_drivers
154 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
155 COMMON_DRIVERS_DIR=common_drivers
156 fi
157fi
158if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
159 echo "The directory of common_drivers does not exist";
160 exit
161fi
162if [[ -z "${BUILD_CONFIG}" ]]; then
Lei Zhang2853aa52022-08-23 09:40:06 +0800163 if [ "${ARCH}" = "arm64" ]; then
164 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
165 elif [ "${ARCH}" = "arm" ]; then
166 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic32
167 fi
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800168fi
169if [[ -z "${BUILD_DIR}" ]]; then
170 BUILD_DIR=build
171fi
172if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
173 echo "The directory of build does not exist";
174fi
175
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800176ROOT_DIR=$(readlink -f $(dirname $0))
177if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
178 ROOT_DIR=`pwd`
179 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
180 echo "the file path of $0 is incorrect"
181 exit
182 fi
183fi
184export ROOT_DIR
185
wanwei.jiang1482c872022-05-13 20:33:51 +0800186CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
187MODULES_DEPEND=${MODULES_DEPEND:-0}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800188if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
189 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
190 RM_KERNEL_BUILD_VAR_FILE=1
191fi
wanwei.jiang1482c872022-05-13 20:33:51 +0800192
Wanwei Jiang2d4f9742022-09-13 11:22:17 +0800193GKI_CONFIG=${GKI_CONFIG:-gki_debug}
wanwei.jiang6fdd3152022-08-01 20:35:05 +0800194
wanwei.jiang236e9a32021-12-07 16:34:14 +0800195set -e
wanwei.jiang1482c872022-05-13 20:33:51 +0800196export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG
197echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG}
wanwei.jiang6fdd3152022-08-01 20:35:05 +0800198export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG
199echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR} GKI_CONFIG=${GKI_CONFIG}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800200
Wanwei Jiangac25a172022-11-03 16:49:32 +0800201export CROSS_COMPILE=
202
Lei Zhang2853aa52022-08-23 09:40:06 +0800203source ${ROOT_DIR}/${BUILD_CONFIG}
wanwei.jiang612a8882021-11-23 17:12:23 +0800204
205if [ "${ABI}" -eq "1" ]; then
206 export OUT_DIR_SUFFIX="_abi"
207else
208 OUT_DIR_SUFFIX=
209fi
210
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800211echo SAVEDEFCONFIG=${SAVEDEFCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
212if [[ -n ${SAVEDEFCONFIG} ]] || [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800213
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800214 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
215 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
wanwei.jiang612a8882021-11-23 17:12:23 +0800216
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800217 if [[ -n ${SAVEDEFCONFIG} ]]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800218 set -x
219 pre_defconfig_cmds
220 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800221 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
wanwei.jiang612a8882021-11-23 17:12:23 +0800222 post_defconfig_cmds
223 set +x
224 fi
225 if [[ -n ${IMAGE} ]]; then
226 set -x
227 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
228 set +x
229 fi
230 if [[ -n ${MODULES} ]]; then
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +0800231 if [[ ${IN_KERNEL_MODULES} -eq "1" ]];
wanwei.jiang612a8882021-11-23 17:12:23 +0800232 then
233 set -x
234 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
235 set +x
236 else
237 echo EXT_MODULES=$EXT_MODULES
238 set -x
239 prepare_module_build
240 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
241 echo "========================================================"
242 echo " Building external modules and installing them into staging directory"
243
244 MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
245 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
246 for EXT_MOD in ${EXT_MODULES}; do
247 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
248 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
249 set -x
250 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
251 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
252 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
253 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
254 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
255 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
256 "${MAKE_ARGS[@]}" modules_install
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800257 set +x
wanwei.jiang612a8882021-11-23 17:12:23 +0800258 done
259 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800260 set +x
261 fi
262 fi
263 if [[ -n ${DTB_BUILD} ]]; then
264 set -x
265 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
266 set +x
267 fi
268 exit
269fi
270
271if [ "${ABI}" -eq "1" ]; then
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800272 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800273else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800274 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800275fi
276
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800277source ${KERNEL_BUILD_VAR_FILE}
278if [[ -n ${RM_KERNEL_BUILD_VAR_FILE} ]]; then
279 rm -f ${KERNEL_BUILD_VAR_FILE}
280fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800281
wanwei.jiang236e9a32021-12-07 16:34:14 +0800282echo "========================================================"
wanwei.jiangf73b2202022-07-23 16:00:44 +0800283if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
284 echo "Rebuild rootfs in order to install modules!"
Lei Zhang2853aa52022-08-23 09:40:06 +0800285 rebuild_rootfs ${ARCH}
wanwei.jiangf73b2202022-07-23 16:00:44 +0800286else
287 echo "There's no file ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot, so don't rebuild rootfs!"
wanwei.jiang612a8882021-11-23 17:12:23 +0800288fi
wanwei.jiang236e9a32021-12-07 16:34:14 +0800289set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800290
291if [[ ${MODULES_DEPEND} -eq "1" ]]; then
292 echo "========================================================"
293 echo "print modules depend"
294 check_undefined_symbol
295fi