blob: 91c96f6bee27e5ac864724f9dad6c78bf4fc541b [file] [log] [blame]
Jeevan Shriram971497b2019-05-09 11:59:29 -07001#!/bin/bash -xE
2
Gaurav Kohli21f739b2020-06-17 14:24:49 +05303# Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
Jeevan Shriram971497b2019-05-09 11:59:29 -07004# Not a Contribution.
5#
6# Copyright (C) 2019 The Android Open Source Project
7#
8# Licensed under the Apache License, Version 2.0 (the "License");
9# you may not use this file except in compliance with the License.
10# You may obtain a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing, software
15# distributed under the License is distributed on an "AS IS" BASIS,
16# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17# See the License for the specific language governing permissions and
18# limitations under the License.
19
20# Usage:
21# build/build.sh <make options>*
22#
23# The kernel is built in ${COMMON_OUT_DIR}/${KERNEL_DIR}.
24
25set -e
26
27export ROOT_DIR=$(readlink -f $(dirname $0)/../../..)
28export MAKE_ARGS=$@
29export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out/${BRANCH}})
30export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR})
31export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
32export KERNEL_PREBUILT_DIR=$(readlink -m ${KERNEL_DIR}/../ship_prebuilt)
33export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
34export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
35export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
36export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 ARCH SUBARCH
37
38#Setting up for build
39PREBUILT_KERNEL_IMAGE=$(basename ${TARGET_PREBUILT_INT_KERNEL})
40IMAGE_FILE_PATH=arch/${ARCH}/boot
41KERNEL_GEN_HEADERS=include
42ARCH_GEN_HEADERS=arch/${ARCH}/include
43ARCH_GEN_HEADERS_LOC=arch/${ARCH}
44KERNEL_SCRIPTS=scripts
45FILES="
46vmlinux
47System.map
48"
49PRIMARY_KERN_BINS=${KERNEL_PREBUILT_DIR}/primary_kernel
50SECONDARY_KERN_BINS=${KERNEL_PREBUILT_DIR}/secondary_kernel
Jeevan Shriram971497b2019-05-09 11:59:29 -070051
Karsten Tauschee86183c2023-07-26 10:35:41 +020052target_includes_without_device_kernel()
53{
54 echo -n "${TARGET_INCLUDES}" | tr ' ' '\n' | grep -vF 'kernel/msm-4.19/include/uapi' | tr '\n' ' '
55}
56
Gaurav Kohli21f739b2020-06-17 14:24:49 +053057debugfs_disable()
58{
Tengfei Fan3743ed62020-09-11 09:51:50 +080059 if [ ${TARGET_BUILD_VARIANT} == "user" ]; then
Gaurav Kohli21f739b2020-06-17 14:24:49 +053060 echo "combining fragments for user build"
61 (cd ${KERNEL_DIR} && \
62 ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} \
63 ./scripts/kconfig/merge_config.sh ./arch/${ARCH}/configs/$DEFCONFIG ./arch/$ARCH/configs/vendor/debugfs.config
Karsten Tauschee86183c2023-07-26 10:35:41 +020064 ${MAKE_PATH}make ${MAKE_ARGS} HOSTCFLAGS="$(target_includes_without_device_kernel)" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} savedefconfig
Gaurav Kohli21f739b2020-06-17 14:24:49 +053065 mv defconfig ./arch/${ARCH}/configs/$DEFCONFIG
66 ${MAKE_PATH}make mrproper)
67 else
Tengfei Fan3743ed62020-09-11 09:51:50 +080068 if [[ ${DEFCONFIG} == *"perf_defconfig" ]]; then
Gaurav Kohli21f739b2020-06-17 14:24:49 +053069 echo "resetting perf defconfig"
70 (cd ${KERNEL_DIR} && \
71 git checkout arch/$ARCH/configs/$DEFCONFIG)
72 fi
73 fi
74}
75
Jeevan Shriram971497b2019-05-09 11:59:29 -070076#defconfig
77make_defconfig()
78{
79 if [ -z "${SKIP_DEFCONFIG}" ] ; then
80 echo "======================"
81 echo "Building defconfig"
82 set -x
83 (cd ${KERNEL_DIR} && \
Karsten Tauschee86183c2023-07-26 10:35:41 +020084 ${MAKE_PATH}make O=${OUT_DIR} ${MAKE_ARGS} HOSTCFLAGS="$(target_includes_without_device_kernel)" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} ${DEFCONFIG})
Jeevan Shriram971497b2019-05-09 11:59:29 -070085 set +x
86 fi
87}
88
89#Install headers
90headers_install()
91{
92 echo "======================"
93 echo "Installing kernel headers"
94 set -x
95 (cd ${OUT_DIR} && \
Karsten Tauschee86183c2023-07-26 10:35:41 +020096 ${MAKE_PATH}make HOSTCFLAGS="$(target_includes_without_device_kernel)" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} O=${OUT_DIR} ${CC_ARG} ${MAKE_ARGS} headers_install)
Jeevan Shriram971497b2019-05-09 11:59:29 -070097 set +x
98}
99
100# Building Kernel
101build_kernel()
102{
103 echo "======================"
104 echo "Building kernel"
105 set -x
106 (cd ${OUT_DIR} && \
Karsten Tauschee86183c2023-07-26 10:35:41 +0200107 ${MAKE_PATH}make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} HOSTCFLAGS="$(target_includes_without_device_kernel)" HOSTLDFLAGS="${TARGET_LINCLUDES}" O=${OUT_DIR} ${CC_ARG} ${MAKE_ARGS} -j$(nproc))
Jeevan Shriram971497b2019-05-09 11:59:29 -0700108 set +x
109}
110
111# Modules Install
112modules_install()
113{
114 echo "======================"
115 echo "Installing kernel modules"
116 rm -rf ${MODULES_STAGING_DIR}
117 mkdir -p ${MODULES_STAGING_DIR}
118 set -x
119 (cd ${OUT_DIR} && \
Jeevan Shriram55b17882020-01-22 13:23:11 -0800120 ${MAKE_PATH}make O=${OUT_DIR} ${CC_ARG} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} ${MAKE_ARGS} modules_install)
Jeevan Shriram971497b2019-05-09 11:59:29 -0700121 set +x
122}
123
124copy_modules_to_prebuilt()
125{
126 PREBUILT_OUT=$1
127
128 if [[ ! -e ${KERNEL_MODULES_OUT} ]]; then
129 mkdir -p ${KERNEL_MODULES_OUT}
130 fi
131
132 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
133 if [ -n "${MODULES}" ]; then
134 echo "======================"
135 echo " Copying modules files"
136 for FILE in ${MODULES}; do
137 echo "${FILE#${KERNEL_MODULES_OUT}/}"
138 cp -p ${FILE} ${KERNEL_MODULES_OUT}
139
140 # Copy for prebuilt
141 if [ ! -e ${PREBUILT_OUT}/${KERNEL_MODULES_OUT} ]; then
142 mkdir -p ${PREBUILT_OUT}/${KERNEL_MODULES_OUT}
143 fi
144 cp -p ${FILE} ${PREBUILT_OUT}/${KERNEL_MODULES_OUT}
145 done
146 fi
Jeevan Shriramae9011b2019-06-17 17:51:50 -0700147
148 echo "Copying module signing certificate into prebuilt"
149 if [[ ! -e ${PREBUILT_OUT}/certs ]]; then
150 mkdir -p ${PREBUILT_OUT}/certs
151 fi
152 cp -p ${OUT_DIR}/certs/*.* ${PREBUILT_OUT}/certs/
Jeevan Shriram971497b2019-05-09 11:59:29 -0700153}
154
155copy_all_to_prebuilt()
156{
157 PREBUILT_OUT=$1
158 echo ${PREBUILT_OUT}
159
160 if [[ ! -e ${PREBUILT_OUT} ]]; then
161 mkdir -p ${PREBUILT_OUT}
162 fi
163
164 copy_modules_to_prebuilt ${PREBUILT_OUT}
165
166 #copy necessary files from the out directory
167 echo "============="
168 echo "Copying files to prebuilt"
169 for FILE in ${FILES}; do
170 if [ -f ${OUT_DIR}/${FILE} ]; then
171 # Copy for prebuilt
172 echo "$FILE ${PREBUILT_OUT}"
173 cp -p ${OUT_DIR}/${FILE} ${PREBUILT_OUT}/
174 echo $FILE copied to ${PREBUILT_OUT}
175 else
176 echo "$FILE does not exist, skipping"
177 fi
178 done
179
180 #copy kernel image
181 echo "============="
182 echo "Copying kernel image to prebuilt"
183 if [ ! -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH} ]; then
184 mkdir -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}
185 fi
186 cp -p ${OUT_DIR}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE} ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE}
187
Jeevan Shriram8009c2a2019-06-05 13:23:02 -0700188 #copy dtbo images to prebuilt
189 echo "============="
190 echo "Copying target dtb/dtbo files to prebuilt"
191 if [ ! -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom ]; then
192 mkdir -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom
193 fi
194 cp -p -r ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtb ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
Rahul Shahare4fd35492020-09-23 16:24:11 +0530195 if [[ -e ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ]]; then
196 cp -p -r ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
197 fi
Jeevan Shriram8009c2a2019-06-05 13:23:02 -0700198
Jeevan Shriram971497b2019-05-09 11:59:29 -0700199 #copy arch generated headers
200 echo "============="
201 echo "Copying arch-specific generated headers to prebuilt"
202 cp -p -r ${OUT_DIR}/${ARCH_GEN_HEADERS} ${PREBUILT_OUT}/${ARCH_GEN_HEADERS_LOC}
203
204 #copy kernel generated headers
205 echo "============="
206 echo "Copying kernel generated headers to prebuilt"
207 cp -p -r ${OUT_DIR}/${KERNEL_GEN_HEADERS} ${PREBUILT_OUT}
208
209 #copy userspace facing headers
210 echo "============"
211 echo "Copying userspace headers to prebuilt"
212 mkdir -p ${PREBUILT_OUT}/usr
213 cp -p -r ${KERNEL_HEADERS_INSTALL}/include ${PREBUILT_OUT}/usr
214
215 #copy kernel scripts
216 echo "============"
217 echo "Copying kernel scripts to prebuilt"
218 cp -p -r ${OUT_DIR}/${KERNEL_SCRIPTS} ${PREBUILT_OUT}
219}
220
Jeevan Shriram971497b2019-05-09 11:59:29 -0700221copy_from_prebuilt()
222{
223 PREBUILT_OUT=$1
224 cd ${ROOT_DIR}
225
226 if [ ! -e ${OUT_DIR} ]; then
227 mkdir -p ${OUT_DIR}
228 fi
229
230 #Copy userspace headers
231 echo "============"
232 echo "Copying userspace headers from prebuilt"
233 mkdir -p ${KERNEL_HEADERS_INSTALL}
234 cp -p -r ${PREBUILT_OUT}/usr/include ${ROOT_DIR}/${KERNEL_HEADERS_INSTALL}
235
236 #Copy files, such as System.map, vmlinux, etc
237 echo "============"
238 echo "Copying kernel files from prebuilt"
239 cd ${PREBUILT_OUT}
240 for FILE in ${FILES}; do
241 if [ -f ${PREBUILT_OUT}/$FILE ]; then
242 # Copy for prebuilt
243 echo " $FILE ${PREBUILT_OUT}"
244 echo ${PREBUILT_OUT}/${FILE}
245 cp -p ${PREBUILT_OUT}/${FILE} ${OUT_DIR}/
246 echo $FILE copied to ${PREBUILT_OUT}
247 else
248 echo "$FILE does not exist, skipping"
249 fi
250 done
251
252 #copy kernel image
253 echo "============"
254 echo "Copying kernel image from prebuilt"
255 if [ ! -e ${OUT_DIR}/${IMAGE_FILE_PATH} ]; then
256 mkdir -p ${OUT_DIR}/${IMAGE_FILE_PATH}
257 fi
258 cp -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE} ${OUT_DIR}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE}
259
Jeevan Shriram8009c2a2019-06-05 13:23:02 -0700260 #copy dtbo images from prebuilt
261 echo "============="
262 echo "Copying dtb/dtbo files from prebuilt"
263 if [ ! -e ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom ]; then
264 mkdir -p ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom
265 fi
266 cp -p -r ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtb ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
Rahul Shahare4fd35492020-09-23 16:24:11 +0530267 if [[ -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ]]; then
268 cp -p -r ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
269 fi
Jeevan Shriram8009c2a2019-06-05 13:23:02 -0700270
Jeevan Shriram971497b2019-05-09 11:59:29 -0700271 #copy arch generated headers, and kernel generated headers
272 echo "============"
273 echo "Copying arch-specific generated headers from prebuilt"
274 cp -p -r ${PREBUILT_OUT}/${ARCH_GEN_HEADERS} ${OUT_DIR}/${ARCH_GEN_HEADERS_LOC}
275 echo "============"
276 echo "Copying kernel generated headers from prebuilt"
277 cp -p -r ${PREBUILT_OUT}/${KERNEL_GEN_HEADERS} ${OUT_DIR}
278
279 #copy modules
280 echo "============"
281 echo "Copying kernel modules from prebuilt"
282 cd ${ROOT_DIR}
283 MODULES=$(find ${PREBUILT_OUT} -type f -name "*.ko")
284 if [ ! -e ${KERNEL_MODULES_OUT} ]; then
285 mkdir -p ${KERNEL_MODULES_OUT}
286 fi
287 for FILE in ${MODULES}; do
288 echo "Copy ${FILE#${KERNEL_MODULES_OUT}/}"
289 cp -p ${FILE} ${KERNEL_MODULES_OUT}
290 done
291
292 #copy scripts directory
293 echo "============"
294 echo "Copying kernel scripts from prebuilt"
295 cp -p -r ${PREBUILT_OUT}/${KERNEL_SCRIPTS} ${OUT_DIR}
Jeevan Shriramae9011b2019-06-17 17:51:50 -0700296
297 echo "Copying sign certificates from prebuilt"
298 if [[ ! -e ${OUT_DIR}/certs ]]; then
299 mkdir -p ${OUT_DIR}/certs
300 fi
301 cp -p -r ${PREBUILT_OUT}/certs ${OUT_DIR}
302
Jeevan Shriram971497b2019-05-09 11:59:29 -0700303}
304
305#script starts executing here
306if [ -n "${CC}" ]; then
307 CC_ARG="CC=${CC}"
308fi
309
310#choose between secondary and primary kernel image
311if [[ ${DEFCONFIG} == *"perf_defconfig" ]]; then
312 KERNEL_BINS=${SECONDARY_KERN_BINS}
313else
314 KERNEL_BINS=${PRIMARY_KERN_BINS}
315fi
316
yixiang.wu924f85b2021-01-21 13:45:52 +0800317debugfs_disable
Jeevan Shriram971497b2019-05-09 11:59:29 -0700318#use prebuilts if we want to use them, and they are available
319if [ ! -z ${USE_PREBUILT_KERNEL} ] && [ -d ${KERNEL_BINS} ]; then
Jeevan Shriramae9011b2019-06-17 17:51:50 -0700320 make_defconfig
Jeevan Shriram971497b2019-05-09 11:59:29 -0700321 copy_from_prebuilt ${KERNEL_BINS}
322 exit 0
323fi
324
325#use kernel source for building
326if [ ! -z ${HEADERS_INSTALL} ]; then
327 make_defconfig
328 headers_install
329else
330 make_defconfig
331 headers_install
332 build_kernel
333 modules_install
334 copy_all_to_prebuilt ${KERNEL_BINS}
Jeevan Shriram971497b2019-05-09 11:59:29 -0700335fi
336
337exit 0