blob: e983ad1aab7443d05893ecccf146e19587feee03 [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.jiang612a8882021-11-23 17:12:23 +080019}
wanwei.jiang612a8882021-11-23 17:12:23 +080020
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080021VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080022ARGS=()
23for i in "$@"
24do
25 case $i in
wanwei.jiang612a8882021-11-23 17:12:23 +080026 --abi)
27 ABI=1
28 shift
29 ;;
30 --build_config)
31 BUILD_CONFIG=$2
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080032 VA=1
wanwei.jiang612a8882021-11-23 17:12:23 +080033 shift
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080034 ;;
wanwei.jiangd7b29ef2021-12-01 19:59:41 +080035 --lto)
36 LTO=$2
37 VA=1
38 shift
39 ;;
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080040 --symbol_strict)
41 KMI_SYMBOL_LIST_STRICT_MODE=$2
42 VA=1
43 shift
wanwei.jiang612a8882021-11-23 17:12:23 +080044 ;;
45 --menuconfig)
46 MENUCONFIG=1
47 shift
48 ;;
49 --image)
50 IMAGE=1
51 shift
52 ;;
53 --modules)
54 MODULES=1
55 shift
56 break
57 ;;
58 --dtbs)
59 DTB_BUILD=1
60 shift
61 ;;
wanwei.jiang7ef5fd42022-02-18 16:36:19 +080062 --kernel_dir)
63 KERNEL_DIR=$2
64 VA=1
65 shift
66 ;;
67 --common_drivers_dir)
68 COMMON_DRIVERS_DIR=$2
69 VA=1
70 shift
71 ;;
72 --build_dir)
73 BUILD_DIR=$2
74 VA=1
75 shift
76 ;;
wanwei.jiang1482c872022-05-13 20:33:51 +080077 --check_defconfig)
78 CHECK_DEFCONFIG=1
79 shift
80 ;;
81 --modules_depend)
82 MODULES_DEPEND=1
83 shift
84 ;;
wanwei.jiang612a8882021-11-23 17:12:23 +080085 -h|--help)
86 show_help
87 exit 0
88 ;;
89 *)
90 if [[ -n $1 ]];
91 then
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080092 if [[ -z ${VA} ]];
93 then
94 ARGS+=("$1")
95 fi
wanwei.jiang612a8882021-11-23 17:12:23 +080096 fi
wanwei.jiang5c8d2b62021-11-26 20:36:33 +080097 VA=
wanwei.jiang612a8882021-11-23 17:12:23 +080098 shift
99 ;;
100 esac
101done
wanwei.jiang612a8882021-11-23 17:12:23 +0800102set -- "${ARGS[@]}" # other parameters are used as script parameters of build_abi.sh or build.sh
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800103
104export ROOT_DIR=$(readlink -f $(dirname $0))
105 # amlogic parameters default value
106if [[ -z "${ABI}" ]]; then
107 ABI=0
108fi
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800109if [[ -z "${LTO}" ]]; then
110 LTO=thin
111fi
112if [[ -z "${KERNEL_DIR}" ]]; then
113 KERNEL_DIR=common
114fi
115if [[ ! -f ${KERNEL_DIR}/init/main.c ]]; then
116 echo "The directory of kernel does not exist";
117 exit
118fi
119if [[ -z "${COMMON_DRIVERS_DIR}" ]]; then
120 if [[ -d ${KERNEL_DIR}/../common_drivers ]]; then
121 COMMON_DRIVERS_DIR=../common_drivers
122 elif [[ -d "${KERNEL_DIR}/common_drivers" ]]; then
123 COMMON_DRIVERS_DIR=common_drivers
124 fi
125fi
126if [[ ! -f ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/amlogic_utils.sh ]]; then
127 echo "The directory of common_drivers does not exist";
128 exit
129fi
130if [[ -z "${BUILD_CONFIG}" ]]; then
131 BUILD_CONFIG=${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
132fi
133if [[ -z "${BUILD_DIR}" ]]; then
134 BUILD_DIR=build
135fi
136if [[ ! -f ${BUILD_DIR}/build_abi.sh ]]; then
137 echo "The directory of build does not exist";
138fi
139
wanwei.jiang1482c872022-05-13 20:33:51 +0800140CHECK_DEFCONFIG=${CHECK_DEFCONFIG:-0}
141MODULES_DEPEND=${MODULES_DEPEND:-0}
142
wanwei.jiang236e9a32021-12-07 16:34:14 +0800143set -e
wanwei.jiang1482c872022-05-13 20:33:51 +0800144export ABI BUILD_CONFIG LTO KMI_SYMBOL_LIST_STRICT_MODE CHECK_DEFCONFIG
145echo ABI=${ABI} BUILD_CONFIG=${BUILD_CONFIG} LTO=${LTO} KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE} CHECK_DEFCONFIG=${CHECK_DEFCONFIG}
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800146export KERNEL_DIR COMMON_DRIVERS_DIR BUILD_DIR
147echo KERNEL_DIR=${KERNEL_DIR} COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR} BUILD_DIR=${BUILD_DIR}
wanwei.jiang5c8d2b62021-11-26 20:36:33 +0800148
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800149source ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/build.config.amlogic
wanwei.jiang612a8882021-11-23 17:12:23 +0800150
151if [ "${ABI}" -eq "1" ]; then
152 export OUT_DIR_SUFFIX="_abi"
153else
154 OUT_DIR_SUFFIX=
155fi
156
157echo MENUCONFIG=${MENUCONFIG} IMAGE=${IMAGE} MODULES=${MODULES} DTB_BUILD=${DTB_BUILD}
158if [[ -n ${MENUCONFIG} ]] || [[ -n ${IMAGE} ]] || [[ -n ${MODULES} ]] || [[ -n ${DTB_BUILD} ]]; then
159
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800160 source "${ROOT_DIR}/${BUILD_DIR}/_setup_env.sh"
161 source "${ROOT_DIR}/${BUILD_DIR}/build_utils.sh"
wanwei.jiang612a8882021-11-23 17:12:23 +0800162
163 if [[ -n ${MENUCONFIG} ]]; then
164 set -x
165 pre_defconfig_cmds
166 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" ${DEFCONFIG})
167 (cd ${KERNEL_DIR} && make ${TOOL_ARGS} O=${OUT_DIR} "${MAKE_ARGS[@]}" menuconfig)
168 post_defconfig_cmds
169 set +x
170 fi
171 if [[ -n ${IMAGE} ]]; then
172 set -x
173 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) Image)
174 set +x
175 fi
176 if [[ -n ${MODULES} ]]; then
wanwei.jiangb9ad1ef2021-12-27 15:23:30 +0800177 if [[ ${IN_KERNEL_MODULES} -eq "1" ]];
wanwei.jiang612a8882021-11-23 17:12:23 +0800178 then
179 set -x
180 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) modules)
181 set +x
182 else
183 echo EXT_MODULES=$EXT_MODULES
184 set -x
185 prepare_module_build
186 if [[ -z "${SKIP_EXT_MODULES}" ]] && [[ -n "${EXT_MODULES}" ]]; then
187 echo "========================================================"
188 echo " Building external modules and installing them into staging directory"
189
190 MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
191 KERNEL_UAPI_HEADERS_DIR=$(readlink -m ${COMMON_OUT_DIR}/kernel_uapi_headers)
192 for EXT_MOD in ${EXT_MODULES}; do
193 EXT_MOD_REL=$(rel_path ${ROOT_DIR}/${EXT_MOD} ${KERNEL_DIR})
194 mkdir -p ${OUT_DIR}/${EXT_MOD_REL}
195 set -x
196 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
197 O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}"
198 make -C ${EXT_MOD} M=${EXT_MOD_REL} KERNEL_SRC=${ROOT_DIR}/${KERNEL_DIR} \
199 O=${OUT_DIR} ${TOOL_ARGS} ${MODULE_STRIP_FLAG} \
200 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} \
201 INSTALL_HDR_PATH="${KERNEL_UAPI_HEADERS_DIR}/usr" \
202 "${MAKE_ARGS[@]}" modules_install
wanwei.jiangd7b29ef2021-12-01 19:59:41 +0800203 set +x
wanwei.jiang612a8882021-11-23 17:12:23 +0800204 done
205 fi
wanwei.jiang612a8882021-11-23 17:12:23 +0800206 set +x
207 fi
208 fi
209 if [[ -n ${DTB_BUILD} ]]; then
210 set -x
211 (cd ${OUT_DIR} && make O=${OUT_DIR} ${TOOL_ARGS} "${MAKE_ARGS[@]}" -j$(nproc) dtbs)
212 set +x
213 fi
214 exit
215fi
216
217if [ "${ABI}" -eq "1" ]; then
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800218 ${ROOT_DIR}/${BUILD_DIR}/build_abi.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800219else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800220 ${ROOT_DIR}/${BUILD_DIR}/build.sh "$@"
wanwei.jiang612a8882021-11-23 17:12:23 +0800221fi
222
223echo "========================================================"
224echo ""
225export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out${OUT_DIR_SUFFIX}/${BRANCH}})
226export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR}/${KERNEL_DIR})
227export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
228export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
229echo 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 +0800230
wanwei.jiang236e9a32021-12-07 16:34:14 +0800231echo "========================================================"
232echo "prepare modules"
233modules_install
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800234if [ -f ${ROOT_DIR}/${KERNEL_DIR}/${COMMON_DRIVERS_DIR}/rootfs_base.cpio.gz.uboot ]; then
wanwei.jiang612a8882021-11-23 17:12:23 +0800235 echo "Rebuild rootfs in order to install modules!"
236 rebuild_rootfs
237else
wanwei.jiang7ef5fd42022-02-18 16:36:19 +0800238 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 +0800239fi
wanwei.jiang236e9a32021-12-07 16:34:14 +0800240set +e
wanwei.jiang1482c872022-05-13 20:33:51 +0800241
242if [[ ${MODULES_DEPEND} -eq "1" ]]; then
243 echo "========================================================"
244 echo "print modules depend"
245 check_undefined_symbol
246fi