diff --git a/build/tasks/kernel.mk b/build/tasks/kernel.mk index 15bca8265..db39e63f4 100644 --- a/build/tasks/kernel.mk +++ b/build/tasks/kernel.mk @@ -1,5 +1,5 @@ # Copyright (C) 2012 The CyanogenMod Project -# (C) 2017-2021 The LineageOS Project +# (C) 2017-2022 The LineageOS Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,10 +21,12 @@ # # These config vars are usually set in BoardConfig.mk: # -# TARGET_KERNEL_CONFIG = Kernel defconfig +# TARGET_KERNEL_CONFIG = List of kernel defconfigs, first one being the base one, +# while all the others are fragments that will be merged +# to main one in .config. +# TARGET_KERNEL_RECOVERY_CONFIG = Same as above, but applicable to recovery kernel instead. # TARGET_KERNEL_VARIANT_CONFIG = Variant defconfig, optional # TARGET_KERNEL_SELINUX_CONFIG = SELinux defconfig, optional -# TARGET_KERNEL_ADDITIONAL_CONFIG = Additional defconfig, optional # # TARGET_KERNEL_CLANG_COMPILE = Compile kernel with clang, defaults to true # @@ -87,19 +89,13 @@ else KERNEL_DEFCONFIG_ARCH := $(KERNEL_ARCH) endif KERNEL_DEFCONFIG_DIR := $(KERNEL_SRC)/arch/$(KERNEL_DEFCONFIG_ARCH)/configs -KERNEL_DEFCONFIG_SRC := $(KERNEL_DEFCONFIG_DIR)/$(KERNEL_DEFCONFIG) -RECOVERY_KERNEL_DEFCONFIG_SRC := $(KERNEL_DEFCONFIG_DIR)/$(RECOVERY_DEFCONFIG) - -ifneq ($(TARGET_KERNEL_ADDITIONAL_CONFIG),) -KERNEL_ADDITIONAL_CONFIG := $(TARGET_KERNEL_ADDITIONAL_CONFIG) -KERNEL_ADDITIONAL_CONFIG_SRC := $(KERNEL_DEFCONFIG_DIR)/$(KERNEL_ADDITIONAL_CONFIG) - ifeq ("$(wildcard $(KERNEL_ADDITIONAL_CONFIG_SRC))","") - $(warning TARGET_KERNEL_ADDITIONAL_CONFIG '$(TARGET_KERNEL_ADDITIONAL_CONFIG)' doesn't exist) - KERNEL_ADDITIONAL_CONFIG_SRC := /dev/null - endif -else - KERNEL_ADDITIONAL_CONFIG_SRC := /dev/null -endif +ALL_KERNEL_DEFCONFIG_SRCS := $(foreach config,$(KERNEL_DEFCONFIG),$(KERNEL_DEFCONFIG_DIR)/$(config)) +ALL_RECOVERY_KERNEL_DEFCONFIG_SRCS := $(foreach config,$(RECOVERY_DEFCONFIG),$(KERNEL_DEFCONFIG_DIR)/$(config)) + +BASE_KERNEL_DEFCONFIG := $(word 1, $(KERNEL_DEFCONFIG)) +BASE_KERNEL_DEFCONFIG_SRC := $(word 1, $(ALL_KERNEL_DEFCONFIG_SRCS)) +BASE_RECOVERY_KERNEL_DEFCONFIG := $(word 1, $(RECOVERY_DEFCONFIG)) +BASE_RECOVERY_KERNEL_DEFCONFIG_SRC := $(word 1, $(ALL_RECOVERY_KERNEL_DEFCONFIG_SRCS)) ifeq ($(TARGET_PREBUILT_KERNEL),) ifeq ($(BOARD_KERNEL_IMAGE_NAME),) @@ -245,8 +241,6 @@ PATH_OVERRIDE += PATH=$(KERNEL_TOOLCHAIN_PATH_gcc)/bin:$$PATH # System tools are no longer allowed on 10+ PATH_OVERRIDE += $(TOOLS_PATH_OVERRIDE) -KERNEL_ADDITIONAL_CONFIG_OUT := $(KERNEL_OUT)/.additional_config - ifeq (true,$(filter true, $(TARGET_NEEDS_DTBOIMAGE) $(BOARD_KERNEL_SEPARATED_DTBO))) KERNEL_MAKE_FLAGS += DTC_EXT=$(KERNEL_BUILD_OUT_PREFIX)$(DTC) endif @@ -282,11 +276,6 @@ define make-kernel-config fi # Create defconfig build artifact $(call internal-make-kernel-target,$(1),savedefconfig) - $(hide) if [ ! -z "$(KERNEL_ADDITIONAL_CONFIG)" ]; then \ - echo "Using additional config '$(KERNEL_ADDITIONAL_CONFIG)'"; \ - $(KERNEL_SRC)/scripts/kconfig/merge_config.sh -m -O $(1) $(1)/.config $(KERNEL_SRC)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_ADDITIONAL_CONFIG); \ - $(call make-kernel-target,KCONFIG_ALLCONFIG=$(KERNEL_BUILD_OUT_PREFIX)$(1)/.config alldefconfig); \ - fi endef # Make a kernel target @@ -374,10 +363,7 @@ endif $(KERNEL_OUT): mkdir -p $(KERNEL_OUT) -$(KERNEL_ADDITIONAL_CONFIG_OUT): $(KERNEL_OUT) - $(hide) cmp -s $(KERNEL_ADDITIONAL_CONFIG_SRC) $@ || cp $(KERNEL_ADDITIONAL_CONFIG_SRC) $@; - -$(KERNEL_CONFIG): $(KERNEL_DEFCONFIG_SRC) $(KERNEL_ADDITIONAL_CONFIG_OUT) +$(KERNEL_CONFIG): $(KERNEL_OUT) $(ALL_KERNEL_DEFCONFIG_SRCS) @echo "Building Kernel Config" $(call make-kernel-config,$(KERNEL_OUT),$(KERNEL_DEFCONFIG)) @@ -425,10 +411,8 @@ kerneltags: $(KERNEL_CONFIG) .PHONY: kernelsavedefconfig alldefconfig kernelsavedefconfig: $(KERNEL_OUT) - $(call make-kernel-target,$(KERNEL_DEFCONFIG)) - env KCONFIG_NOTIMESTAMP=true \ - $(call make-kernel-target,savedefconfig) - cp $(KERNEL_OUT)/defconfig $(KERNEL_DEFCONFIG_SRC) + $(call make-kernel-config,$(KERNEL_OUT),$(BASE_KERNEL_DEFCONFIG)) + cp $(KERNEL_OUT)/defconfig $(BASE_KERNEL_DEFCONFIG_SRC) alldefconfig: $(KERNEL_OUT) env KCONFIG_NOTIMESTAMP=true \ @@ -477,7 +461,7 @@ ifeq ($(FULL_RECOVERY_KERNEL_BUILD),true) $(RECOVERY_KERNEL_OUT): mkdir -p $(RECOVERY_KERNEL_OUT) -$(RECOVERY_KERNEL_CONFIG): $(RECOVERY_KERNEL_DEFCONFIG_SRC) +$(RECOVERY_KERNEL_CONFIG): $(ALL_RECOVERY_KERNEL_DEFCONFIG_SRCS) @echo "Building Recovery Kernel Config" $(call make-kernel-config,$(RECOVERY_KERNEL_OUT),$(RECOVERY_DEFCONFIG))