From 2ad612d3af7e88120052d1772fdacd6cce109f58 Mon Sep 17 00:00:00 2001
From: sbwml <admin@cooluc.com>
Date: Fri, 4 Oct 2024 10:56:57 +0800
Subject: [PATCH 06/10] build: kernel: add out-of-tree kernel config

Signed-off-by: sbwml <admin@cooluc.com>
---
 config/Config-devel.in     |  7 ++++
 include/kernel-defaults.mk | 72 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 79 insertions(+)

diff --git a/config/Config-devel.in b/config/Config-devel.in
index 9079303..2cbefc2 100644
--- a/config/Config-devel.in
+++ b/config/Config-devel.in
@@ -102,6 +102,13 @@ menuconfig DEVEL
 		  Enter C compiler name or full pathname i.e.: clang
 		  If not set, uses '$(TARGET_CC)'
 
+	config KERNEL_LRNG
+		bool "Kernel LRNG" if DEVEL
+		help
+		  If enabled, provides a different approach to /dev/random
+		  which is called Linux Random Number Generator (LRNG) to collect
+		  entropy within the Linux kernel.
+
 	config EXTERNAL_KERNEL_TREE
 		string "Use external kernel tree" if DEVEL
 		default ""
diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk
index f94ed33..6ec2e75 100644
--- a/include/kernel-defaults.mk
+++ b/include/kernel-defaults.mk
@@ -108,6 +108,78 @@ define Kernel/SetNoInitramfs
 	echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config.set
 	echo '# CONFIG_INITRAMFS_FORCE is not set' >> $(LINUX_DIR)/.config.set
 	echo "# CONFIG_INITRAMFS_PRESERVE_MTIME is not set" >> $(LINUX_DIR)/.config.set
+# CLANG
+	mv $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.old
+	grep -v CONFIG_LTO $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set
+ifneq (,$(findstring clang,$(KERNEL_CC)))
+	echo 'CONFIG_LTO=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LTO_CLANG=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LTO_CLANG_THIN=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_HAS_LTO_CLANG=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_RANDSTRUCT_NONE=y' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_CFI_CLANG is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LTO_CLANG_FULL is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LTO_NONE is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_RANDSTRUCT_FULL is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_RELR is not set' >> $(LINUX_DIR)/.config.set
+endif
+# BTF
+ifeq ($(call qstrip,$(CONFIG_KERNEL_BPF_EVENTS)),y)
+	echo 'CONFIG_DEBUG_INFO_BTF_MODULES=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_PROBE_EVENTS_BTF_ARGS=y' >> $(LINUX_DIR)/.config.set
+endif
+# LRNG
+ifeq ($(call qstrip,$(CONFIG_KERNEL_LRNG)),y)
+	echo 'CONFIG_LRNG=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_AUTO_SELECTED=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_COLLECTION_SIZE_1024=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_CONTINUOUS_COMPRESSION_ENABLED=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_CPU=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_CPU_ENTROPY_RATE=8' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_DEV_IF=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_DFLT_DRNG_CHACHA20=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_IRQ=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_IRQ_DFLT_TIMER_ES=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_IRQ_ENTROPY_RATE=256' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_JENT=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_JENT_ENTROPY_BLOCKS=128' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_JENT_ENTROPY_BLOCKS_NO_128=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_JENT_ENTROPY_RATE=16' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_KCAPI_IF=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_RUNTIME_ES_CONFIG=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_SCHED=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_SCHED_ENTROPY_RATE=4294967295' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_SWITCH_DRNG=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_SWITCH_HASH=y' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION=y' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_AIS2031_NTG1_SEEDING_STRATEGY is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_COLLECTION_SIZE_2048 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_COLLECTION_SIZE_256 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_COLLECTION_SIZE_4096 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_COLLECTION_SIZE_512 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_COLLECTION_SIZE_8192 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_CONTINUOUS_COMPRESSION_DISABLED is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_DFLT_DRNG_DRBG is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_DFLT_DRNG_KCAPI is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_HASH_KCAPI is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_HEALTH_TESTS is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_HWRAND_IF is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_JENT_ENTROPY_BLOCKS_DISABLED is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_JENT_ENTROPY_BLOCKS_NO_1024 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_JENT_ENTROPY_BLOCKS_NO_256 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_JENT_ENTROPY_BLOCKS_NO_32 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_JENT_ENTROPY_BLOCKS_NO_512 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_JENT_ENTROPY_BLOCKS_NO_64 is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_SCHED_DFLT_TIMER_ES is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_SELFTEST is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_SWITCH_DRBG is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_SWITCH_DRNG_KCAPI is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_LRNG_TESTING_MENU is not set' >> $(LINUX_DIR)/.config.set
+	echo '# CONFIG_RANDOM_DEFAULT_IMPL is not set' >> $(LINUX_DIR)/.config.set
+else
+	echo '# CONFIG_LRNG is not set' >> $(LINUX_DIR)/.config.set
+	echo 'CONFIG_RANDOM_DEFAULT_IMPL=y' >> $(LINUX_DIR)/.config.set
+endif
 endef
 
 define Kernel/Configure/Default
-- 
2.43.5

