summaryrefslogtreecommitdiff
path: root/scripts/Kconfig.mk
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Kconfig.mk')
-rw-r--r--scripts/Kconfig.mk89
1 files changed, 28 insertions, 61 deletions
diff --git a/scripts/Kconfig.mk b/scripts/Kconfig.mk
index 2bdc934..3db7a2f 100644
--- a/scripts/Kconfig.mk
+++ b/scripts/Kconfig.mk
@@ -6,15 +6,15 @@
# This file is the heart of the LumeOS build-time configuration system.
# It mirrors the role of Linux's Kconfig + auto.conf pipeline:
#
-# 1. Developer edits `.config` (or copies from arch/$(ARCH)/defconfig)
-# 2. This file reads `.config`, applies defaults for anything missing,
+# 1. Developer edits `$(O)/.config` (or runs `make O=... defconfig`)
+# 2. This file reads that configuration and applies missing defaults,
# validates constraints, and exports two things:
# a) KCPPFLAGS — a set of -DCONFIG_xxx=value flags for the compiler
# b) $(BUILD)/generated/autoconf.h — the same values as C #defines
#
# Design Principles (matching Linux conventions):
-# - Every CONFIG_ symbol has a default defined HERE, so a bare `make`
-# with no .config still builds a sane kernel.
+# - Every CONFIG_ symbol has a default defined HERE, so an empty output
+# directory still builds a sane kernel.
# - Boolean options use 'y' / 'n'. Numeric options are plain integers.
# - The generated autoconf.h uses the exact same names so that
# `#ifdef CONFIG_DEBUG` works identically in Makefile and C.
@@ -23,7 +23,8 @@
# ------------------------------------------------------------------
# §1 Read user configuration (if it exists)
# ------------------------------------------------------------------
--include .config
+KCONFIG_CONFIG ?= $(BUILD)/.config
+-include $(KCONFIG_CONFIG)
# ------------------------------------------------------------------
# §2 Provide defaults for every CONFIG_ symbol
@@ -143,42 +144,6 @@ endif
# ------------------------------------------------------------------
AUTOCONF_H := $(BUILD)/generated/autoconf.h
-define generate-autoconf
- @mkdir -p $(dir $(AUTOCONF_H))
- @echo " GEN $(AUTOCONF_H)"
- @echo "/* AUTO-GENERATED — DO NOT EDIT */" > $(AUTOCONF_H)
- @echo "/* Generated by scripts/Kconfig.mk */" >> $(AUTOCONF_H)
- @echo "#pragma once" >> $(AUTOCONF_H)
- @echo "" >> $(AUTOCONF_H)
- @echo "/* Platform */" >> $(AUTOCONF_H)
- @echo "#define CONFIG_NR_CPUS $(CONFIG_NR_CPUS)" >> $(AUTOCONF_H)
- @echo "" >> $(AUTOCONF_H)
- @echo "/* Scheduler */" >> $(AUTOCONF_H)
- @echo "#define CONFIG_HZ $(CONFIG_HZ)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_NR_PRIORITIES $(CONFIG_NR_PRIORITIES)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_DEFAULT_PRIORITY $(CONFIG_DEFAULT_PRIORITY)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_IDLE_PRIORITY $(CONFIG_IDLE_PRIORITY)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_DEFAULT_TIMESLICE $(CONFIG_DEFAULT_TIMESLICE)" >> $(AUTOCONF_H)
- @echo "" >> $(AUTOCONF_H)
- @echo "/* Memory Management */" >> $(AUTOCONF_H)
- @echo "#define CONFIG_PAGE_SIZE $(CONFIG_PAGE_SIZE)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_MAX_ORDER $(CONFIG_MAX_ORDER)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_KERNEL_STACK_SIZE $(CONFIG_KERNEL_STACK_SIZE)" >> $(AUTOCONF_H)
- @echo "" >> $(AUTOCONF_H)
- @echo "/* Security */" >> $(AUTOCONF_H)
- $(if $(filter y,$(CONFIG_KASLR)), @echo "#define CONFIG_KASLR 1" >> $(AUTOCONF_H))
- @echo "#define CONFIG_KASLR_POLICY_ID $(CONFIG_KASLR_POLICY_ID)" >> $(AUTOCONF_H)
- @echo "#define CONFIG_KASLR_LOG_LEVEL $(CONFIG_KASLR_LOG_LEVEL)" >> $(AUTOCONF_H)
- $(if $(filter y,$(CONFIG_STACK_CANARY)), @echo "#define CONFIG_STACK_CANARY 1" >> $(AUTOCONF_H))
- @echo "" >> $(AUTOCONF_H)
- @echo "/* Debug */" >> $(AUTOCONF_H)
- $(if $(filter y,$(CONFIG_DEBUG)), @echo "#define CONFIG_DEBUG 1" >> $(AUTOCONF_H))
- $(if $(filter y,$(CONFIG_DEBUG_LOCKS)), @echo "#define CONFIG_DEBUG_LOCKS 1" >> $(AUTOCONF_H))
- $(if $(filter y,$(CONFIG_SELFTEST)), @echo "#define CONFIG_SELFTEST 1" >> $(AUTOCONF_H))
- $(if $(filter y,$(CONFIG_KLOG)), @echo "#define CONFIG_KLOG 1" >> $(AUTOCONF_H))
- $(if $(filter y,$(CONFIG_KERNEL_COMPRESSED)), @echo "#define CONFIG_KERNEL_COMPRESSED 1" >> $(AUTOCONF_H))
-endef
-
# ------------------------------------------------------------------
# §6 Utility targets
# ------------------------------------------------------------------
@@ -187,29 +152,31 @@ endef
.PHONY: defconfig savedefconfig showconfig
defconfig:
- @echo " DEFCFG arch/$(CONFIG_ARCH)/defconfig → .config"
- @cp arch/$(CONFIG_ARCH)/defconfig .config
+ @echo " DEFCFG arch/$(CONFIG_ARCH)/defconfig → $(KCONFIG_CONFIG)"
+ @mkdir -p $(dir $(KCONFIG_CONFIG))
+ @cp arch/$(CONFIG_ARCH)/defconfig $(KCONFIG_CONFIG)
# 'make savedefconfig' — save current effective config
savedefconfig:
- @echo " SAVE .config"
- @echo "# LumeOS Kernel Configuration (saved $$(date +%Y-%m-%d))" > .config
- @echo "CONFIG_ARCH = $(CONFIG_ARCH)" >> .config
- @echo "CONFIG_NR_CPUS = $(CONFIG_NR_CPUS)" >> .config
- @echo "CONFIG_HZ = $(CONFIG_HZ)" >> .config
- @echo "CONFIG_NR_PRIORITIES = $(CONFIG_NR_PRIORITIES)" >> .config
- @echo "CONFIG_PAGE_SIZE = $(CONFIG_PAGE_SIZE)" >> .config
- @echo "CONFIG_MAX_ORDER = $(CONFIG_MAX_ORDER)" >> .config
- @echo "CONFIG_KERNEL_STACK_SIZE = $(CONFIG_KERNEL_STACK_SIZE)" >> .config
- @echo "CONFIG_KASLR = $(CONFIG_KASLR)" >> .config
- @echo "CONFIG_KASLR_POLICY_ID = $(CONFIG_KASLR_POLICY_ID)" >> .config
- @echo "CONFIG_KASLR_LOG_LEVEL = $(CONFIG_KASLR_LOG_LEVEL)" >> .config
- @echo "CONFIG_STACK_CANARY = $(CONFIG_STACK_CANARY)" >> .config
- @echo "CONFIG_DEBUG = $(CONFIG_DEBUG)" >> .config
- @echo "CONFIG_DEBUG_LOCKS = $(CONFIG_DEBUG_LOCKS)" >> .config
- @echo "CONFIG_SELFTEST = $(CONFIG_SELFTEST)" >> .config
- @echo "CONFIG_KLOG = $(CONFIG_KLOG)" >> .config
- @echo "CONFIG_KERNEL_COMPRESSED = $(CONFIG_KERNEL_COMPRESSED)" >> .config
+ @echo " SAVE $(KCONFIG_CONFIG)"
+ @mkdir -p $(dir $(KCONFIG_CONFIG))
+ @echo "# LumeOS Kernel Configuration (saved $$(date +%Y-%m-%d))" > $(KCONFIG_CONFIG)
+ @echo "CONFIG_ARCH = $(CONFIG_ARCH)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_NR_CPUS = $(CONFIG_NR_CPUS)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_HZ = $(CONFIG_HZ)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_NR_PRIORITIES = $(CONFIG_NR_PRIORITIES)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_PAGE_SIZE = $(CONFIG_PAGE_SIZE)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_MAX_ORDER = $(CONFIG_MAX_ORDER)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_KERNEL_STACK_SIZE = $(CONFIG_KERNEL_STACK_SIZE)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_KASLR = $(CONFIG_KASLR)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_KASLR_POLICY_ID = $(CONFIG_KASLR_POLICY_ID)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_KASLR_LOG_LEVEL = $(CONFIG_KASLR_LOG_LEVEL)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_STACK_CANARY = $(CONFIG_STACK_CANARY)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_DEBUG = $(CONFIG_DEBUG)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_DEBUG_LOCKS = $(CONFIG_DEBUG_LOCKS)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_SELFTEST = $(CONFIG_SELFTEST)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_KLOG = $(CONFIG_KLOG)" >> $(KCONFIG_CONFIG)
+ @echo "CONFIG_KERNEL_COMPRESSED = $(CONFIG_KERNEL_COMPRESSED)" >> $(KCONFIG_CONFIG)
# 'make showconfig' — print effective configuration
showconfig: