summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuildkernel.sh2
-rw-r--r--kernel_definitions.mk133
2 files changed, 95 insertions, 40 deletions
diff --git a/buildkernel.sh b/buildkernel.sh
index 26a6a42..f5e8e0a 100755
--- a/buildkernel.sh
+++ b/buildkernel.sh
@@ -383,7 +383,7 @@ if [ ! -z ${USE_PREBUILT_KERNEL} ] && [ -d ${KERNEL_BINS} ]; then
fi
#use kernel source for building
-if [ ! -z ${HEADERS_INSTALL} ]; then
+if [ "${HEADERS_INSTALL}" -ne "0" ]; then
make_defconfig
headers_install
else
diff --git a/kernel_definitions.mk b/kernel_definitions.mk
index 6e8baf9..5759b95 100644
--- a/kernel_definitions.mk
+++ b/kernel_definitions.mk
@@ -148,20 +148,60 @@ TARGET_PREBUILT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)
endif
endif
+# If the configuration is QGKI, build the GKI kernel as well
+# The build system overrides INSTALLED_KERNEL_TARGET if BOARD_KERNEL_BINARIES is defined
+ifeq ($(GKI_KERNEL),1)
+ ifeq "$(KERNEL_DEFCONFIG)" "vendor/$(TARGET_BOARD_PLATFORM)-qgki_defconfig"
+ $(info Additional GKI images will be built)
+ BOARD_KERNEL_BINARIES := kernel kernel-gki
+ INSTALLED_KERNEL_TARGET := $(foreach k,$(BOARD_KERNEL_BINARIES), $(PRODUCT_OUT)/$(k))
+
+ # Create new definitions for building an additional GKI kernel on the side
+ GKI_INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel-gki
+ GKI_KERNEL_DEFCONFIG := vendor/$(TARGET_BOARD_PLATFORM)-gki_defconfig
+ GKI_KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel-gki/$(TARGET_KERNEL)
+ GKI_KERNEL_MODULES_OUT := $(PRODUCT_OUT)/$(KERNEL_MODULES_INSTALL)/lib/modules/gki
+ GKI_KERNEL_HEADERS_INSTALL := $(GKI_KERNEL_OUT)/usr
+ GKI_TARGET_PREBUILT_INT_KERNEL := $(subst kernel,kernel-gki,$(TARGET_PREBUILT_INT_KERNEL))
+ GKI_TARGET_PREBUILT_KERNEL := $(GKI_TARGET_PREBUILT_INT_KERNEL)
+ GKI_TARGET_MODULES_DIR := $(TARGET_KERNEL_VERSION)-gki
+
+ BOARD_KERNEL_MODULE_DIRS := $(GKI_TARGET_MODULES_DIR)
+ BOARD_KERNEL-GKI_BOOTIMAGE_PARTITION_SIZE := 0x06000000
+ endif
+endif
+
# Archieve the DLKMs that goes into vendor.img and vendor-ramdisk.
# Also, make them dependent on the kernel compilation.
VENDOR_KERNEL_MODULES_ARCHIVE := vendor_modules.zip
BOARD_VENDOR_KERNEL_MODULES_ARCHIVE := $(KERNEL_MODULES_OUT)/$(VENDOR_KERNEL_MODULES_ARCHIVE)
$(BOARD_VENDOR_KERNEL_MODULES_ARCHIVE): $(TARGET_PREBUILT_KERNEL)
+ifneq ($(GKI_INSTALLED_KERNEL_TARGET),)
+BOARD_VENDOR_KERNEL_MODULES_ARCHIVE_$(GKI_TARGET_MODULES_DIR) := $(GKI_KERNEL_MODULES_OUT)/$(VENDOR_KERNEL_MODULES_ARCHIVE)
+$(BOARD_VENDOR_KERNEL_MODULES_ARCHIVE_$(GKI_TARGET_MODULES_DIR)): $(GKI_TARGET_PREBUILT_KERNEL)
+endif
+
+BOARD_VENDOR_KERNEL_MODULES_$(GKI_TARGET_MODULES_DIR) = \
+ $(foreach mod, $(BOARD_VENDOR_KERNEL_MODULES), \
+ $(subst $(KERNEL_MODULES_OUT), $(GKI_KERNEL_MODULES_OUT), $(mod)))
+
$(warning VENDOR_RAMDISK_KERNEL_MODLUES = $(VENDOR_RAMDISK_KERNEL_MODLUES))
ifneq ($(VENDOR_RAMDISK_KERNEL_MODULES),)
VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE := vendor_ramdisk_modules.zip
+
+ifeq "$(KERNEL_DEFCONFIG)" "vendor/$(TARGET_BOARD_PLATFORM)-gki_defconfig"
BOARD_VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE := $(KERNEL_MODULES_OUT)/$(VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE)
$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE): $(TARGET_PREBUILT_KERNEL)
endif
+ifneq ($(GKI_INSTALLED_KERNEL_TARGET),)
+BOARD_VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE_$(GKI_TARGET_MODULES_DIR) := $(GKI_KERNEL_MODULES_OUT)/$(VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE)
+$(BOARD_VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE_$(GKI_TARGET_MODULES_DIR)): $(GKI_TARGET_PREBUILT_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)
@@ -174,19 +214,40 @@ RTIC_DTB := $(KERNEL_SYMLINK)/rtic_mp.dtb
endif
MAKE_PATH := $(SOURCE_ROOT)/prebuilts/build-tools/linux-x86/bin/
-# Android Kernel make rules
-$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(KERNEL_GENERATE_DEFCONFIG) $(DTC) $(UFDT_APPLY_OVERLAY)
+# Helper functions
+
+ifeq ($(GKI_KERNEL),1)
+# Generate the defconfig file from fragments
+# $(1): The defconfig to generate. For example, vendor/lahaina-qgki_defconfig
+define generate-defconfig
+ set -x; \
+ ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) KERN_OUT=$(KERNEL_OUT) $(TARGET_KERNEL_MAKE_ENV) MAKE_PATH=$(MAKE_PATH) $(TARGET_KERNEL_SOURCE)/scripts/gki/generate_defconfig.sh $(1); \
+ set +x
+endef
+else
+define generate-defconfig
+endef
+endif
+
+# Build the kernel
+# $(1): KERNEL_DEFCONFIG to build for
+# $(2): KERNEL_OUT directory
+# $(3): KERNEL_MODULES_OUT directory
+# $(4): KERNEL_HEADERS_INSTALL directory
+# $(5): HEADERS_INSTALL; If 1, the call would just generate the headers and quit
+# $(6): TARGET_PREBUILT_INT_KERNEL: The location to the kernel's binary format (Image, zImage, and so on)
+define build-kernel
KERNEL_DIR=$(TARGET_KERNEL_SOURCE) \
- DEFCONFIG=$(KERNEL_DEFCONFIG) \
- OUT_DIR=$(KERNEL_OUT) \
+ DEFCONFIG=$(1) \
+ OUT_DIR=$(2) \
MAKE_PATH=$(MAKE_PATH)\
ARCH=$(KERNEL_ARCH) \
CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) \
- KERNEL_MODULES_OUT=$(KERNEL_MODULES_OUT) \
- KERNEL_HEADERS_INSTALL=$(KERNEL_HEADERS_INSTALL) \
- HEADERS_INSTALL=1 \
- TARGET_PREBUILT_INT_KERNEL=$(TARGET_PREBUILT_INT_KERNEL) \
+ KERNEL_MODULES_OUT=$(3) \
+ KERNEL_HEADERS_INSTALL=$(4) \
+ HEADERS_INSTALL=$(5) \
+ TARGET_PREBUILT_INT_KERNEL=$(6) \
TARGET_INCLUDES=$(TARGET_KERNEL_MAKE_CFLAGS) \
TARGET_LINCLUDES=$(TARGET_KERNEL_MAKE_LDFLAGS) \
VENDOR_KERNEL_MODULES_ARCHIVE=$(VENDOR_KERNEL_MODULES_ARCHIVE) \
@@ -196,6 +257,13 @@ $(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(KERNEL_GENERATE_DEFCONFIG) $(DTC) $(U
device/qcom/kernelscripts/buildkernel.sh \
$(real_cc) \
$(TARGET_KERNEL_MAKE_ENV)
+endef
+
+# Android Kernel make rules
+
+$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(DTC) $(UFDT_APPLY_OVERLAY)
+ $(call generate-defconfig,$(KERNEL_DEFCONFIG)); \
+ $(call build-kernel,$(KERNEL_DEFCONFIG),$(KERNEL_OUT),$(KERNEL_MODULES_OUT),$(KERNEL_HEADERS_INSTALL),1,$(TARGET_PREBUILT_INT_KERNEL))
$(KERNEL_OUT):
mkdir -p $(KERNEL_OUT)
@@ -204,37 +272,24 @@ $(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) \
- MAKE_PATH=$(MAKE_PATH)\
- 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) \
- VENDOR_KERNEL_MODULES_ARCHIVE=$(VENDOR_KERNEL_MODULES_ARCHIVE) \
- VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE=$(VENDOR_RAMDISK_KERNEL_MODULES_ARCHIVE) \
- VENDOR_RAMDISK_KERNEL_MODULES="$(VENDOR_RAMDISK_KERNEL_MODULES)" \
- TARGET_PRODUCT=$(TARGET_BOARD_PLATFORM) \
- 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) MAKE_PATH=$(MAKE_PATH) $(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)
+$(TARGET_PREBUILT_KERNEL): $(KERNEL_OUT) $(DTC) $(KERNEL_USR)
+ echo "Building the requested kernel.."; \
+ $(call generate-defconfig,$(KERNEL_DEFCONFIG)); \
+ $(call build-kernel,$(KERNEL_DEFCONFIG),$(KERNEL_OUT),$(KERNEL_MODULES_OUT),$(KERNEL_HEADERS_INSTALL),0,$(TARGET_PREBUILT_INT_KERNEL))
+
+# Make GKI_TARGET_PREBUILT_KERNEL dependent on TARGET_PREBUILT_KERNEL just so
+# that the builds are serialzed. This is just to avoid hogging CPU resoruces
+# and to avoid any potential race-conditions.
+$(GKI_TARGET_PREBUILT_KERNEL): $(DTC) $(TARGET_PREBUILT_KERNEL)
+ echo "Building GKI kernel.."; \
+ $(call generate-defconfig,$(GKI_KERNEL_DEFCONFIG)); \
+ $(call build-kernel,$(GKI_KERNEL_DEFCONFIG),$(GKI_KERNEL_OUT),$(GKI_KERNEL_MODULES_OUT),$(GKI_KERNEL_HEADERS_INSTALL),0,$(GKI_TARGET_PREBUILT_INT_KERNEL))
+
+$(INSTALLED_KERNEL_TARGET): $(TARGET_PREBUILT_KERNEL) $(GKI_TARGET_PREBUILT_KERNEL)
+ cp $(TARGET_PREBUILT_KERNEL) $(PRODUCT_OUT)/kernel
+ if [ ! -z "$(GKI_TARGET_PREBUILT_KERNEL)" ]; then \
+ cp $(GKI_TARGET_PREBUILT_KERNEL) $(PRODUCT_OUT)/kernel-gki; \
+ fi
# RTIC DTS to DTB (if MPGen enabled;
# and make sure we don't break the build if rtic_mp.dts missing)