blob: 9c31fdb3cbb7771d49cae79205330233b89f82b1 [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
wanwei.jiang5c8d2b62021-11-26 20:36:33 +08006 echo " --abi for ABI, call build_abi.sh not build.sh, 1|0[default], not require parameter value"
7 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 +08008 echo " --symbol_strict for KMI_SYMBOL_LIST_STRICT_MODE, 1[default]|0, require parameter value"
wanwei.jiangd7b29ef2021-12-01 19:59:41 +08009 echo " --lto for LTO, full|thin[default]|none, require parameter value"
wanwei.jiang5d97ab12022-07-25 21:30:39 +080010 echo " --savedefconfig for only savedefconfig, not require parameter value"
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080011 echo " --image for only build kernel, not require parameter value"
12 echo " --modules for only build modules, not require parameter value"
13 echo " --dtbs for only build dtbs, not require parameter value"
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080014 echo " --kernel_dir for KERNEL_DIR, common[default]|other dir, require parameter value"
15 echo " --common_drivers_dir for COMMON_DRIVERS_DIR, common[default]|other dir, require parameter value"
16 echo " --build_dir for BUILD_DIR, build[default]|other dir, require parameter value"
wanwei.jiang1482c872022-05-13 20:33:51 +080017 echo " --check_defconfig for check defconfig"
18 echo " --modules_depend for check modules depend"
wanwei.jiang3eab75f2022-05-25 00:39:52 +080019 echo " --android_project for android project build"
wanwei.jiang612a8882021-11-23 17:12:23 +080020}
wanwei.jiang612a8882021-11-23 17:12:23 +080021
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080022VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080023ARGS=()
24for i in "$@"
25do
26 case $i in
wanwei.jiang612a8882021-11-23 17:12:23 +080027 --abi)
28 ABI=1
29 shift
30 ;;
31 --build_config)
32 BUILD_CONFIG=$2
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080033 VA=1
wanwei.jiang612a8882021-11-23 17:12:23 +080034 shift
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080035 ;;
wanwei.jiangd7b29ef2021-12-01 19:59:41 +080036 --lto)
37 LTO=$2
38 VA=1
39 shift
40 ;;
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080041 --symbol_strict)
42 KMI_SYMBOL_LIST_STRICT_MODE=$2
43 VA=1
44 shift
wanwei.jiang612a8882021-11-23 17:12:23 +080045 ;;
wanwei.jiang5d97ab12022-07-25 21:30:39 +080046 --savedefconfig)
47 SAVEDEFCONFIG=1
wanwei.jiang612a8882021-11-23 17:12:23 +080048 shift
49 ;;
50 --image)
51 IMAGE=1
52 shift
53 ;;
54 --modules)
55 MODULES=1
56 shift
57 break
58 ;;
59 --dtbs)
60 DTB_BUILD=1
61 shift
62 ;;
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080063 --kernel_dir)
64 KERNEL_DIR=$2
65 VA=1
66 shift
67 ;;
68 --common_drivers_dir)
69 COMMON_DRIVERS_DIR=$2
70 VA=1
71 shift
72 ;;
73 --build_dir)
74 BUILD_DIR=$2
75 VA=1
76 shift
77 ;;
wanwei.jiang1482c872022-05-13 20:33:51 +080078 --check_defconfig)
79 CHECK_DEFCONFIG=1
80 shift
81 ;;
82 --modules_depend)
83 MODULES_DEPEND=1
84 shift
85 ;;
wanwei.jiang3eab75f2022-05-25 00:39:52 +080086 --android_project)
87 ANDROID_PROJECT=$2
88 VA=1
89 shift
90 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +080091 -h|--help)
92 show_help
93 exit 0
94 ;;
95 *)
96 if [[ -n $1 ]];
97 then
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080098 if [[ -z ${VA} ]];
99 then
100 ARGS+=("$1")
101 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800102 fi
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800103 VA=
wanwei.jiang612a8882021-11-23 17:12:23 +0800104 shift
105 ;;
106 esac
107done
wanwei.jiang612a8882021-11-23 17:12:23 +0800108set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800109
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800110 # amlogic parameters default value
111if [[ -z "${ABI}" ]]; then
112 ABI=0
113fi
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800114if [[ -z "${LTO}" ]]; then
115 LTO=thin
116fi
117if [[ -z "${KERNEL_DIR}" ]]; then
118 KERNEL_DIR=common
119fi
120if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
121 echo "The directory of kernel does not exist";
122 exit
123fi
124if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
125 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
126 COMMON_DRIVERS_DIR=../common_drivers
127 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
128 COMMON_DRIVERS_DIR=common_drivers
129 fi
130fi
131if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
132 echo "The directory of common_drivers does not exist";
133 exit
134fi
135if [[ -z "${BUILD_CONFIG}" ]]; then
136 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
137fi
138if [[ -z "${BUILD_DIR}" ]]; then
139 BUILD_DIR=build
140fi
141if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
142 echo "The directory of build does not exist";
143fi
144
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800145ROOT_DIR=$(readlink -f $(dirname $0))
146if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
147 ROOT_DIR=`pwd`
148 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
149 echo "the file path of $0 is incorrect"
150 exit
151 fi
152fi
153export ROOT_DIR
154
wanwei.jiang1482c872022-05-13 20:33:51 +0800155CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
156MODULES_DEPEND=${MODULES_DEPEND:-0}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800157if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
158 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
159 RM_KERNEL_BUILD_VAR_FILE=1
160fi
wanwei.jiang1482c872022-05-13 20:33:51 +0800161
wanwei.jiang236e9a32021-12-07 16:34:14 +0800162set -e
wanwei.jiang1482c872022-05-13 20:33:51 +0800163export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG
164echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG}
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800165export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800166echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800167
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800168source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
wanwei.jiang612a8882021-11-23 17:12:23 +0800169
170if [ "${ABI}" -eq "1" ]; then
171 export OUT_DIR_SUFFIX="_abi"
172else
173 OUT_DIR_SUFFIX=
174fi
175
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800176echo SAVEDEFCONFIG=${SAVEDEFCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
177if [[ -n ${SAVEDEFCONFIG} ]] || [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800178
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800179 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
180 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
wanwei.jiang612a8882021-11-23 17:12:23 +0800181
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800182 if [[ -n ${SAVEDEFCONFIG} ]]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800183 set -x
184 pre_defconfig_cmds
185 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800186 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
wanwei.jiang612a8882021-11-23 17:12:23 +0800187 post_defconfig_cmds
188 set +x
189 fi
190 if [[ -n ${IMAGE} ]]; then
191 set -x
192 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
193 set +x
194 fi
195 if [[ -n ${MODULES} ]]; then
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +0800196 if [[ ${IN_KERNEL_MODULES} -eq "1" ]];
wanwei.jiang612a8882021-11-23 17:12:23 +0800197 then
198 set -x
199 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
200 set +x
201 else
202 echo EXT_MODULES=$EXT_MODULES
203 set -x
204 prepare_module_build
205 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
206 echo "========================================================"
207 echo " Building external modules and installing them into staging directory"
208
209 MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
210 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
211 for EXT_MOD in ${EXT_MODULES}; do
212 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
213 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
214 set -x
215 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
216 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
217 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
218 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
219 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
220 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
221 "${MAKE_ARGS[@]}" modules_install
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800222 set +x
wanwei.jiang612a8882021-11-23 17:12:23 +0800223 done
224 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800225 set +x
226 fi
227 fi
228 if [[ -n ${DTB_BUILD} ]]; then
229 set -x
230 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
231 set +x
232 fi
233 exit
234fi
235
236if [ "${ABI}" -eq "1" ]; then
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800237 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800238else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800239 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800240fi
241
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800242source ${KERNEL_BUILD_VAR_FILE}
243if [[ -n ${RM_KERNEL_BUILD_VAR_FILE} ]]; then
244 rm -f ${KERNEL_BUILD_VAR_FILE}
245fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800246
wanwei.jiang236e9a32021-12-07 16:34:14 +0800247echo "========================================================"
wanwei.jiangf73b2202022-07-23 16:00:44 +0800248if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
249 echo "Rebuild rootfs in order to install modules!"
250 rebuild_rootfs
251else
252 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 +0800253fi
wanwei.jiang236e9a32021-12-07 16:34:14 +0800254set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800255
256if [[ ${MODULES_DEPEND} -eq "1" ]]; then
257 echo "========================================================"
258 echo "print modules depend"
259 check_undefined_symbol
260fi