blob: 33a19e5bb2d27974815c46ab71acd11e31c4db37 [file] [log] [blame]
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -07001#!/bin/bash -xE
2
3# Copyright (c) 2019 The Linux Foundation. All rights reserved.
4# 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})
Raghavendra Rao Anantaebec6142020-04-03 19:55:31 -070035export UNSTRIPPED_DIR=${ROOT_DIR}/${KERNEL_MODULES_OUT}/unstripped
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -070036export 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
51KERN_SHA1_LOC=${KERNEL_PREBUILT_DIR}/kernel_sha1.txt
52
53#defconfig
54make_defconfig()
55{
56 if [ -z "${SKIP_DEFCONFIG}" ] ; then
57 echo "======================"
58 echo "Building defconfig"
59 set -x
60 (cd ${KERNEL_DIR} && \
Jeevan Shriram10862162020-01-22 13:23:11 -080061 ${MAKE_PATH}make O=${OUT_DIR} ${MAKE_ARGS} HOSTCFLAGS="${TARGET_INCLUDES}" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} ${DEFCONFIG})
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -070062 set +x
63 fi
64}
65
66#Install headers
67headers_install()
68{
69 echo "======================"
70 echo "Installing kernel headers"
71 set -x
72 (cd ${OUT_DIR} && \
Jeevan Shriram10862162020-01-22 13:23:11 -080073 ${MAKE_PATH}make HOSTCFLAGS="${TARGET_INCLUDES}" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} O=${OUT_DIR} ${CC_ARG} ${MAKE_ARGS} headers_install)
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -070074 set +x
75}
76
77# Building Kernel
78build_kernel()
79{
80 echo "======================"
81 echo "Building kernel"
82 set -x
83 (cd ${OUT_DIR} && \
Jeevan Shriram10862162020-01-22 13:23:11 -080084 ${MAKE_PATH}make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} HOSTCFLAGS="${TARGET_INCLUDES}" HOSTLDFLAGS="${TARGET_LINCLUDES}" O=${OUT_DIR} ${CC_ARG} ${MAKE_ARGS} -j$(nproc))
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -070085 set +x
86}
87
88# Modules Install
89modules_install()
90{
91 echo "======================"
92 echo "Installing kernel modules"
93 rm -rf ${MODULES_STAGING_DIR}
94 mkdir -p ${MODULES_STAGING_DIR}
95 set -x
96 (cd ${OUT_DIR} && \
Jeevan Shriram10862162020-01-22 13:23:11 -080097 ${MAKE_PATH}make O=${OUT_DIR} ${CC_ARG} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} ${MAKE_ARGS} modules_install)
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -070098 set +x
99}
100
Raghavendra Rao Ananta5b25c802019-11-13 22:11:15 -0800101
102archive_kernel_modules()
103{
104 echo "======================"
105 pushd ${KERNEL_MODULES_OUT}
106
107 # Zip the vendor-ramdisk kernel modules
108 FINAL_RAMDISK_KERNEL_MODULES=""
109 for MODULE in ${VENDOR_RAMDISK_KERNEL_MODULES}; do
110 if [ -f "${MODULE}" ]; then
111 FINAL_RAMDISK_KERNEL_MODULES="${FINAL_RAMDISK_KERNEL_MODULES} ${MODULE}"
112 fi
113 done
114
115 echo "Archiving vendor ramdisk kernel modules: "
116 echo ${FINAL_RAMDISK_KERNEL_MODULES}
117
118 if [ ! -z "${FINAL_RAMDISK_KERNEL_MODULES}" ]; then
119 zip -rq ${VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE} ${FINAL_RAMDISK_KERNEL_MODULES}
120 fi
121
122 # Filter-out the modules in vendor-ramdisk and zip the vendor kernel modules
123 VENDOR_KERNEL_MODULES=`ls *.ko`
124 for MODULE in ${FINAL_RAMDISK_KERNEL_MODULES}; do
125 VENDOR_KERNEL_MODULES=`echo ${VENDOR_KERNEL_MODULES} | sed "s/${MODULE}//g"`
126 done
127
128 echo "Archiving vendor kernel modules: "
129 echo ${VENDOR_KERNEL_MODULES}
130
131 # Also package the modules.blacklist file
132 set -x
133 BLACKLIST_FILE=""
134 if [ -f "modules.blacklist" ]; then
135 BLACKLIST_FILE="modules.blacklist"
136 fi
137
138 zip -rq ${VENDOR_KERNEL_MODULES_ARCHIVE} ${VENDOR_KERNEL_MODULES} ${BLACKLIST_FILE}
139 set +x
140
141 popd
142}
143
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -0700144copy_modules_to_prebuilt()
145{
146 PREBUILT_OUT=$1
147
Raghavendra Rao Ananta822f8202020-03-12 22:56:37 -0700148 # Clean the DLKM directory to remove stale modules
149 rm -rf ${KERNEL_MODULES_OUT}
150
151 mkdir -p ${KERNEL_MODULES_OUT}
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -0700152
153 MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
154 if [ -n "${MODULES}" ]; then
155 echo "======================"
156 echo " Copying modules files"
157 for FILE in ${MODULES}; do
158 echo "${FILE#${KERNEL_MODULES_OUT}/}"
159 cp -p ${FILE} ${KERNEL_MODULES_OUT}
160
161 # Copy for prebuilt
162 if [ ! -e ${PREBUILT_OUT}/${KERNEL_MODULES_OUT} ]; then
163 mkdir -p ${PREBUILT_OUT}/${KERNEL_MODULES_OUT}
164 fi
165 cp -p ${FILE} ${PREBUILT_OUT}/${KERNEL_MODULES_OUT}
166 done
167 fi
168
169 echo "Copying module signing certificate into prebuilt"
170 if [[ ! -e ${PREBUILT_OUT}/certs ]]; then
171 mkdir -p ${PREBUILT_OUT}/certs
172 fi
173 cp -p ${OUT_DIR}/certs/*.* ${PREBUILT_OUT}/certs/
Raghavendra Rao Ananta5b25c802019-11-13 22:11:15 -0800174
175 # Copy the modules.blacklist file
176 set -x
177 BLACKLIST_FILE=${PWD}/device/qcom/kernelscripts/modules_blacklist/modules.blacklist.${TARGET_PRODUCT}
178 if [ -f "${BLACKLIST_FILE}" ]; then
179 cp ${BLACKLIST_FILE} ${KERNEL_MODULES_OUT}/modules.blacklist
180 fi
181 set +x
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -0700182}
183
184copy_all_to_prebuilt()
185{
186 PREBUILT_OUT=$1
187 echo ${PREBUILT_OUT}
188
189 if [[ ! -e ${PREBUILT_OUT} ]]; then
190 mkdir -p ${PREBUILT_OUT}
191 fi
192
193 copy_modules_to_prebuilt ${PREBUILT_OUT}
194
195 #copy necessary files from the out directory
196 echo "============="
197 echo "Copying files to prebuilt"
198 for FILE in ${FILES}; do
199 if [ -f ${OUT_DIR}/${FILE} ]; then
200 # Copy for prebuilt
201 echo "$FILE ${PREBUILT_OUT}"
202 cp -p ${OUT_DIR}/${FILE} ${PREBUILT_OUT}/
203 echo $FILE copied to ${PREBUILT_OUT}
204 else
205 echo "$FILE does not exist, skipping"
206 fi
207 done
208
209 #copy kernel image
210 echo "============="
211 echo "Copying kernel image to prebuilt"
212 if [ ! -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH} ]; then
213 mkdir -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}
214 fi
215 cp -p ${OUT_DIR}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE} ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE}
216
217 #copy dtbo images to prebuilt
218 echo "============="
219 echo "Copying target dtb/dtbo files to prebuilt"
220 if [ ! -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom ]; then
221 mkdir -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom
222 fi
223 cp -p -r ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtb ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
224
225 if [ -f ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ]; then
226 cp -p -r ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
227 fi
228
229 #copy arch generated headers
230 echo "============="
231 echo "Copying arch-specific generated headers to prebuilt"
232 cp -p -r ${OUT_DIR}/${ARCH_GEN_HEADERS} ${PREBUILT_OUT}/${ARCH_GEN_HEADERS_LOC}
233
234 #copy kernel generated headers
235 echo "============="
236 echo "Copying kernel generated headers to prebuilt"
237 cp -p -r ${OUT_DIR}/${KERNEL_GEN_HEADERS} ${PREBUILT_OUT}
238
239 #copy userspace facing headers
240 echo "============"
241 echo "Copying userspace headers to prebuilt"
242 mkdir -p ${PREBUILT_OUT}/usr
243 cp -p -r ${KERNEL_HEADERS_INSTALL}/include ${PREBUILT_OUT}/usr
244
245 #copy kernel scripts
246 echo "============"
247 echo "Copying kernel scripts to prebuilt"
248 cp -p -r ${OUT_DIR}/${KERNEL_SCRIPTS} ${PREBUILT_OUT}
249}
250
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -0700251copy_from_prebuilt()
252{
253 PREBUILT_OUT=$1
254 cd ${ROOT_DIR}
255
256 if [ ! -e ${OUT_DIR} ]; then
257 mkdir -p ${OUT_DIR}
258 fi
259
260 #Copy userspace headers
261 echo "============"
262 echo "Copying userspace headers from prebuilt"
263 mkdir -p ${KERNEL_HEADERS_INSTALL}
264 cp -p -r ${PREBUILT_OUT}/usr/include ${ROOT_DIR}/${KERNEL_HEADERS_INSTALL}
265
266 #Copy files, such as System.map, vmlinux, etc
267 echo "============"
268 echo "Copying kernel files from prebuilt"
269 cd ${PREBUILT_OUT}
270 for FILE in ${FILES}; do
271 if [ -f ${PREBUILT_OUT}/$FILE ]; then
272 # Copy for prebuilt
273 echo " $FILE ${PREBUILT_OUT}"
274 echo ${PREBUILT_OUT}/${FILE}
275 cp -p ${PREBUILT_OUT}/${FILE} ${OUT_DIR}/
276 echo $FILE copied to ${PREBUILT_OUT}
277 else
278 echo "$FILE does not exist, skipping"
279 fi
280 done
281
282 #copy kernel image
283 echo "============"
284 echo "Copying kernel image from prebuilt"
285 if [ ! -e ${OUT_DIR}/${IMAGE_FILE_PATH} ]; then
286 mkdir -p ${OUT_DIR}/${IMAGE_FILE_PATH}
287 fi
288 cp -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE} ${OUT_DIR}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE}
289
290 #copy dtbo images from prebuilt
291 echo "============="
292 echo "Copying dtb/dtbo files from prebuilt"
293 if [ ! -e ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom ]; then
294 mkdir -p ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom
295 fi
296 cp -p -r ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtb ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
297 cp -p -r ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
298
299 #copy arch generated headers, and kernel generated headers
300 echo "============"
301 echo "Copying arch-specific generated headers from prebuilt"
302 cp -p -r ${PREBUILT_OUT}/${ARCH_GEN_HEADERS} ${OUT_DIR}/${ARCH_GEN_HEADERS_LOC}
303 echo "============"
304 echo "Copying kernel generated headers from prebuilt"
305 cp -p -r ${PREBUILT_OUT}/${KERNEL_GEN_HEADERS} ${OUT_DIR}
306
307 #copy modules
308 echo "============"
309 echo "Copying kernel modules from prebuilt"
310 cd ${ROOT_DIR}
311 MODULES=$(find ${PREBUILT_OUT} -type f -name "*.ko")
312 if [ ! -e ${KERNEL_MODULES_OUT} ]; then
313 mkdir -p ${KERNEL_MODULES_OUT}
314 fi
315 for FILE in ${MODULES}; do
316 echo "Copy ${FILE#${KERNEL_MODULES_OUT}/}"
317 cp -p ${FILE} ${KERNEL_MODULES_OUT}
318 done
319
320 #copy scripts directory
321 echo "============"
322 echo "Copying kernel scripts from prebuilt"
323 cp -p -r ${PREBUILT_OUT}/${KERNEL_SCRIPTS} ${OUT_DIR}
324
325 echo "Copying sign certificates from prebuilt"
326 if [[ ! -e ${OUT_DIR}/certs ]]; then
327 mkdir -p ${OUT_DIR}/certs
328 fi
329 cp -p -r ${PREBUILT_OUT}/certs ${OUT_DIR}
330
331}
332
Raghavendra Rao Anantaebec6142020-04-03 19:55:31 -0700333save_unstripped_modules()
334{
335 echo "======================"
336 echo "Creating a copy of unstripped modules"
337 rm -rf ${UNSTRIPPED_DIR}
338 mkdir -p ${UNSTRIPPED_DIR}
339
340 set -x
341
342 (cd ${OUT_DIR} && \
343 ${MAKE_PATH}make O=${OUT_DIR} ${CC_ARG} INSTALL_MOD_PATH=${UNSTRIPPED_DIR} ${MAKE_ARGS} modules_install)
344
345 MODULES=$(find ${UNSTRIPPED_DIR} -type f -name "*.ko")
346 for MODULE in ${MODULES}; do
347 cp -p ${MODULE} ${UNSTRIPPED_DIR}
348 done
349
350 # Remove the /lib/modules/$(uname -r) hierarchy
351 rm -rf ${UNSTRIPPED_DIR}/lib
352
353 set +x
354}
355
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -0700356#script starts executing here
357if [ -n "${CC}" ]; then
358 CC_ARG="CC=${CC}"
359fi
360
361#choose between secondary and primary kernel image
362if [[ ${DEFCONFIG} == *"perf_defconfig" ]]; then
363 KERNEL_BINS=${SECONDARY_KERN_BINS}
364else
365 KERNEL_BINS=${PRIMARY_KERN_BINS}
366fi
367
368#use prebuilts if we want to use them, and they are available
369if [ ! -z ${USE_PREBUILT_KERNEL} ] && [ -d ${KERNEL_BINS} ]; then
370 make_defconfig
371 copy_from_prebuilt ${KERNEL_BINS}
372 exit 0
373fi
374
375#use kernel source for building
376if [ ! -z ${HEADERS_INSTALL} ]; then
377 make_defconfig
378 headers_install
379else
380 make_defconfig
381 headers_install
382 build_kernel
383 modules_install
384 copy_all_to_prebuilt ${KERNEL_BINS}
Raghavendra Rao Ananta5b25c802019-11-13 22:11:15 -0800385 archive_kernel_modules
Raghavendra Rao Anantaebec6142020-04-03 19:55:31 -0700386 save_unstripped_modules
Raghavendra Rao Ananta233f7082019-09-18 16:50:26 -0700387fi
388
389exit 0