summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKees Cook <keescook@google.com>2016-05-15 11:03:01 -0700
committerKees Cook <keescook@google.com>2016-05-17 19:18:10 +0000
commit4684f18762040716b844894f5010e6f8994262cc (patch)
treedb26bf4b918a4226803a7ee99a5827d7e75d46ea
parent658253d0f111013dff58579a3695362e48772584 (diff)
downloadbrillo-4684f18762040716b844894f5010e6f8994262cc.tar.gz
kernel: Improve kernel config rules
This makes sure that all the kernel config fragments used for the merge are emitted to the kernel build directory to help in any needed debugging. Additionally drops redundant warnings about missing prerequisites, and makes the output directory an order-only dependency. Change-Id: If3b56b3a8c1a16b57026d64696b7a0ccf6261a75
-rw-r--r--kernel.mk57
1 files changed, 31 insertions, 26 deletions
diff --git a/kernel.mk b/kernel.mk
index 9fdd75c..294def8 100644
--- a/kernel.mk
+++ b/kernel.mk
@@ -45,6 +45,11 @@ ifeq ($(TARGET_KERNEL_ARCH),)
$(error TARGET_KERNEL_ARCH not defined)
endif
+# This is optional, but we'd like to use it as a dependency.
+ifndef TARGET_KERNEL_CONFIGS
+TARGET_KERNEL_CONFIGS := /dev/null
+endif
+
# Check target arch.
KERNEL_TOOLCHAIN_ABS := $(realpath $(TARGET_TOOLCHAIN_ROOT)/bin)
TARGET_KERNEL_ARCH := $(strip $(TARGET_KERNEL_ARCH))
@@ -107,8 +112,12 @@ endif
# Set the output for the kernel build products.
KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
-KERNEL_CONFIG := $(KERNEL_OUT)/.config
+# The kernel configs, in precedence order.
+KERNEL_CONFIG_DEFAULT := $(KERNEL_OUT)/.config.default
+KERNEL_CONFIG_RECOMMENDED := $(KERNEL_OUT)/.config.recommended
+KERNEL_CONFIG_PRODUCT := $(KERNEL_OUT)/.config.product
KERNEL_CONFIG_REQUIRED := $(KERNEL_OUT)/.config.required
+KERNEL_CONFIG := $(KERNEL_OUT)/.config
KERNEL_BIN := $(KERNEL_OUT)/arch/$(KERNEL_SRC_ARCH)/boot/$(KERNEL_NAME)
@@ -128,35 +137,31 @@ KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr
$(KERNEL_OUT):
mkdir -p $(KERNEL_OUT)
+$(KERNEL_CONFIG_DEFAULT): $(TARGET_KERNEL_SRC)/arch/$(KERNEL_SRC_ARCH)/configs/$(TARGET_KERNEL_DEFCONFIG) | $(KERNEL_OUT)
+ $(hide) cat $< > $@
+
+$(KERNEL_CONFIG_RECOMMENDED): $(KERNEL_CONFIGS_RECOMMENDED) | $(KERNEL_OUT)
+ $(hide) cat $< > $@
+
+$(KERNEL_CONFIG_PRODUCT): $(TARGET_KERNEL_CONFIGS) | $(KERNEL_OUT)
+ $(hide) cat $< > $@
+
# Merge the required kernel config elements.
-$(KERNEL_CONFIG_REQUIRED): $(KERNEL_OUT) \
- $(KERNEL_CONFIGS_COMMON) $(KERNEL_CONFIGS_ARCH) \
- $(KERNEL_CONFIGS_VER) $(KERNEL_CONFIGS_VER_ARCH)
- $(hide) if [ ! -f $(KERNEL_CONFIGS_ARCH) ] ; then \
- echo "Missing common kernel configs for $(KERNEL_ARCH)"; \
- echo "$(KERNEL_CONFIGS_ARCH)"; \
- exit 1; \
- fi
- $(hide) if [ ! -f $(KERNEL_CONFIGS_VER) ] ; then \
- echo "Missing common $(KERNEL_VERSION) kernel configs"; \
- echo "$(KERNEL_CONFIGS_VER)"; \
- exit 1; \
- fi
- $(hide) if [ ! -f $(KERNEL_CONFIGS_VER_ARCH) ] ; then \
- echo "Missing $(KERNEL_VERSION) kernel configs for $(KERNEL_ARCH)"; \
- echo "$(KERNEL_CONFIGS_VER_ARCH)"; \
- exit 1; \
- fi
- $(hide) cat $(KERNEL_CONFIGS_COMMON) $(KERNEL_CONFIGS_ARCH) \
- $(KERNEL_CONFIGS_VER) $(KERNEL_CONFIGS_VER_ARCH) > $@
+$(KERNEL_CONFIG_REQUIRED): $(KERNEL_CONFIGS_COMMON) $(KERNEL_CONFIGS_ARCH) \
+ $(KERNEL_CONFIGS_VER) $(KERNEL_CONFIGS_VER_ARCH) \
+ | $(KERNEL_OUT)
+ $(hide) cat $(filter-out $(KERNEL_OUT),$^) > $@
# Merge the final target kernel config.
-$(KERNEL_CONFIG): $(KERNEL_OUT) $(KERNEL_CONFIG_REQUIRED)
+$(KERNEL_CONFIG): $(KERNEL_CONFIG_DEFAULT) $(KERNEL_CONFIG_RECOMMENDED) \
+ $(KERNEL_CONFIG_PRODUCT) $(KERNEL_CONFIG_REQUIRED) \
+ | $(KERNEL_OUT)
+ $(hide) echo Merging kernel config
$(KERNEL_MERGE_CONFIG) $(TARGET_KERNEL_SRC) $(realpath $(KERNEL_OUT)) \
$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) \
- arch/$(KERNEL_SRC_ARCH)/configs/$(TARGET_KERNEL_DEFCONFIG) \
- $(realpath $(KERNEL_CONFIGS_RECOMMENDED)) \
- $(TARGET_KERNEL_CONFIGS) \
+ $(realpath $(KERNEL_CONFIG_DEFAULT)) \
+ $(realpath $(KERNEL_CONFIG_RECOMMENDED)) \
+ $(realpath $(KERNEL_CONFIG_PRODUCT)) \
$(realpath $(KERNEL_CONFIG_REQUIRED))
# Disable CCACHE_DIRECT so that header location changes are noticed.
@@ -171,7 +176,7 @@ define build_kernel
$(1)
endef
-$(KERNEL_BIN): $(KERNEL_OUT) $(KERNEL_CONFIG)
+$(KERNEL_BIN): $(KERNEL_CONFIG) | $(KERNEL_OUT)
$(hide) echo "Building $(KERNEL_ARCH) $(KERNEL_VERSION) kernel ..."
$(hide) rm -rf $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts
$(hide) rm -rf $(PRODUCT_OUT)/kernel.dtb $(PRODUCT_OUT)/kernel-and-dtb