kbuild: Show marked Kconfig fragments in "help"

Currently the Kconfig fragments in kernel/configs and arch/*/configs
that aren't used internally aren't discoverable through "make help",
which consists of hard-coded lists of config fragments. Instead, list
all the fragment targets that have a "# Help: " comment prefix so the
targets can be generated dynamically.

Add logic to the Makefile to search for and display the fragment and
comment. Add comments to fragments that are intended to be direct targets.

Signed-off-by: Kees Cook <keescook@chromium.org>
Co-developed-by: Masahiro Yamada <masahiroy@kernel.org>
Acked-by: Michael Ellerman <mpe@ellerman.id.au> (powerpc)
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
Kees Cook 2023-08-31 12:13:39 -07:00 committed by Masahiro Yamada
parent 7cd343008b
commit feec5e1f74
20 changed files with 34 additions and 9 deletions

View File

@ -1552,7 +1552,6 @@ help:
@echo ' mrproper - Remove all generated files + config + various backup files'
@echo ' distclean - mrproper + remove editor backup and patch files'
@echo ''
@echo 'Configuration targets:'
@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
@echo ''
@echo 'Other generic targets:'

View File

@ -1 +1,2 @@
# Help: DRAM base at 0x00000000
CONFIG_DRAM_BASE=0x00000000

View File

@ -1 +1,2 @@
# Help: DRAM base at 0xc0000000
CONFIG_DRAM_BASE=0xc0000000

View File

@ -1 +1,2 @@
# Help: DRAM base at 0xd0000000
CONFIG_DRAM_BASE=0xd0000000

View File

@ -1,2 +1,3 @@
# Help: Enable Large Physical Address Extension mode
CONFIG_ARM_LPAE=y
CONFIG_VMSPLIT_2G=y

View File

@ -1,3 +1,4 @@
# Help: Virtualization guest
#
# Base options for platforms
#

View File

@ -1 +1,2 @@
# Help: Disable -Werror
CONFIG_PPC_DISABLE_WERROR=y

View File

@ -1,3 +1,5 @@
# Help: Common security options for PowerPC builds
# This is the equivalent of booting with lockdown=integrity
CONFIG_SECURITY=y
CONFIG_SECURITYFS=y
@ -12,4 +14,4 @@ CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
# UBSAN bounds checking is very cheap and good for hardening
CONFIG_UBSAN=y
# CONFIG_UBSAN_MISC is not set
# CONFIG_UBSAN_MISC is not set

View File

@ -1,3 +1,4 @@
# Help: Build a 32-bit image
CONFIG_ARCH_RV32I=y
CONFIG_32BIT=y
# CONFIG_PORTABLE is not set

View File

@ -1,2 +1,3 @@
# Help: Build a 64-bit image
CONFIG_ARCH_RV64I=y
CONFIG_64BIT=y

View File

@ -1 +1,2 @@
# Help: Enable BTF debug info
CONFIG_DEBUG_INFO_BTF=y

View File

@ -1,3 +1,4 @@
# Help: Enable KASan for debugging
CONFIG_KASAN=y
CONFIG_KASAN_INLINE=y
CONFIG_KASAN_VMALLOC=y

View File

@ -335,9 +335,5 @@ define archhelp
echo ' bzdisk/fdimage*/hdimage/isoimage also accept:'
echo ' FDARGS="..." arguments for the booted kernel'
echo ' FDINITRD=file initrd for the booted kernel'
echo ''
echo ' kvm_guest.config - Enable Kconfig items for running this kernel as a KVM guest'
echo ' xen.config - Enable Kconfig items for running this kernel as a Xen guest'
echo ' x86_debug.config - Enable tip tree debugging options for testing'
endef

View File

@ -1,3 +1,5 @@
# Help: Debugging for CI systems and finding regressions
#
# The config is based on running daily CI for enterprise Linux distros to
# seek regressions on linux-next builds on different bare-metal and virtual
# platforms. It can be used for example,

View File

@ -1,3 +1,4 @@
# Help: Bootable as a KVM guest
CONFIG_NET=y
CONFIG_NET_CORE=y
CONFIG_NETDEVICES=y

View File

@ -1,3 +1,5 @@
# Help: Disable Power Management
CONFIG_PM=n
CONFIG_SUSPEND=n
CONFIG_HIBERNATION=n

View File

@ -1 +1,2 @@
# Help: Enable Rust
CONFIG_RUST=y

View File

@ -1,3 +1,4 @@
# Help: Debugging options for tip tree testing
CONFIG_X86_DEBUG_FPU=y
CONFIG_LOCK_STAT=y
CONFIG_DEBUG_VM=y

View File

@ -1,3 +1,5 @@
# Help: Bootable as a Xen guest
#
# global stuff - these enable us to allow some
# of the not so generic stuff below for xen
CONFIG_PARAVIRT=y

View File

@ -93,11 +93,13 @@ endif
%_defconfig: $(obj)/conf
$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
configfiles = $(wildcard $(srctree)/kernel/configs/$(1) $(srctree)/arch/$(SRCARCH)/configs/$(1))
all-config-fragments = $(call configfiles,*.config)
config-fragments = $(call configfiles,$@)
%.config: $(obj)/conf
$(if $(call configfiles),, $(error No configuration exists for this target on this architecture))
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
$(if $(config-fragments),, $(error $@ fragment does not exists on this architecture))
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(config-fragments)
$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
PHONY += tinyconfig
@ -115,6 +117,7 @@ clean-files += tests/.cache
# Help text used by make help
help:
@echo 'Configuration targets:'
@echo ' config - Update current config utilising a line-oriented program'
@echo ' nconfig - Update current config utilising a ncurses menu based program'
@echo ' menuconfig - Update current config utilising a menu based program'
@ -141,6 +144,12 @@ help:
@echo ' default value without prompting'
@echo ' tinyconfig - Configure the tiniest possible kernel'
@echo ' testconfig - Run Kconfig unit tests (requires python3 and pytest)'
@echo ''
@echo 'Configuration topic targets:'
@$(foreach f, $(all-config-fragments), \
if help=$$(grep -m1 '^# Help: ' $(f)); then \
printf ' %-25s - %s\n' '$(notdir $(f))' "$${help#*: }"; \
fi;)
# ===========================================================================
# object files used by all kconfig flavours