blob: 0d724901f9e8d9121026bc64af927614c34260e2 [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.jiang5c8d2b62021-11-26 20:36:33 +080010 echo " --menuconfig for only menuconfig, not require parameter value"
11 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 ;;
46 --menuconfig)
47 MENUCONFIG=1
48 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
110export ROOT_DIR=$(readlink -f $(dirname $0))
111 # amlogic parameters default value
112if [[ -z "${ABI}" ]]; then
113 ABI=0
114fi
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800115if [[ -z "${LTO}" ]]; then
116 LTO=thin
117fi
118if [[ -z "${KERNEL_DIR}" ]]; then
119 KERNEL_DIR=common
120fi
121if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
122 echo "The directory of kernel does not exist";
123 exit
124fi
125if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
126 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
127 COMMON_DRIVERS_DIR=../common_drivers
128 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
129 COMMON_DRIVERS_DIR=common_drivers
130 fi
131fi
132if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
133 echo "The directory of common_drivers does not exist";
134 exit
135fi
136if [[ -z "${BUILD_CONFIG}" ]]; then
137 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
138fi
139if [[ -z "${BUILD_DIR}" ]]; then
140 BUILD_DIR=build
141fi
142if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
143 echo "The directory of build does not exist";
144fi
145
wanwei.jiang1482c872022-05-13 20:33:51 +0800146CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
147MODULES_DEPEND=${MODULES_DEPEND:-0}
148
wanwei.jiang236e9a32021-12-07 16:34:14 +0800149set -e
wanwei.jiang1482c872022-05-13 20:33:51 +0800150export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG
151echo 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 +0800152export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR ANDROID_PROJECT
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800153echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800154
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800155source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
wanwei.jiang612a8882021-11-23 17:12:23 +0800156
157if [ "${ABI}" -eq "1" ]; then
158 export OUT_DIR_SUFFIX="_abi"
159else
160 OUT_DIR_SUFFIX=
161fi
162
163echo MENUCONFIG=${MENUCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
164if [[ -n ${MENUCONFIG} ]] || [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
165
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800166 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
167 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
wanwei.jiang612a8882021-11-23 17:12:23 +0800168
169 if [[ -n ${MENUCONFIG} ]]; then
170 set -x
171 pre_defconfig_cmds
172 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
173 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
174 post_defconfig_cmds
175 set +x
176 fi
177 if [[ -n ${IMAGE} ]]; then
178 set -x
179 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
180 set +x
181 fi
182 if [[ -n ${MODULES} ]]; then
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +0800183 if [[ ${IN_KERNEL_MODULES} -eq "1" ]];
wanwei.jiang612a8882021-11-23 17:12:23 +0800184 then
185 set -x
186 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
187 set +x
188 else
189 echo EXT_MODULES=$EXT_MODULES
190 set -x
191 prepare_module_build
192 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
193 echo "========================================================"
194 echo " Building external modules and installing them into staging directory"
195
196 MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
197 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
198 for EXT_MOD in ${EXT_MODULES}; do
199 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
200 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
201 set -x
202 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
203 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
204 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
205 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
206 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
207 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
208 "${MAKE_ARGS[@]}" modules_install
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800209 set +x
wanwei.jiang612a8882021-11-23 17:12:23 +0800210 done
211 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800212 set +x
213 fi
214 fi
215 if [[ -n ${DTB_BUILD} ]]; then
216 set -x
217 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
218 set +x
219 fi
220 exit
221fi
222
223if [ "${ABI}" -eq "1" ]; then
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800224 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800225else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800226 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800227fi
228
229echo "========================================================"
230echo ""
231export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
232export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
233export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
234export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
235echo COMMON_OUT_DIR=$COMMON_OUT_DIR OUT_DIR=$OUT_DIR DIST_DIR=$DIST_DIR MODULES_STAGING_DIR=$MODULES_STAGING_DIR KERNEL_DIR=$KERNEL_DIR
wanwei.jiang612a8882021-11-23 17:12:23 +0800236
wanwei.jiang236e9a32021-12-07 16:34:14 +0800237echo "========================================================"
wanwei.jiang3eab75f2022-05-25 00:39:52 +0800238# echo "prepare modules"
239# modules_install
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800240if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800241 echo "Rebuild rootfs in order to install modules!"
242 rebuild_rootfs
243else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800244 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 +0800245fi
wanwei.jiang236e9a32021-12-07 16:34:14 +0800246set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800247
248if [[ ${MODULES_DEPEND} -eq "1" ]]; then
249 echo "========================================================"
250 echo "print modules depend"
251 check_undefined_symbol
252fi