blob: d9f07a28ce49063d5e7b44ec90b9f441a3077958 [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.jiang6fdd3152022-08-01 20:35:05 +080020 echo " --gki" for build gki kernel: gki_defconfig + amlogic_gki.fragment
21 echo " --gki_user" for build gki user kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.optimize
22 echo " --gki_userdebug" for build gki userdebug kernel: gki_defconfig + amlogic_gki.fragment + amlogic_gki.optimize + amlogic_gki.debug
wanwei.jiang612a8882021-11-23 17:12:23 +080023}
wanwei.jiang612a8882021-11-23 17:12:23 +080024
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080025VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080026ARGS=()
27for i in "$@"
28do
29 case $i in
wanwei.jiang612a8882021-11-23 17:12:23 +080030 --abi)
31 ABI=1
32 shift
33 ;;
34 --build_config)
35 BUILD_CONFIG=$2
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080036 VA=1
wanwei.jiang612a8882021-11-23 17:12:23 +080037 shift
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080038 ;;
wanwei.jiangd7b29ef2021-12-01 19:59:41 +080039 --lto)
40 LTO=$2
41 VA=1
42 shift
43 ;;
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080044 --symbol_strict)
45 KMI_SYMBOL_LIST_STRICT_MODE=$2
46 VA=1
47 shift
wanwei.jiang612a8882021-11-23 17:12:23 +080048 ;;
wanwei.jiang5d97ab12022-07-25 21:30:39 +080049 --savedefconfig)
50 SAVEDEFCONFIG=1
wanwei.jiang612a8882021-11-23 17:12:23 +080051 shift
52 ;;
53 --image)
54 IMAGE=1
55 shift
56 ;;
57 --modules)
58 MODULES=1
59 shift
60 break
61 ;;
62 --dtbs)
63 DTB_BUILD=1
64 shift
65 ;;
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080066 --kernel_dir)
67 KERNEL_DIR=$2
68 VA=1
69 shift
70 ;;
71 --common_drivers_dir)
72 COMMON_DRIVERS_DIR=$2
73 VA=1
74 shift
75 ;;
76 --build_dir)
77 BUILD_DIR=$2
78 VA=1
79 shift
80 ;;
wanwei.jiang1482c872022-05-13 20:33:51 +080081 --check_defconfig)
82 CHECK_DEFCONFIG=1
83 shift
84 ;;
85 --modules_depend)
86 MODULES_DEPEND=1
87 shift
88 ;;
wanwei.jiang3eab75f2022-05-25 00:39:52 +080089 --android_project)
90 ANDROID_PROJECT=$2
91 VA=1
92 shift
93 ;;
wanwei.jiang6fdd3152022-08-01 20:35:05 +080094 --gki)
95 GKI_CONFIG=gki
96 shift
97 ;;
98 --gki_user)
99 GKI_CONFIG=gki_user
100 shift
101 ;;
102 --gki_userdebug)
103 GKI_CONFIG=gki_userdebug
104 shift
105 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +0800106 -h|--help)
107 show_help
108 exit 0
109 ;;
110 *)
111 if [[ -n $1 ]];
112 then
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800113 if [[ -z ${VA} ]];
114 then
115 ARGS+=("$1")
116 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800117 fi
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800118 VA=
wanwei.jiang612a8882021-11-23 17:12:23 +0800119 shift
120 ;;
121 esac
122done
wanwei.jiang612a8882021-11-23 17:12:23 +0800123set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800124
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800125 # amlogic parameters default value
126if [[ -z "${ABI}" ]]; then
127 ABI=0
128fi
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800129if [[ -z "${LTO}" ]]; then
130 LTO=thin
131fi
132if [[ -z "${KERNEL_DIR}" ]]; then
133 KERNEL_DIR=common
134fi
135if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
136 echo "The directory of kernel does not exist";
137 exit
138fi
139if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
140 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
141 COMMON_DRIVERS_DIR=../common_drivers
142 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
143 COMMON_DRIVERS_DIR=common_drivers
144 fi
145fi
146if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
147 echo "The directory of common_drivers does not exist";
148 exit
149fi
150if [[ -z "${BUILD_CONFIG}" ]]; then
151 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
152fi
153if [[ -z "${BUILD_DIR}" ]]; then
154 BUILD_DIR=build
155fi
156if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
157 echo "The directory of build does not exist";
158fi
159
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800160ROOT_DIR=$(readlink -f $(dirname $0))
161if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
162 ROOT_DIR=`pwd`
163 if [[ ! -f ${ROOT_DIR}/${KERNEL_DIR}/init/main.c ]]; then
164 echo "the file path of $0 is incorrect"
165 exit
166 fi
167fi
168export ROOT_DIR
169
wanwei.jiang1482c872022-05-13 20:33:51 +0800170CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
171MODULES_DEPEND=${MODULES_DEPEND:-0}
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800172if [[ ! -f ${KERNEL_BUILD_VAR_FILE} ]]; then
173 export KERNEL_BUILD_VAR_FILE=`mktemp /tmp/kernel.XXXXXXXXXXXX`
174 RM_KERNEL_BUILD_VAR_FILE=1
175fi
wanwei.jiang1482c872022-05-13 20:33:51 +0800176
wanwei.jiang6fdd3152022-08-01 20:35:05 +0800177GKI_CONFIG=${GKI_CONFIG:-gki_userdebug}
178
wanwei.jiang236e9a32021-12-07 16:34:14 +0800179set -e
wanwei.jiang1482c872022-05-13 20:33:51 +0800180export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG
181echo 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 +0800182export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT GKI_CONFIG
183echo 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 +0800184
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800185source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
wanwei.jiang612a8882021-11-23 17:12:23 +0800186
187if [ "${ABI}" -eq "1" ]; then
188 export OUT_DIR_SUFFIX="_abi"
189else
190 OUT_DIR_SUFFIX=
191fi
192
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800193echo SAVEDEFCONFIG=${SAVEDEFCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
194if [[ -n ${SAVEDEFCONFIG} ]] || [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800195
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800196 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
197 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
wanwei.jiang612a8882021-11-23 17:12:23 +0800198
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800199 if [[ -n ${SAVEDEFCONFIG} ]]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800200 set -x
201 pre_defconfig_cmds
202 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
wanwei.jiang5d97ab12022-07-25 21:30:39 +0800203 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" savedefconfig)
wanwei.jiang612a8882021-11-23 17:12:23 +0800204 post_defconfig_cmds
205 set +x
206 fi
207 if [[ -n ${IMAGE} ]]; then
208 set -x
209 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
210 set +x
211 fi
212 if [[ -n ${MODULES} ]]; then
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +0800213 if [[ ${IN_KERNEL_MODULES} -eq "1" ]];
wanwei.jiang612a8882021-11-23 17:12:23 +0800214 then
215 set -x
216 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
217 set +x
218 else
219 echo EXT_MODULES=$EXT_MODULES
220 set -x
221 prepare_module_build
222 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
223 echo "========================================================"
224 echo " Building external modules and installing them into staging directory"
225
226 MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
227 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
228 for EXT_MOD in ${EXT_MODULES}; do
229 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
230 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
231 set -x
232 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
233 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
234 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
235 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
236 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
237 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
238 "${MAKE_ARGS[@]}" modules_install
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800239 set +x
wanwei.jiang612a8882021-11-23 17:12:23 +0800240 done
241 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800242 set +x
243 fi
244 fi
245 if [[ -n ${DTB_BUILD} ]]; then
246 set -x
247 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
248 set +x
249 fi
250 exit
251fi
252
253if [ "${ABI}" -eq "1" ]; then
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800254 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800255else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800256 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800257fi
258
wanwei.jiangc663c4c2022-06-16 14:41:23 +0800259source ${KERNEL_BUILD_VAR_FILE}
260if [[ -n ${RM_KERNEL_BUILD_VAR_FILE} ]]; then
261 rm -f ${KERNEL_BUILD_VAR_FILE}
262fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800263
wanwei.jiang236e9a32021-12-07 16:34:14 +0800264echo "========================================================"
wanwei.jiangf73b2202022-07-23 16:00:44 +0800265if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
266 echo "Rebuild rootfs in order to install modules!"
267 rebuild_rootfs
268else
269 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 +0800270fi
wanwei.jiang236e9a32021-12-07 16:34:14 +0800271set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800272
273if [[ ${MODULES_DEPEND} -eq "1" ]]; then
274 echo "========================================================"
275 echo "print modules depend"
276 check_undefined_symbol
277fi