summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaghavendra Rao Ananta <rananta@codeaurora.org>2019-09-18 16:50:26 -0700
committerRaghavendra Rao Ananta <rananta@codeaurora.org>2019-10-01 02:38:41 -0700
commit233f708e8330add542a893d6a857885f746a4d91 (patch)
treea41dd9b067878b54f555c0e833f8a600695fefaf
parent6dda7d78f8bf1dd770e2dc9a5d92b32d6cabfce3 (diff)
kernelscripts: Add snapshots of buildkernel.sh and kernel_definitions.mk
By default, the build.sh provides a mechanism to compile the kernel as a standalone component, and is not helpful to compile from within the Android tree. As a result, add the snapshots of kernel_definitions.mk and buildkernel.sh files to support kernel compilation from within the Android tree. The snaphot is taken from msm-4.19 branch as of commit <0780fd437f12d401c> (kernel/build: remove wildcard entry for updating makefile variable). Change-Id: I63b3859a9c7d7b5bcf19320fe62235f432f9817a
-rwxr-xr-xbuildkernel.sh321
-rwxr-xr-xkernel_definitions.mk211
2 files changed, 532 insertions, 0 deletions
diff --git a/buildkernel.sh b/buildkernel.sh
new file mode 100755
index 0000000..141ddf2
--- /dev/null
+++ b/buildkernel.sh
@@ -0,0 +1,321 @@
+#!/bin/bash -xE
+
+# Copyright (c) 2019 The Linux Foundation. All rights reserved.
+# Not a Contribution.
+#
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Usage:
+# build/build.sh <make options>*
+#
+# The kernel is built in ${COMMON_OUT_DIR}/${KERNEL_DIR}.
+
+set -e
+
+export ROOT_DIR=$(readlink -f $(dirname $0)/../../..)
+export MAKE_ARGS=$@
+export COMMON_OUT_DIR=$(readlink -m ${OUT_DIR:-${ROOT_DIR}/out/${BRANCH}})
+export OUT_DIR=$(readlink -m ${COMMON_OUT_DIR})
+export MODULES_STAGING_DIR=$(readlink -m ${COMMON_OUT_DIR}/staging)
+export KERNEL_PREBUILT_DIR=$(readlink -m ${KERNEL_DIR}/../ship_prebuilt)
+export MODULES_PRIVATE_DIR=$(readlink -m ${COMMON_OUT_DIR}/private)
+export DIST_DIR=$(readlink -m ${DIST_DIR:-${COMMON_OUT_DIR}/dist})
+export UNSTRIPPED_DIR=${DIST_DIR}/unstripped
+export CLANG_TRIPLE CROSS_COMPILE CROSS_COMPILE_ARM32 ARCH SUBARCH
+
+#Setting up for build
+PREBUILT_KERNEL_IMAGE=$(basename ${TARGET_PREBUILT_INT_KERNEL})
+IMAGE_FILE_PATH=arch/${ARCH}/boot
+KERNEL_GEN_HEADERS=include
+ARCH_GEN_HEADERS=arch/${ARCH}/include
+ARCH_GEN_HEADERS_LOC=arch/${ARCH}
+KERNEL_SCRIPTS=scripts
+FILES="
+vmlinux
+System.map
+"
+PRIMARY_KERN_BINS=${KERNEL_PREBUILT_DIR}/primary_kernel
+SECONDARY_KERN_BINS=${KERNEL_PREBUILT_DIR}/secondary_kernel
+KERN_SHA1_LOC=${KERNEL_PREBUILT_DIR}/kernel_sha1.txt
+
+#defconfig
+make_defconfig()
+{
+ if [ -z "${SKIP_DEFCONFIG}" ] ; then
+ echo "======================"
+ echo "Building defconfig"
+ set -x
+ (cd ${KERNEL_DIR} && \
+ make O=${OUT_DIR} ${MAKE_ARGS} HOSTCFLAGS="${TARGET_INCLUDES}" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} ${DEFCONFIG})
+ set +x
+ fi
+}
+
+#Install headers
+headers_install()
+{
+ echo "======================"
+ echo "Installing kernel headers"
+ set -x
+ (cd ${OUT_DIR} && \
+ make HOSTCFLAGS="${TARGET_INCLUDES}" HOSTLDFLAGS="${TARGET_LINCLUDES}" ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} O=${OUT_DIR} ${CC_ARG} ${MAKE_ARGS} headers_install)
+ set +x
+}
+
+# Building Kernel
+build_kernel()
+{
+ echo "======================"
+ echo "Building kernel"
+ set -x
+ (cd ${OUT_DIR} && \
+ make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} HOSTCFLAGS="${TARGET_INCLUDES}" HOSTLDFLAGS="${TARGET_LINCLUDES}" O=${OUT_DIR} ${CC_ARG} ${MAKE_ARGS} -j$(nproc))
+ set +x
+}
+
+# Modules Install
+modules_install()
+{
+ echo "======================"
+ echo "Installing kernel modules"
+ rm -rf ${MODULES_STAGING_DIR}
+ mkdir -p ${MODULES_STAGING_DIR}
+ set -x
+ (cd ${OUT_DIR} && \
+ make O=${OUT_DIR} ${CC_ARG} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=${MODULES_STAGING_DIR} ${MAKE_ARGS} modules_install)
+ set +x
+}
+
+copy_modules_to_prebuilt()
+{
+ PREBUILT_OUT=$1
+
+ if [[ ! -e ${KERNEL_MODULES_OUT} ]]; then
+ mkdir -p ${KERNEL_MODULES_OUT}
+ fi
+
+ MODULES=$(find ${MODULES_STAGING_DIR} -type f -name "*.ko")
+ if [ -n "${MODULES}" ]; then
+ echo "======================"
+ echo " Copying modules files"
+ for FILE in ${MODULES}; do
+ echo "${FILE#${KERNEL_MODULES_OUT}/}"
+ cp -p ${FILE} ${KERNEL_MODULES_OUT}
+
+ # Copy for prebuilt
+ if [ ! -e ${PREBUILT_OUT}/${KERNEL_MODULES_OUT} ]; then
+ mkdir -p ${PREBUILT_OUT}/${KERNEL_MODULES_OUT}
+ fi
+ cp -p ${FILE} ${PREBUILT_OUT}/${KERNEL_MODULES_OUT}
+ done
+ fi
+
+ echo "Copying module signing certificate into prebuilt"
+ if [[ ! -e ${PREBUILT_OUT}/certs ]]; then
+ mkdir -p ${PREBUILT_OUT}/certs
+ fi
+ cp -p ${OUT_DIR}/certs/*.* ${PREBUILT_OUT}/certs/
+}
+
+copy_all_to_prebuilt()
+{
+ PREBUILT_OUT=$1
+ echo ${PREBUILT_OUT}
+
+ if [[ ! -e ${PREBUILT_OUT} ]]; then
+ mkdir -p ${PREBUILT_OUT}
+ fi
+
+ copy_modules_to_prebuilt ${PREBUILT_OUT}
+
+ #copy necessary files from the out directory
+ echo "============="
+ echo "Copying files to prebuilt"
+ for FILE in ${FILES}; do
+ if [ -f ${OUT_DIR}/${FILE} ]; then
+ # Copy for prebuilt
+ echo "$FILE ${PREBUILT_OUT}"
+ cp -p ${OUT_DIR}/${FILE} ${PREBUILT_OUT}/
+ echo $FILE copied to ${PREBUILT_OUT}
+ else
+ echo "$FILE does not exist, skipping"
+ fi
+ done
+
+ #copy kernel image
+ echo "============="
+ echo "Copying kernel image to prebuilt"
+ if [ ! -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH} ]; then
+ mkdir -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}
+ fi
+ cp -p ${OUT_DIR}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE} ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE}
+
+ #copy dtbo images to prebuilt
+ echo "============="
+ echo "Copying target dtb/dtbo files to prebuilt"
+ if [ ! -e ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom ]; then
+ mkdir -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom
+ fi
+ cp -p -r ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtb ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
+
+ if [ -f ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ]; then
+ cp -p -r ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
+ fi
+
+ #copy arch generated headers
+ echo "============="
+ echo "Copying arch-specific generated headers to prebuilt"
+ cp -p -r ${OUT_DIR}/${ARCH_GEN_HEADERS} ${PREBUILT_OUT}/${ARCH_GEN_HEADERS_LOC}
+
+ #copy kernel generated headers
+ echo "============="
+ echo "Copying kernel generated headers to prebuilt"
+ cp -p -r ${OUT_DIR}/${KERNEL_GEN_HEADERS} ${PREBUILT_OUT}
+
+ #copy userspace facing headers
+ echo "============"
+ echo "Copying userspace headers to prebuilt"
+ mkdir -p ${PREBUILT_OUT}/usr
+ cp -p -r ${KERNEL_HEADERS_INSTALL}/include ${PREBUILT_OUT}/usr
+
+ #copy kernel scripts
+ echo "============"
+ echo "Copying kernel scripts to prebuilt"
+ cp -p -r ${OUT_DIR}/${KERNEL_SCRIPTS} ${PREBUILT_OUT}
+}
+
+extract_kernel_sha1()
+{
+ CUR_DIR=$(pwd)
+ cd ${KERNEL_DIR}
+ git rev-list --max-count=1 HEAD > ${KERN_SHA1_LOC}
+ cd ${CUR_DIR}
+}
+
+copy_from_prebuilt()
+{
+ PREBUILT_OUT=$1
+ cd ${ROOT_DIR}
+
+ if [ ! -e ${OUT_DIR} ]; then
+ mkdir -p ${OUT_DIR}
+ fi
+
+ #Copy userspace headers
+ echo "============"
+ echo "Copying userspace headers from prebuilt"
+ mkdir -p ${KERNEL_HEADERS_INSTALL}
+ cp -p -r ${PREBUILT_OUT}/usr/include ${ROOT_DIR}/${KERNEL_HEADERS_INSTALL}
+
+ #Copy files, such as System.map, vmlinux, etc
+ echo "============"
+ echo "Copying kernel files from prebuilt"
+ cd ${PREBUILT_OUT}
+ for FILE in ${FILES}; do
+ if [ -f ${PREBUILT_OUT}/$FILE ]; then
+ # Copy for prebuilt
+ echo " $FILE ${PREBUILT_OUT}"
+ echo ${PREBUILT_OUT}/${FILE}
+ cp -p ${PREBUILT_OUT}/${FILE} ${OUT_DIR}/
+ echo $FILE copied to ${PREBUILT_OUT}
+ else
+ echo "$FILE does not exist, skipping"
+ fi
+ done
+
+ #copy kernel image
+ echo "============"
+ echo "Copying kernel image from prebuilt"
+ if [ ! -e ${OUT_DIR}/${IMAGE_FILE_PATH} ]; then
+ mkdir -p ${OUT_DIR}/${IMAGE_FILE_PATH}
+ fi
+ cp -p ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE} ${OUT_DIR}/${IMAGE_FILE_PATH}/${PREBUILT_KERNEL_IMAGE}
+
+ #copy dtbo images from prebuilt
+ echo "============="
+ echo "Copying dtb/dtbo files from prebuilt"
+ if [ ! -e ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom ]; then
+ mkdir -p ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom
+ fi
+ cp -p -r ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtb ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
+ cp -p -r ${PREBUILT_OUT}/${IMAGE_FILE_PATH}/dts/vendor/qcom/*.dtbo ${OUT_DIR}/${IMAGE_FILE_PATH}/dts/vendor/qcom/
+
+ #copy arch generated headers, and kernel generated headers
+ echo "============"
+ echo "Copying arch-specific generated headers from prebuilt"
+ cp -p -r ${PREBUILT_OUT}/${ARCH_GEN_HEADERS} ${OUT_DIR}/${ARCH_GEN_HEADERS_LOC}
+ echo "============"
+ echo "Copying kernel generated headers from prebuilt"
+ cp -p -r ${PREBUILT_OUT}/${KERNEL_GEN_HEADERS} ${OUT_DIR}
+
+ #copy modules
+ echo "============"
+ echo "Copying kernel modules from prebuilt"
+ cd ${ROOT_DIR}
+ MODULES=$(find ${PREBUILT_OUT} -type f -name "*.ko")
+ if [ ! -e ${KERNEL_MODULES_OUT} ]; then
+ mkdir -p ${KERNEL_MODULES_OUT}
+ fi
+ for FILE in ${MODULES}; do
+ echo "Copy ${FILE#${KERNEL_MODULES_OUT}/}"
+ cp -p ${FILE} ${KERNEL_MODULES_OUT}
+ done
+
+ #copy scripts directory
+ echo "============"
+ echo "Copying kernel scripts from prebuilt"
+ cp -p -r ${PREBUILT_OUT}/${KERNEL_SCRIPTS} ${OUT_DIR}
+
+ echo "Copying sign certificates from prebuilt"
+ if [[ ! -e ${OUT_DIR}/certs ]]; then
+ mkdir -p ${OUT_DIR}/certs
+ fi
+ cp -p -r ${PREBUILT_OUT}/certs ${OUT_DIR}
+
+}
+
+#script starts executing here
+if [ -n "${CC}" ]; then
+ CC_ARG="CC=${CC}"
+fi
+
+#choose between secondary and primary kernel image
+if [[ ${DEFCONFIG} == *"perf_defconfig" ]]; then
+ KERNEL_BINS=${SECONDARY_KERN_BINS}
+else
+ KERNEL_BINS=${PRIMARY_KERN_BINS}
+fi
+
+#use prebuilts if we want to use them, and they are available
+if [ ! -z ${USE_PREBUILT_KERNEL} ] && [ -d ${KERNEL_BINS} ]; then
+ make_defconfig
+ copy_from_prebuilt ${KERNEL_BINS}
+ exit 0
+fi
+
+#use kernel source for building
+if [ ! -z ${HEADERS_INSTALL} ]; then
+ make_defconfig
+ headers_install
+else
+ make_defconfig
+ headers_install
+ build_kernel
+ modules_install
+ copy_all_to_prebuilt ${KERNEL_BINS}
+ extract_kernel_sha1
+fi
+
+exit 0
diff --git a/kernel_definitions.mk b/kernel_definitions.mk
new file mode 100755
index 0000000..8073f6a
--- /dev/null
+++ b/kernel_definitions.mk
@@ -0,0 +1,211 @@
+# Android Kernel compilation/common definitions
+
+ifeq ($(KERNEL_DEFCONFIG),)
+ KERNEL_DEFCONFIG := vendor/$(TARGET_PRODUCT)-qgki-debug_defconfig
+endif
+
+TARGET_KERNEL := msm-$(TARGET_KERNEL_VERSION)
+ifeq ($(TARGET_KERNEL_SOURCE),)
+ TARGET_KERNEL_SOURCE := kernel/$(TARGET_KERNEL)
+endif
+
+DTC := $(HOST_OUT_EXECUTABLES)/dtc$(HOST_EXECUTABLE_SUFFIX)
+UFDT_APPLY_OVERLAY := $(HOST_OUT_EXECUTABLES)/ufdt_apply_overlay$(HOST_EXECUTABLE_SUFFIX)
+
+SOURCE_ROOT := $(shell pwd)
+TARGET_KERNEL_MAKE_ENV := DTC_EXT=$(SOURCE_ROOT)/$(DTC)
+TARGET_KERNEL_MAKE_ENV += DTC_OVERLAY_TEST_EXT=$(SOURCE_ROOT)/$(UFDT_APPLY_OVERLAY)
+TARGET_KERNEL_MAKE_ENV += CONFIG_BUILD_ARM64_DT_OVERLAY=y
+TARGET_KERNEL_MAKE_ENV += HOSTCC=$(SOURCE_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-gcc
+TARGET_KERNEL_MAKE_ENV += HOSTAR=$(SOURCE_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-ar
+TARGET_KERNEL_MAKE_ENV += HOSTLD=$(SOURCE_ROOT)/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/bin/x86_64-linux-ld
+TARGET_KERNEL_MAKE_CFLAGS = "-I$(SOURCE_ROOT)/$(TARGET_KERNEL_SOURCE)/include/uapi -I/usr/include -I/usr/include/x86_64-linux-gnu -L/usr/lib -L/usr/lib/x86_64-linux-gnu -I$(SOURCE_ROOT)/$(TARGET_KERNEL_SOURCE)/include"
+TARGET_KERNEL_MAKE_LDFLAGS = "-L/usr/lib -L/usr/lib/x86_64-linux-gnu"
+
+KERNEL_LLVM_BIN := $(lastword $(sort $(wildcard $(SOURCE_ROOT)/$(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-x86/clang-4*)))/bin/clang
+
+KERNEL_TARGET := $(strip $(INSTALLED_KERNEL_TARGET))
+ifeq ($(KERNEL_TARGET),)
+INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
+endif
+
+ifneq ($(TARGET_KERNEL_APPEND_DTB), true)
+$(info Using DTB Image)
+INSTALLED_DTBIMAGE_TARGET := $(PRODUCT_OUT)/dtb.img
+endif
+
+TARGET_KERNEL_ARCH := $(strip $(TARGET_KERNEL_ARCH))
+ifeq ($(TARGET_KERNEL_ARCH),)
+KERNEL_ARCH := arm
+else
+KERNEL_ARCH := $(TARGET_KERNEL_ARCH)
+endif
+
+ifeq ($(shell echo $(KERNEL_DEFCONFIG) | grep vendor),)
+KERNEL_DEFCONFIG := vendor/$(KERNEL_DEFCONFIG)
+endif
+
+# Force 32-bit binder IPC for 64bit kernel with 32bit userspace
+ifeq ($(KERNEL_ARCH),arm64)
+ifeq ($(TARGET_ARCH),arm)
+KERNEL_CONFIG_OVERRIDE := CONFIG_ANDROID_BINDER_IPC_32BIT=y
+endif
+endif
+
+TARGET_KERNEL_CROSS_COMPILE_PREFIX := $(strip $(TARGET_KERNEL_CROSS_COMPILE_PREFIX))
+ifeq ($(TARGET_KERNEL_CROSS_COMPILE_PREFIX),)
+KERNEL_CROSS_COMPILE := arm-eabi-
+else
+KERNEL_CROSS_COMPILE := $(shell pwd)/$(TARGET_TOOLS_PREFIX)
+endif
+
+ifeq ($(TARGET_PREBUILT_KERNEL),)
+
+KERNEL_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(KERNEL_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?))
+
+real_cc :=
+ifeq ($(KERNEL_LLVM_SUPPORT),true)
+ ifeq ($(KERNEL_SD_LLVM_SUPPORT), true) #Using sd-llvm compiler
+ ifeq ($(shell echo $(SDCLANG_PATH) | head -c 1),/)
+ KERNEL_LLVM_BIN := $(SDCLANG_PATH)/clang
+ else
+ KERNEL_LLVM_BIN := $(shell pwd)/$(SDCLANG_PATH)/clang
+ endif
+ $(warning "Using sdllvm" $(KERNEL_LLVM_BIN))
+ else
+ KERNEL_LLVM_BIN := $(shell pwd)/$(CLANG) #Using aosp-llvm compiler
+ $(warning "Using aosp-llvm" $(KERNEL_LLVM_BIN))
+ endif
+real_cc := REAL_CC=$(KERNEL_LLVM_BIN) CLANG_TRIPLE=aarch64-linux-gnu-
+else
+ifeq ($(strip $(KERNEL_GCC_NOANDROID_CHK)),0)
+KERNEL_CFLAGS := KCFLAGS=-mno-android
+endif
+endif
+
+GKI_KERNEL=0
+ifneq (,$(findstring gki,$(KERNEL_DEFCONFIG)))
+$(info ###### GKI based platform ######)
+ifneq "gki_defconfig" "$(KERNEL_DEFCONFIG)"
+GKI_KERNEL=1
+endif
+endif
+
+BUILD_ROOT_LOC := ../../..
+KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel/$(TARGET_KERNEL)
+KERNEL_SYMLINK := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
+KERNEL_USR := $(KERNEL_SYMLINK)/usr
+
+KERNEL_CONFIG := $(KERNEL_OUT)/.config
+
+ifeq ($(KERNEL_DEFCONFIG)$(wildcard $(KERNEL_CONFIG)),)
+$(error Kernel configuration not defined, cannot build kernel)
+else
+
+ifeq ($(GKI_KERNEL),1)
+GKI_PLATFORM_NAME := $(shell echo $(KERNEL_DEFCONFIG) | sed -r "s/(-gki_defconfig|-qgki_defconfig|-qgki-debug_defconfig)$///")
+GKI_PLATFORM_NAME := $(shell echo $(GKI_PLATFORM_NAME) | sed "s/vendor\///g")
+TARGET_USES_UNCOMPRESSED_KERNEL := $(shell grep "CONFIG_BUILD_ARM64_UNCOMPRESSED_KERNEL=y" $(TARGET_KERNEL_SOURCE)/arch/arm64/configs/vendor/$(GKI_PLATFORM_NAME)_GKI.config)
+KERNEL_GENERATE_DEFCONFIG := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_DEFCONFIG)
+else
+TARGET_USES_UNCOMPRESSED_KERNEL := $(shell grep "CONFIG_BUILD_ARM64_UNCOMPRESSED_KERNEL=y" $(TARGET_KERNEL_SOURCE)/arch/arm64/configs/$(KERNEL_DEFCONFIG))
+endif
+
+ifeq ($(TARGET_USES_UNCOMPRESSED_KERNEL),)
+ifeq ($(KERNEL_ARCH),arm64)
+TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image.gz
+else
+TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/zImage
+endif
+else
+$(info Using uncompressed kernel)
+TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image
+endif
+
+ifeq ($(TARGET_KERNEL_APPEND_DTB), true)
+$(info Using appended DTB)
+TARGET_PREBUILT_INT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)-dtb
+endif
+
+KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr
+KERNEL_MODULES_INSTALL ?= system
+KERNEL_MODULES_OUT ?= $(PRODUCT_OUT)/$(KERNEL_MODULES_INSTALL)/lib/modules
+
+TARGET_PREBUILT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)
+
+endif
+endif
+
+# Add RTIC DTB to dtb.img if RTIC MPGen is enabled.
+# Note: unfortunately we can't define RTIC DTS + DTB rule here as the
+# following variable/ tools (needed for DTS generation)
+# are missing - DTB_OBJS, OBJDUMP, KCONFIG_CONFIG, CC, DTC_FLAGS (the only available is DTC).
+# The existing RTIC kernel integration in scripts/link-vmlinux.sh generates RTIC MP DTS
+# that will be compiled with optional rule below.
+# To be safe, we check for MPGen enable.
+ifdef RTIC_MPGEN
+RTIC_DTB := $(KERNEL_SYMLINK)/rtic_mp.dtb
+endif
+
+# Android Kernel make rules
+
+$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(KERNEL_GENERATE_DEFCONFIG) $(DTC) $(UFDT_APPLY_OVERLAY)
+ KERNEL_DIR=$(TARGET_KERNEL_SOURCE) \
+ DEFCONFIG=$(KERNEL_DEFCONFIG) \
+ OUT_DIR=$(KERNEL_OUT) \
+ ARCH=$(KERNEL_ARCH) \
+ CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) \
+ KERNEL_MODULES_OUT=$(KERNEL_MODULES_OUT) \
+ KERNEL_HEADERS_INSTALL=$(KERNEL_HEADERS_INSTALL) \
+ INSTALL_HEADERS=1 \
+ TARGET_PREBUILT_INT_KERNEL=$(TARGET_PREBUILT_INT_KERNEL) \
+ TARGET_INCLUDES=$(TARGET_KERNEL_MAKE_CFLAGS) \
+ TARGET_LINCLUDES=$(TARGET_KERNEL_MAKE_LDFLAGS) \
+ device/qcom/kernelscripts/buildkernel.sh \
+ $(real_cc) \
+ $(TARGET_KERNEL_MAKE_ENV)
+
+$(KERNEL_OUT):
+ mkdir -p $(KERNEL_OUT)
+
+$(KERNEL_USR): $(KERNEL_HEADERS_INSTALL)
+ rm -rf $(KERNEL_SYMLINK)
+ ln -s kernel/$(TARGET_KERNEL) $(KERNEL_SYMLINK)
+
+$(TARGET_PREBUILT_KERNEL): $(KERNEL_OUT) $(KERNEL_GENERATE_DEFCONFIG) $(DTC) $(KERNEL_USR)
+ KERNEL_DIR=$(TARGET_KERNEL_SOURCE) \
+ DEFCONFIG=$(KERNEL_DEFCONFIG) \
+ OUT_DIR=$(KERNEL_OUT) \
+ ARCH=$(KERNEL_ARCH) \
+ CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) \
+ KERNEL_MODULES_OUT=$(KERNEL_MODULES_OUT) \
+ KERNEL_HEADERS_INSTALL=$(KERNEL_HEADERS_INSTALL) \
+ TARGET_PREBUILT_INT_KERNEL=$(TARGET_PREBUILT_INT_KERNEL) \
+ TARGET_INCLUDES=$(TARGET_KERNEL_MAKE_CFLAGS) \
+ TARGET_LINCLUDES=$(TARGET_KERNEL_MAKE_LDFLAGS) \
+ device/qcom/kernelscripts/buildkernel.sh \
+ $(real_cc) \
+ $(TARGET_KERNEL_MAKE_ENV)
+
+ifeq ($(GKI_KERNEL),1)
+$(KERNEL_GENERATE_DEFCONFIG):
+ set -x
+ ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) KERN_OUT=$(KERNEL_OUT) $(TARGET_KERNEL_MAKE_ENV) $(TARGET_KERNEL_SOURCE)/scripts/gki/generate_defconfig.sh $(KERNEL_DEFCONFIG)
+ set +x
+else
+$(KERNEL_GENERATE_DEFCONFIG):
+endif
+
+$(INSTALLED_KERNEL_TARGET): $(TARGET_PREBUILT_KERNEL) | $(ACP)
+ $(transform-prebuilt-to-target)
+
+# RTIC DTS to DTB (if MPGen enabled;
+# and make sure we don't break the build if rtic_mp.dts missing)
+$(RTIC_DTB): $(INSTALLED_KERNEL_TARGET)
+ stat $(KERNEL_SYMLINK)/rtic_mp.dts 2>/dev/null >&2 && \
+ $(DTC) -O dtb -o $(RTIC_DTB) -b 1 $(DTC_FLAGS) $(KERNEL_SYMLINK)/rtic_mp.dts || \
+ touch $(RTIC_DTB)
+
+# Creating a dtb.img once the kernel is compiled if TARGET_KERNEL_APPEND_DTB is set to be false
+$(INSTALLED_DTBIMAGE_TARGET): $(INSTALLED_KERNEL_TARGET) $(RTIC_DTB)
+ cat $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/qcom/*.dtb $(RTIC_DTB) > $@