diff mbox series

kbuild: Show Kconfig fragments in "help"

Message ID 20230824223606.never.762-kees@kernel.org (mailing list archive)
State New, archived
Headers show
Series kbuild: Show Kconfig fragments in "help" | expand

Commit Message

Kees Cook Aug. 24, 2023, 10:36 p.m. UTC
Doing a "make help" would show only hard-coded Kconfig targets and
depended on the archhelp target to include ".config" targets. There was
nothing showing global kernel/configs/ targets. Solve this by walking
the wildcard list and include them in the output, using the first comment
line as the help text.

Update all Kconfig fragments to include help text and adjust archhelp
targets to avoid redundancy.

Adds the following section to "help" target output:

Configuration fragment targets (for enabling various Kconfig items):
  debug.config         - Debugging for CI systems and finding regressions
  kvm_guest.config     - Bootable as a KVM guest
  nopm.config          - Disable Power Management
  rust.config          - Enable Rust
  tiny-base.config     - Minimal options for tiny systems
  tiny.config          - Smallest possible kernel image
  x86_debug.config     - Debugging options for tip tree testing
  xen.config           - Bootable as a Xen guest
  tiny.config          - x86-specific options for a small kernel image
  xen.config           - x86-specific options for a Xen virtualization guest

Cc: Masahiro Yamada <masahiroy@kernel.org>
Cc: x86@kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-riscv@lists.infradead.org
Cc: linux-s390@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
---
 Makefile                                   |  1 -
 arch/arm/configs/dram_0x00000000.config    |  1 +
 arch/arm/configs/dram_0xc0000000.config    |  1 +
 arch/arm/configs/dram_0xd0000000.config    |  1 +
 arch/arm/configs/lpae.config               |  1 +
 arch/arm64/configs/virt.config             |  1 +
 arch/powerpc/configs/32-bit.config         |  1 +
 arch/powerpc/configs/64-bit.config         |  1 +
 arch/powerpc/configs/85xx-32bit.config     |  1 +
 arch/powerpc/configs/85xx-64bit.config     |  1 +
 arch/powerpc/configs/85xx-hw.config        |  1 +
 arch/powerpc/configs/85xx-smp.config       |  1 +
 arch/powerpc/configs/86xx-hw.config        |  1 +
 arch/powerpc/configs/86xx-smp.config       |  1 +
 arch/powerpc/configs/altivec.config        |  1 +
 arch/powerpc/configs/be.config             |  1 +
 arch/powerpc/configs/book3s_32.config      |  1 +
 arch/powerpc/configs/corenet_base.config   |  1 +
 arch/powerpc/configs/debug.config          |  1 +
 arch/powerpc/configs/disable-werror.config |  1 +
 arch/powerpc/configs/dpaa.config           |  1 +
 arch/powerpc/configs/fsl-emb-nonhw.config  |  1 +
 arch/powerpc/configs/guest.config          |  1 +
 arch/powerpc/configs/le.config             |  1 +
 arch/powerpc/configs/mpc85xx_base.config   |  1 +
 arch/powerpc/configs/mpc86xx_base.config   |  1 +
 arch/powerpc/configs/ppc64le.config        |  1 +
 arch/powerpc/configs/security.config       |  4 +++-
 arch/riscv/configs/32-bit.config           |  1 +
 arch/riscv/configs/64-bit.config           |  1 +
 arch/s390/configs/btf.config               |  1 +
 arch/s390/configs/kasan.config             |  1 +
 arch/x86/Makefile                          |  4 ----
 arch/x86/configs/tiny.config               |  2 ++
 arch/x86/configs/xen.config                |  2 ++
 kernel/configs/debug.config                |  2 ++
 kernel/configs/kvm_guest.config            |  1 +
 kernel/configs/nopm.config                 |  2 ++
 kernel/configs/rust.config                 |  1 +
 kernel/configs/tiny-base.config            |  1 +
 kernel/configs/tiny.config                 |  2 ++
 kernel/configs/x86_debug.config            |  1 +
 kernel/configs/xen.config                  |  2 ++
 scripts/kconfig/Makefile                   | 13 ++++++++++---
 44 files changed, 59 insertions(+), 9 deletions(-)

Comments

Randy Dunlap Aug. 25, 2023, 12:04 a.m. UTC | #1
Hi Kees,

On 8/24/23 15:36, Kees Cook wrote:
> Doing a "make help" would show only hard-coded Kconfig targets and
> depended on the archhelp target to include ".config" targets. There was
> nothing showing global kernel/configs/ targets. Solve this by walking
> the wildcard list and include them in the output, using the first comment
> line as the help text.
> 
> Update all Kconfig fragments to include help text and adjust archhelp
> targets to avoid redundancy.
> 
> Adds the following section to "help" target output:
> 
> Configuration fragment targets (for enabling various Kconfig items):
>   debug.config         - Debugging for CI systems and finding regressions
>   kvm_guest.config     - Bootable as a KVM guest
>   nopm.config          - Disable Power Management
>   rust.config          - Enable Rust
>   tiny-base.config     - Minimal options for tiny systems
>   tiny.config          - Smallest possible kernel image
>   x86_debug.config     - Debugging options for tip tree testing
>   xen.config           - Bootable as a Xen guest
>   tiny.config          - x86-specific options for a small kernel image
>   xen.config           - x86-specific options for a Xen virtualization guest

ISTM that you are missing the "why" part of this change in the commit
description.

"make tinyconfig" is the real target here.  The other (tiny.) files are just
implementation details.
We can't put all implementation details into help messages and it's not
difficult to find that the (tiny.) config files are merged to make the
final .config file.

So what is it that you are trying to solve?
Christophe Leroy Aug. 25, 2023, 4:56 a.m. UTC | #2
Le 25/08/2023 à 00:36, Kees Cook a écrit :
> Doing a "make help" would show only hard-coded Kconfig targets and
> depended on the archhelp target to include ".config" targets. There was
> nothing showing global kernel/configs/ targets. Solve this by walking
> the wildcard list and include them in the output, using the first comment
> line as the help text.
> 
> Update all Kconfig fragments to include help text and adjust archhelp
> targets to avoid redundancy.
> 
> Adds the following section to "help" target output:
> 
> Configuration fragment targets (for enabling various Kconfig items):
>    debug.config         - Debugging for CI systems and finding regressions
>    kvm_guest.config     - Bootable as a KVM guest
>    nopm.config          - Disable Power Management
>    rust.config          - Enable Rust
>    tiny-base.config     - Minimal options for tiny systems
>    tiny.config          - Smallest possible kernel image
>    x86_debug.config     - Debugging options for tip tree testing
>    xen.config           - Bootable as a Xen guest
>    tiny.config          - x86-specific options for a small kernel image
>    xen.config           - x86-specific options for a Xen virtualization guest
> 
> Cc: Masahiro Yamada <masahiroy@kernel.org>
> Cc: x86@kernel.org
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: linux-riscv@lists.infradead.org
> Cc: linux-s390@vger.kernel.org
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---

> diff --git a/arch/powerpc/configs/85xx-hw.config b/arch/powerpc/configs/85xx-hw.config
> index 524db76f47b7..76b22f8a8172 100644
> --- a/arch/powerpc/configs/85xx-hw.config
> +++ b/arch/powerpc/configs/85xx-hw.config
> @@ -1,3 +1,4 @@
> +# Base hardware support for 86xx

s/86xx/85xx

>   CONFIG_AQUANTIA_PHY=y
>   CONFIG_AT803X_PHY=y
>   CONFIG_ATA=y

> diff --git a/arch/powerpc/configs/book3s_32.config b/arch/powerpc/configs/book3s_32.config
> index 8721eb7b1294..f33483f077db 100644
> --- a/arch/powerpc/configs/book3s_32.config
> +++ b/arch/powerpc/configs/book3s_32.config
> @@ -1,2 +1,3 @@
> +# Base support for Book3s

32 bits Book3s

>   CONFIG_PPC64=n
>   CONFIG_PPC_BOOK3S_32=y

> diff --git a/arch/powerpc/configs/dpaa.config b/arch/powerpc/configs/dpaa.config
> index 4ffacafe4036..65a13ba32813 100644
> --- a/arch/powerpc/configs/dpaa.config
> +++ b/arch/powerpc/configs/dpaa.config
> @@ -1,3 +1,4 @@
> +# Base suppot for DPPA

s/suppot/support/

>   CONFIG_FSL_DPAA=y
>   CONFIG_FSL_PAMU=y
>   CONFIG_FSL_FMAN=y

> diff --git a/arch/powerpc/configs/mpc85xx_base.config b/arch/powerpc/configs/mpc85xx_base.config
> index a1e4d72ed39d..20ecf6575c5c 100644
> --- a/arch/powerpc/configs/mpc85xx_base.config
> +++ b/arch/powerpc/configs/mpc85xx_base.config
> @@ -1,3 +1,4 @@
> +# Base mpc85xxx support

s/mpc85xxx/mpc85xx/

>   CONFIG_MATH_EMULATION=y
>   CONFIG_MPC8536_DS=y
>   CONFIG_MPC85xx_DS=y
> diff --git a/arch/powerpc/configs/mpc86xx_base.config b/arch/powerpc/configs/mpc86xx_base.config
> index 632c014b122d..8239d1e7785d 100644
> --- a/arch/powerpc/configs/mpc86xx_base.config
> +++ b/arch/powerpc/configs/mpc86xx_base.config
> @@ -1,3 +1,4 @@
> +# Base mpc85xxx support

s/mpc85xxx/mpc86xx/

>   CONFIG_PPC_86xx=y
>   CONFIG_GEF_PPC9A=y
>   CONFIG_GEF_SBC310=y
Nicolas Schier Aug. 25, 2023, 5:44 a.m. UTC | #3
On Thu, Aug 24, 2023 at 03:36:10PM -0700, Kees Cook wrote:
> Doing a "make help" would show only hard-coded Kconfig targets and
> depended on the archhelp target to include ".config" targets. There was
> nothing showing global kernel/configs/ targets. Solve this by walking
> the wildcard list and include them in the output, using the first comment
> line as the help text.
> 
> Update all Kconfig fragments to include help text and adjust archhelp
> targets to avoid redundancy.
> 
> Adds the following section to "help" target output:
> 
> Configuration fragment targets (for enabling various Kconfig items):
>   debug.config         - Debugging for CI systems and finding regressions
>   kvm_guest.config     - Bootable as a KVM guest
>   nopm.config          - Disable Power Management
>   rust.config          - Enable Rust
>   tiny-base.config     - Minimal options for tiny systems
>   tiny.config          - Smallest possible kernel image
>   x86_debug.config     - Debugging options for tip tree testing
>   xen.config           - Bootable as a Xen guest
>   tiny.config          - x86-specific options for a small kernel image
>   xen.config           - x86-specific options for a Xen virtualization guest
> 
> Cc: Masahiro Yamada <masahiroy@kernel.org>
> Cc: x86@kernel.org
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linuxppc-dev@lists.ozlabs.org
> Cc: linux-riscv@lists.infradead.org
> Cc: linux-s390@vger.kernel.org
> Signed-off-by: Kees Cook <keescook@chromium.org>
> ---

Thanks for that patch!  Several times I found myself searching the tree
to find a specific kconfig fragment; I think you found a nice solution.
Two minor things below.

>  Makefile                                   |  1 -
>  arch/arm/configs/dram_0x00000000.config    |  1 +
>  arch/arm/configs/dram_0xc0000000.config    |  1 +
>  arch/arm/configs/dram_0xd0000000.config    |  1 +
>  arch/arm/configs/lpae.config               |  1 +
>  arch/arm64/configs/virt.config             |  1 +
>  arch/powerpc/configs/32-bit.config         |  1 +
>  arch/powerpc/configs/64-bit.config         |  1 +
>  arch/powerpc/configs/85xx-32bit.config     |  1 +
>  arch/powerpc/configs/85xx-64bit.config     |  1 +
>  arch/powerpc/configs/85xx-hw.config        |  1 +
>  arch/powerpc/configs/85xx-smp.config       |  1 +
>  arch/powerpc/configs/86xx-hw.config        |  1 +
>  arch/powerpc/configs/86xx-smp.config       |  1 +
>  arch/powerpc/configs/altivec.config        |  1 +
>  arch/powerpc/configs/be.config             |  1 +
>  arch/powerpc/configs/book3s_32.config      |  1 +
>  arch/powerpc/configs/corenet_base.config   |  1 +
>  arch/powerpc/configs/debug.config          |  1 +
>  arch/powerpc/configs/disable-werror.config |  1 +
>  arch/powerpc/configs/dpaa.config           |  1 +
>  arch/powerpc/configs/fsl-emb-nonhw.config  |  1 +
>  arch/powerpc/configs/guest.config          |  1 +
>  arch/powerpc/configs/le.config             |  1 +
>  arch/powerpc/configs/mpc85xx_base.config   |  1 +
>  arch/powerpc/configs/mpc86xx_base.config   |  1 +
>  arch/powerpc/configs/ppc64le.config        |  1 +
>  arch/powerpc/configs/security.config       |  4 +++-
>  arch/riscv/configs/32-bit.config           |  1 +
>  arch/riscv/configs/64-bit.config           |  1 +
>  arch/s390/configs/btf.config               |  1 +
>  arch/s390/configs/kasan.config             |  1 +
>  arch/x86/Makefile                          |  4 ----
>  arch/x86/configs/tiny.config               |  2 ++
>  arch/x86/configs/xen.config                |  2 ++
>  kernel/configs/debug.config                |  2 ++
>  kernel/configs/kvm_guest.config            |  1 +
>  kernel/configs/nopm.config                 |  2 ++
>  kernel/configs/rust.config                 |  1 +
>  kernel/configs/tiny-base.config            |  1 +
>  kernel/configs/tiny.config                 |  2 ++
>  kernel/configs/x86_debug.config            |  1 +
>  kernel/configs/xen.config                  |  2 ++
>  scripts/kconfig/Makefile                   | 13 ++++++++++---
>  44 files changed, 59 insertions(+), 9 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 4739c21a63e2..91c90ce8e0e3 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1674,7 +1674,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:'
> diff --git a/arch/arm/configs/dram_0x00000000.config b/arch/arm/configs/dram_0x00000000.config
> index db96dcb420ce..4de3fde0de9a 100644
> --- a/arch/arm/configs/dram_0x00000000.config
> +++ b/arch/arm/configs/dram_0x00000000.config
> @@ -1 +1,2 @@
> +# DRAM base at 0x00000000
>  CONFIG_DRAM_BASE=0x00000000
> diff --git a/arch/arm/configs/dram_0xc0000000.config b/arch/arm/configs/dram_0xc0000000.config
> index 343d5333d973..fdd4c7b1461e 100644
> --- a/arch/arm/configs/dram_0xc0000000.config
> +++ b/arch/arm/configs/dram_0xc0000000.config
> @@ -1 +1,2 @@
> +# DRAM base at 0xc0000000
>  CONFIG_DRAM_BASE=0xc0000000
> diff --git a/arch/arm/configs/dram_0xd0000000.config b/arch/arm/configs/dram_0xd0000000.config
> index 61ba7045f8a1..54defdc8d24c 100644
> --- a/arch/arm/configs/dram_0xd0000000.config
> +++ b/arch/arm/configs/dram_0xd0000000.config
> @@ -1 +1,2 @@
> +# DRAM base at 0xd0000000
>  CONFIG_DRAM_BASE=0xd0000000
> diff --git a/arch/arm/configs/lpae.config b/arch/arm/configs/lpae.config
> index a6d6f7ab3c01..e8d3cd8f1e4b 100644
> --- a/arch/arm/configs/lpae.config
> +++ b/arch/arm/configs/lpae.config
> @@ -1,2 +1,3 @@
> +# Enable Large Physical Address Extension mode
>  CONFIG_ARM_LPAE=y
>  CONFIG_VMSPLIT_2G=y
> diff --git a/arch/arm64/configs/virt.config b/arch/arm64/configs/virt.config
> index 6865d54e68f8..83333a9aa1a5 100644
> --- a/arch/arm64/configs/virt.config
> +++ b/arch/arm64/configs/virt.config
> @@ -1,3 +1,4 @@
> +# Virtualization guest
>  #
>  # Base options for platforms
>  #
> diff --git a/arch/powerpc/configs/32-bit.config b/arch/powerpc/configs/32-bit.config
> index ad6546850c68..1a4c93a17007 100644
> --- a/arch/powerpc/configs/32-bit.config
> +++ b/arch/powerpc/configs/32-bit.config
> @@ -1 +1,2 @@
> +# Build a 32-bit image
>  # CONFIG_PPC64 is not set
> diff --git a/arch/powerpc/configs/64-bit.config b/arch/powerpc/configs/64-bit.config
> index 0fe6406929e2..cc371309bb0c 100644
> --- a/arch/powerpc/configs/64-bit.config
> +++ b/arch/powerpc/configs/64-bit.config
> @@ -1 +1,2 @@
> +# Build a 64-bit image
>  CONFIG_PPC64=y
> diff --git a/arch/powerpc/configs/85xx-32bit.config b/arch/powerpc/configs/85xx-32bit.config
> index 6b8894d727a2..866e77e22762 100644
> --- a/arch/powerpc/configs/85xx-32bit.config
> +++ b/arch/powerpc/configs/85xx-32bit.config
> @@ -1,3 +1,4 @@
> +# Build a 32-bit 85xx image
>  CONFIG_HIGHMEM=y
>  CONFIG_KEXEC=y
>  CONFIG_PPC_85xx=y
> diff --git a/arch/powerpc/configs/85xx-64bit.config b/arch/powerpc/configs/85xx-64bit.config
> index 4aba81222885..cca4151ee889 100644
> --- a/arch/powerpc/configs/85xx-64bit.config
> +++ b/arch/powerpc/configs/85xx-64bit.config
> @@ -1,3 +1,4 @@
> +# Build a 64-bit 85xx image
>  CONFIG_MATH_EMULATION=y
>  CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED=y
>  CONFIG_PPC64=y
> diff --git a/arch/powerpc/configs/85xx-hw.config b/arch/powerpc/configs/85xx-hw.config
> index 524db76f47b7..76b22f8a8172 100644
> --- a/arch/powerpc/configs/85xx-hw.config
> +++ b/arch/powerpc/configs/85xx-hw.config
> @@ -1,3 +1,4 @@
> +# Base hardware support for 86xx
>  CONFIG_AQUANTIA_PHY=y
>  CONFIG_AT803X_PHY=y
>  CONFIG_ATA=y
> diff --git a/arch/powerpc/configs/85xx-smp.config b/arch/powerpc/configs/85xx-smp.config
> index 3b4d1e54636d..d3525e71cb2f 100644
> --- a/arch/powerpc/configs/85xx-smp.config
> +++ b/arch/powerpc/configs/85xx-smp.config
> @@ -1,2 +1,3 @@
> +# Enable SMP on 85xx
>  CONFIG_NR_CPUS=24
>  CONFIG_SMP=y
> diff --git a/arch/powerpc/configs/86xx-hw.config b/arch/powerpc/configs/86xx-hw.config
> index 0cb24b33c88e..7b8d9f9c3c01 100644
> --- a/arch/powerpc/configs/86xx-hw.config
> +++ b/arch/powerpc/configs/86xx-hw.config
> @@ -1,3 +1,4 @@
> +# Base hardware support for 86xx
>  CONFIG_ATA=y
>  CONFIG_BLK_DEV_SD=y
>  CONFIG_BLK_DEV_SR=y
> diff --git a/arch/powerpc/configs/86xx-smp.config b/arch/powerpc/configs/86xx-smp.config
> index 40ac38d3038c..e6cd06a35624 100644
> --- a/arch/powerpc/configs/86xx-smp.config
> +++ b/arch/powerpc/configs/86xx-smp.config
> @@ -1,2 +1,3 @@
> +# Enable SMP on 86xx
>  CONFIG_NR_CPUS=2
>  CONFIG_SMP=y
> diff --git a/arch/powerpc/configs/altivec.config b/arch/powerpc/configs/altivec.config
> index 58a697cb5a62..1c8eb9b23a7f 100644
> --- a/arch/powerpc/configs/altivec.config
> +++ b/arch/powerpc/configs/altivec.config
> @@ -1 +1,2 @@
> +# Enable Altivec support
>  CONFIG_ALTIVEC=y
> diff --git a/arch/powerpc/configs/be.config b/arch/powerpc/configs/be.config
> index c5cdc99a6530..568bba8ea109 100644
> --- a/arch/powerpc/configs/be.config
> +++ b/arch/powerpc/configs/be.config
> @@ -1 +1,2 @@
> +# Enable Big Endian mode
>  CONFIG_CPU_BIG_ENDIAN=y
> diff --git a/arch/powerpc/configs/book3s_32.config b/arch/powerpc/configs/book3s_32.config
> index 8721eb7b1294..f33483f077db 100644
> --- a/arch/powerpc/configs/book3s_32.config
> +++ b/arch/powerpc/configs/book3s_32.config
> @@ -1,2 +1,3 @@
> +# Base support for Book3s
>  CONFIG_PPC64=n
>  CONFIG_PPC_BOOK3S_32=y
> diff --git a/arch/powerpc/configs/corenet_base.config b/arch/powerpc/configs/corenet_base.config
> index 1c40de1e764b..47bb6e25c90b 100644
> --- a/arch/powerpc/configs/corenet_base.config
> +++ b/arch/powerpc/configs/corenet_base.config
> @@ -1,2 +1,3 @@
> +# Base support for corenet
>  CONFIG_CORENET_GENERIC=y
>  CONFIG_PPC_QEMU_E500=y
> diff --git a/arch/powerpc/configs/debug.config b/arch/powerpc/configs/debug.config
> index a14ae1f20d60..223b8a2ee8ec 100644
> --- a/arch/powerpc/configs/debug.config
> +++ b/arch/powerpc/configs/debug.config
> @@ -1 +1,2 @@
> +# Enable PowerPC specific debug options
>  CONFIG_SCOM_DEBUGFS=y
> diff --git a/arch/powerpc/configs/disable-werror.config b/arch/powerpc/configs/disable-werror.config
> index 6ea12a12432c..76a7847f39ce 100644
> --- a/arch/powerpc/configs/disable-werror.config
> +++ b/arch/powerpc/configs/disable-werror.config
> @@ -1 +1,2 @@
> +# Disable -Werror
>  CONFIG_PPC_DISABLE_WERROR=y
> diff --git a/arch/powerpc/configs/dpaa.config b/arch/powerpc/configs/dpaa.config
> index 4ffacafe4036..65a13ba32813 100644
> --- a/arch/powerpc/configs/dpaa.config
> +++ b/arch/powerpc/configs/dpaa.config
> @@ -1,3 +1,4 @@
> +# Base suppot for DPPA
>  CONFIG_FSL_DPAA=y
>  CONFIG_FSL_PAMU=y
>  CONFIG_FSL_FMAN=y
> diff --git a/arch/powerpc/configs/fsl-emb-nonhw.config b/arch/powerpc/configs/fsl-emb-nonhw.config
> index 3009b0efaf34..d1249996cf45 100644
> --- a/arch/powerpc/configs/fsl-emb-nonhw.config
> +++ b/arch/powerpc/configs/fsl-emb-nonhw.config
> @@ -1,3 +1,4 @@
> +# Non-hardware options common to 85xx and corenet
>  CONFIG_ADFS_FS=m
>  CONFIG_AFFS_FS=m
>  CONFIG_AUDIT=y
> diff --git a/arch/powerpc/configs/guest.config b/arch/powerpc/configs/guest.config
> index fece83487215..f04ababbb35a 100644
> --- a/arch/powerpc/configs/guest.config
> +++ b/arch/powerpc/configs/guest.config
> @@ -1,3 +1,4 @@
> +# PowerPC specific virtualization guest options
>  CONFIG_VIRTIO_BLK=y
>  CONFIG_SCSI_VIRTIO=y
>  CONFIG_VIRTIO_NET=y
> diff --git a/arch/powerpc/configs/le.config b/arch/powerpc/configs/le.config
> index ee43fdb3b8f4..bcf657e1d21f 100644
> --- a/arch/powerpc/configs/le.config
> +++ b/arch/powerpc/configs/le.config
> @@ -1 +1,2 @@
> +# Enable Little Endian mode
>  CONFIG_CPU_LITTLE_ENDIAN=y
> diff --git a/arch/powerpc/configs/mpc85xx_base.config b/arch/powerpc/configs/mpc85xx_base.config
> index a1e4d72ed39d..20ecf6575c5c 100644
> --- a/arch/powerpc/configs/mpc85xx_base.config
> +++ b/arch/powerpc/configs/mpc85xx_base.config
> @@ -1,3 +1,4 @@
> +# Base mpc85xxx support
>  CONFIG_MATH_EMULATION=y
>  CONFIG_MPC8536_DS=y
>  CONFIG_MPC85xx_DS=y
> diff --git a/arch/powerpc/configs/mpc86xx_base.config b/arch/powerpc/configs/mpc86xx_base.config
> index 632c014b122d..8239d1e7785d 100644
> --- a/arch/powerpc/configs/mpc86xx_base.config
> +++ b/arch/powerpc/configs/mpc86xx_base.config
> @@ -1,3 +1,4 @@
> +# Base mpc85xxx support
>  CONFIG_PPC_86xx=y
>  CONFIG_GEF_PPC9A=y
>  CONFIG_GEF_SBC310=y
> diff --git a/arch/powerpc/configs/ppc64le.config b/arch/powerpc/configs/ppc64le.config
> index 14dca1062c1b..ac3614cd7926 100644
> --- a/arch/powerpc/configs/ppc64le.config
> +++ b/arch/powerpc/configs/ppc64le.config
> @@ -1,2 +1,3 @@
> +# Enable ppc64le mode
>  CONFIG_PPC64=y
>  CONFIG_CPU_LITTLE_ENDIAN=y
> diff --git a/arch/powerpc/configs/security.config b/arch/powerpc/configs/security.config
> index 1c91a35c6a73..f47034955d12 100644
> --- a/arch/powerpc/configs/security.config
> +++ b/arch/powerpc/configs/security.config
> @@ -1,3 +1,5 @@
> +# 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
> \ No newline at end of file
> +# CONFIG_UBSAN_MISC is not set
> diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config
> index f6af0f708df4..60dfa2809b19 100644
> --- a/arch/riscv/configs/32-bit.config
> +++ b/arch/riscv/configs/32-bit.config
> @@ -1,3 +1,4 @@
> +# Build a 32-bit image
>  CONFIG_ARCH_RV32I=y
>  CONFIG_32BIT=y
>  # CONFIG_PORTABLE is not set
> diff --git a/arch/riscv/configs/64-bit.config b/arch/riscv/configs/64-bit.config
> index 313edc554d84..31a1ad138944 100644
> --- a/arch/riscv/configs/64-bit.config
> +++ b/arch/riscv/configs/64-bit.config
> @@ -1,2 +1,3 @@
> +# Build a 64-bit image
>  CONFIG_ARCH_RV64I=y
>  CONFIG_64BIT=y
> diff --git a/arch/s390/configs/btf.config b/arch/s390/configs/btf.config
> index 39227b4511af..c69b1a370990 100644
> --- a/arch/s390/configs/btf.config
> +++ b/arch/s390/configs/btf.config
> @@ -1 +1,2 @@
> +# Enable BTF debug info
>  CONFIG_DEBUG_INFO_BTF=y
> diff --git a/arch/s390/configs/kasan.config b/arch/s390/configs/kasan.config
> index 700a8b25c3ff..da2e1f28c13c 100644
> --- a/arch/s390/configs/kasan.config
> +++ b/arch/s390/configs/kasan.config
> @@ -1,3 +1,4 @@
> +# Enable KASan for debugging
>  CONFIG_KASAN=y
>  CONFIG_KASAN_INLINE=y
>  CONFIG_KASAN_VMALLOC=y
> diff --git a/arch/x86/Makefile b/arch/x86/Makefile
> index fdc2e3abd615..c4b2a8a19fc8 100644
> --- a/arch/x86/Makefile
> +++ b/arch/x86/Makefile
> @@ -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
> diff --git a/arch/x86/configs/tiny.config b/arch/x86/configs/tiny.config
> index 66c9e2aab16c..4b75a11369e3 100644
> --- a/arch/x86/configs/tiny.config
> +++ b/arch/x86/configs/tiny.config
> @@ -1,3 +1,5 @@
> +# x86-specific options for a small kernel image
> +#
>  CONFIG_NOHIGHMEM=y
>  # CONFIG_HIGHMEM4G is not set
>  # CONFIG_HIGHMEM64G is not set
> diff --git a/arch/x86/configs/xen.config b/arch/x86/configs/xen.config
> index 581296255b39..46653ec602e0 100644
> --- a/arch/x86/configs/xen.config
> +++ b/arch/x86/configs/xen.config
> @@ -1,3 +1,5 @@
> +# x86-specific options for a Xen virtualization guest
> +#
>  # global x86 required specific stuff
>  # On 32-bit HIGHMEM4G is not allowed
>  CONFIG_HIGHMEM64G=y
> diff --git a/kernel/configs/debug.config b/kernel/configs/debug.config
> index e8db8d938661..874afe2cd7c0 100644
> --- a/kernel/configs/debug.config
> +++ b/kernel/configs/debug.config
> @@ -1,3 +1,5 @@
> +# 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,
> diff --git a/kernel/configs/kvm_guest.config b/kernel/configs/kvm_guest.config
> index 208481d91090..3cc2810147da 100644
> --- a/kernel/configs/kvm_guest.config
> +++ b/kernel/configs/kvm_guest.config
> @@ -1,3 +1,4 @@
> +# Bootable as a KVM guest
>  CONFIG_NET=y
>  CONFIG_NET_CORE=y
>  CONFIG_NETDEVICES=y
> diff --git a/kernel/configs/nopm.config b/kernel/configs/nopm.config
> index 81ff07863576..a377c5914218 100644
> --- a/kernel/configs/nopm.config
> +++ b/kernel/configs/nopm.config
> @@ -1,3 +1,5 @@
> +# Disable Power Management
> +
>  CONFIG_PM=n
>  CONFIG_SUSPEND=n
>  CONFIG_HIBERNATION=n
> diff --git a/kernel/configs/rust.config b/kernel/configs/rust.config
> index 38a7c5362c9c..941c69c161ad 100644
> --- a/kernel/configs/rust.config
> +++ b/kernel/configs/rust.config
> @@ -1 +1,2 @@
> +# Enable Rust
>  CONFIG_RUST=y
> diff --git a/kernel/configs/tiny-base.config b/kernel/configs/tiny-base.config
> index 2f0e6bf6db2c..ac4d254abc3f 100644
> --- a/kernel/configs/tiny-base.config
> +++ b/kernel/configs/tiny-base.config
> @@ -1 +1,2 @@
> +# Minimal options for tiny systems
>  CONFIG_EMBEDDED=y

(just a note: Randy prepared a patch for removing CONFIG_EMBEDDED:
https://lore.kernel.org/linux-kbuild/20230816055010.31534-1-rdunlap@infradead.org/)

> diff --git a/kernel/configs/tiny.config b/kernel/configs/tiny.config
> index 00009f7d0835..ea643e8f7f14 100644
> --- a/kernel/configs/tiny.config
> +++ b/kernel/configs/tiny.config
> @@ -1,3 +1,5 @@
> +# Smallest possible kernel image

For this fragment alone (not within 'tinyconfig'), "Size-optimize kernel
image" possibly fits better?

> +#
>  # CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
>  CONFIG_CC_OPTIMIZE_FOR_SIZE=y
>  # CONFIG_KERNEL_GZIP is not set
> diff --git a/kernel/configs/x86_debug.config b/kernel/configs/x86_debug.config
> index 6fac5b405334..8a1129a1d59a 100644
> --- a/kernel/configs/x86_debug.config
> +++ b/kernel/configs/x86_debug.config
> @@ -1,3 +1,4 @@
> +# Debugging options for tip tree testing
>  CONFIG_X86_DEBUG_FPU=y
>  CONFIG_LOCK_STAT=y
>  CONFIG_DEBUG_VM=y
> diff --git a/kernel/configs/xen.config b/kernel/configs/xen.config
> index 436f806aa1ed..d14880177fd2 100644
> --- a/kernel/configs/xen.config
> +++ b/kernel/configs/xen.config
> @@ -1,3 +1,5 @@
> +# 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
> diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> index af1c96198f49..c523f24b504a 100644
> --- a/scripts/kconfig/Makefile
> +++ b/scripts/kconfig/Makefile
> @@ -93,11 +93,11 @@ 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))
>  
>  %.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 $(call configfiles,$@),, $(error No configuration exists for this target on this architecture))
> +	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(call configfiles,$@)
>  	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
>  
>  PHONY += tinyconfig
> @@ -115,6 +115,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 +142,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 fragment targets (for enabling various Kconfig items):'
> +	@$(foreach c, $(call configfiles,*.config), \
> +		printf "  %-20s - %s\\n" \
> +			$(shell basename $(c)) \
> +			"$(subst # ,,$(shell grep -m1 '^# ' $(c)))";)

Better use '$(notdir $(c))` instead of forking a shell with
'$(shell basename $(c))'.

Kind regards,
Nicolas
Michael Ellerman Aug. 25, 2023, 6:11 a.m. UTC | #4
Kees Cook <keescook@chromium.org> writes:
> Doing a "make help" would show only hard-coded Kconfig targets and
> depended on the archhelp target to include ".config" targets. There was
> nothing showing global kernel/configs/ targets. Solve this by walking
> the wildcard list and include them in the output, using the first comment
> line as the help text.
>
> Update all Kconfig fragments to include help text and adjust archhelp
> targets to avoid redundancy.
>
> Adds the following section to "help" target output:
>
> Configuration fragment targets (for enabling various Kconfig items):
>   debug.config         - Debugging for CI systems and finding regressions
>   kvm_guest.config     - Bootable as a KVM guest
>   nopm.config          - Disable Power Management
>   rust.config          - Enable Rust
>   tiny-base.config     - Minimal options for tiny systems
>   tiny.config          - Smallest possible kernel image
>   x86_debug.config     - Debugging options for tip tree testing
>   xen.config           - Bootable as a Xen guest
>   tiny.config          - x86-specific options for a small kernel image
>   xen.config           - x86-specific options for a Xen virtualization guest

I think we need a way to opt some files out.

It's a bit ugly on powerpc because there are so many fragments:

Configuration fragment targets (for enabling various Kconfig items):
  debug.config         - Debugging for CI systems and finding regressions
  kvm_guest.config     - Bootable as a KVM guest
  nopm.config          - Disable Power Management
  rust.config          - Enable Rust
  tiny-base.config     - Minimal options for tiny systems
  tiny.config          - Smallest possible kernel image
  x86_debug.config     - Debugging options for tip tree testing
  xen.config           - Bootable as a Xen guest
  32-bit.config        - Build a 32-bit image
  64-bit.config        - Build a 64-bit image
  85xx-32bit.config    - Build a 32-bit 85xx image
  85xx-64bit.config    - Build a 64-bit 85xx image
  85xx-hw.config       - Base hardware support for 86xx
  85xx-smp.config      - Enable SMP on 85xx
  86xx-hw.config       - Base hardware support for 86xx
  86xx-smp.config      - Enable SMP on 86xx
  altivec.config       - Enable Altivec support
  be.config            - Enable Big Endian mode
  book3s_32.config     - Base support for Book3s
  corenet_base.config  - Base support for corenet
  debug.config         - Enable PowerPC specific debug options
  disable-werror.config - Disable -Werror
  dpaa.config          - Base suppot for DPPA
  fsl-emb-nonhw.config - Non-hardware options common to 85xx and corenet
  guest.config         - PowerPC specific virtualization guest options
  kvm_guest.config     - Bootable as a KVM guest
  le.config            - Enable Little Endian mode
  mpc85xx_base.config  - Base mpc85xxx support
  mpc86xx_base.config  - Base mpc85xxx support
  ppc64le.config       - Enable ppc64le mode
  security.config      - Common security options for PowerPC builds

And some of those are not intended for use with "make foo.config",
they're used internally for generating our "normal" defconfigs and they
don't necessarily work on their own.

Also I'd like to add more fragments in future, to the point where nearly
all our configs are generated by them.

Can we have some way to differentiate fragments that are intended to be
used with "make foo.config" vs just being used internally to generate
other configs.

The obvious thing would be to use a different suffix, eg. "foo.fragment"
for internal use fragments. That would require changing
merge_into_defconfig and merge_into_defconfig_override to not assume the
.config suffix, and update the users in arm, arm64 and powerpc.

The other option would be to ignore .config files starting with eg. "_".

+       @$(foreach c, $(filter-out $(call configfiles,_*.config),$(call configfiles,*.config)), \
+               printf "  %-20s - %s\\n" \
+                       $(shell basename $(c)) \
+                       "$(subst # ,,$(shell grep -m1 '^# ' $(c)))";)

Not sure which is preferable.

cheers
Kees Cook Aug. 25, 2023, 6:20 p.m. UTC | #5
On Thu, Aug 24, 2023 at 05:04:02PM -0700, Randy Dunlap wrote:
> Hi Kees,
> 
> On 8/24/23 15:36, Kees Cook wrote:
> > Doing a "make help" would show only hard-coded Kconfig targets and
> > depended on the archhelp target to include ".config" targets. There was
> > nothing showing global kernel/configs/ targets. Solve this by walking
> > the wildcard list and include them in the output, using the first comment
> > line as the help text.
> > 
> > Update all Kconfig fragments to include help text and adjust archhelp
> > targets to avoid redundancy.
> > 
> > Adds the following section to "help" target output:
> > 
> > Configuration fragment targets (for enabling various Kconfig items):
> >   debug.config         - Debugging for CI systems and finding regressions
> >   kvm_guest.config     - Bootable as a KVM guest
> >   nopm.config          - Disable Power Management
> >   rust.config          - Enable Rust
> >   tiny-base.config     - Minimal options for tiny systems
> >   tiny.config          - Smallest possible kernel image
> >   x86_debug.config     - Debugging options for tip tree testing
> >   xen.config           - Bootable as a Xen guest
> >   tiny.config          - x86-specific options for a small kernel image
> >   xen.config           - x86-specific options for a Xen virtualization guest
> 
> ISTM that you are missing the "why" part of this change in the commit
> description.

I want to see what fragments are available without needing to know the
source tree layout for their locations. :)

> "make tinyconfig" is the real target here.  The other (tiny.) files are just
> implementation details.
> We can't put all implementation details into help messages and it's not
> difficult to find that the (tiny.) config files are merged to make the
> final .config file.

Yeah, this seems true for much of the ppc stuff to, as pointed out by
mpe. I'll go answer there...
Kees Cook Aug. 25, 2023, 6:21 p.m. UTC | #6
On Fri, Aug 25, 2023 at 04:56:54AM +0000, Christophe Leroy wrote:
> Le 25/08/2023 à 00:36, Kees Cook a écrit :
> > +# Base hardware support for 86xx
> 
> s/86xx/85xx
> [...]

Thanks for the typo fixes! I'll get these all fixed up. :)
Kees Cook Aug. 25, 2023, 6:23 p.m. UTC | #7
On Fri, Aug 25, 2023 at 07:44:06AM +0200, Nicolas Schier wrote:
> On Thu, Aug 24, 2023 at 03:36:10PM -0700, Kees Cook wrote:
> > Doing a "make help" would show only hard-coded Kconfig targets and
> > depended on the archhelp target to include ".config" targets. There was
> > nothing showing global kernel/configs/ targets. Solve this by walking
> > the wildcard list and include them in the output, using the first comment
> > line as the help text.
> > [...]
> 
> Thanks for that patch!  Several times I found myself searching the tree
> to find a specific kconfig fragment; I think you found a nice solution.
> Two minor things below.
> 
> [...]
> > diff --git a/kernel/configs/tiny-base.config b/kernel/configs/tiny-base.config
> > index 2f0e6bf6db2c..ac4d254abc3f 100644
> > --- a/kernel/configs/tiny-base.config
> > +++ b/kernel/configs/tiny-base.config
> > @@ -1 +1,2 @@
> > +# Minimal options for tiny systems
> >  CONFIG_EMBEDDED=y
> 
> (just a note: Randy prepared a patch for removing CONFIG_EMBEDDED:
> https://lore.kernel.org/linux-kbuild/20230816055010.31534-1-rdunlap@infradead.org/)

Ah yeah, I'll rebase this after the merge window, I guess...

> > diff --git a/kernel/configs/tiny.config b/kernel/configs/tiny.config
> > index 00009f7d0835..ea643e8f7f14 100644
> > --- a/kernel/configs/tiny.config
> > +++ b/kernel/configs/tiny.config
> > @@ -1,3 +1,5 @@
> > +# Smallest possible kernel image
> 
> For this fragment alone (not within 'tinyconfig'), "Size-optimize kernel
> image" possibly fits better?

Sounds good to me!

> > diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> > index af1c96198f49..c523f24b504a 100644
> > --- a/scripts/kconfig/Makefile
> > +++ b/scripts/kconfig/Makefile
> > @@ -93,11 +93,11 @@ 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))
> >  
> >  %.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 $(call configfiles,$@),, $(error No configuration exists for this target on this architecture))
> > +	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(call configfiles,$@)
> >  	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
> >  
> >  PHONY += tinyconfig
> > @@ -115,6 +115,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 +142,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 fragment targets (for enabling various Kconfig items):'
> > +	@$(foreach c, $(call configfiles,*.config), \
> > +		printf "  %-20s - %s\\n" \
> > +			$(shell basename $(c)) \
> > +			"$(subst # ,,$(shell grep -m1 '^# ' $(c)))";)
> 
> Better use '$(notdir $(c))` instead of forking a shell with
> '$(shell basename $(c))'.

Ah! Thank you. I *knew* there was a function for this but couldn't find
it for some reason. :)
Kees Cook Aug. 25, 2023, 6:33 p.m. UTC | #8
On Fri, Aug 25, 2023 at 04:11:58PM +1000, Michael Ellerman wrote:
> Kees Cook <keescook@chromium.org> writes:
> > Doing a "make help" would show only hard-coded Kconfig targets and
> > depended on the archhelp target to include ".config" targets. There was
> > nothing showing global kernel/configs/ targets. Solve this by walking
> > the wildcard list and include them in the output, using the first comment
> > line as the help text.
> >
> > Update all Kconfig fragments to include help text and adjust archhelp
> > targets to avoid redundancy.
> >
> > Adds the following section to "help" target output:
> >
> > Configuration fragment targets (for enabling various Kconfig items):
> >   debug.config         - Debugging for CI systems and finding regressions
> >   kvm_guest.config     - Bootable as a KVM guest
> >   nopm.config          - Disable Power Management
> >   rust.config          - Enable Rust
> >   tiny-base.config     - Minimal options for tiny systems
> >   tiny.config          - Smallest possible kernel image
> >   x86_debug.config     - Debugging options for tip tree testing
> >   xen.config           - Bootable as a Xen guest
> >   tiny.config          - x86-specific options for a small kernel image
> >   xen.config           - x86-specific options for a Xen virtualization guest
> 
> I think we need a way to opt some files out.
> 
> It's a bit ugly on powerpc because there are so many fragments:
> 
> Configuration fragment targets (for enabling various Kconfig items):
>   debug.config         - Debugging for CI systems and finding regressions
>   kvm_guest.config     - Bootable as a KVM guest
>   nopm.config          - Disable Power Management
>   rust.config          - Enable Rust
>   tiny-base.config     - Minimal options for tiny systems
>   tiny.config          - Smallest possible kernel image
>   x86_debug.config     - Debugging options for tip tree testing
>   xen.config           - Bootable as a Xen guest
>   32-bit.config        - Build a 32-bit image
>   64-bit.config        - Build a 64-bit image
>   85xx-32bit.config    - Build a 32-bit 85xx image
>   85xx-64bit.config    - Build a 64-bit 85xx image
>   85xx-hw.config       - Base hardware support for 86xx
>   85xx-smp.config      - Enable SMP on 85xx
>   86xx-hw.config       - Base hardware support for 86xx
>   86xx-smp.config      - Enable SMP on 86xx
>   altivec.config       - Enable Altivec support
>   be.config            - Enable Big Endian mode
>   book3s_32.config     - Base support for Book3s
>   corenet_base.config  - Base support for corenet
>   debug.config         - Enable PowerPC specific debug options
>   disable-werror.config - Disable -Werror
>   dpaa.config          - Base suppot for DPPA
>   fsl-emb-nonhw.config - Non-hardware options common to 85xx and corenet
>   guest.config         - PowerPC specific virtualization guest options
>   kvm_guest.config     - Bootable as a KVM guest
>   le.config            - Enable Little Endian mode
>   mpc85xx_base.config  - Base mpc85xxx support
>   mpc86xx_base.config  - Base mpc85xxx support
>   ppc64le.config       - Enable ppc64le mode
>   security.config      - Common security options for PowerPC builds
> 
> And some of those are not intended for use with "make foo.config",
> they're used internally for generating our "normal" defconfigs and they
> don't necessarily work on their own.
> 
> Also I'd like to add more fragments in future, to the point where nearly
> all our configs are generated by them.
> 
> Can we have some way to differentiate fragments that are intended to be
> used with "make foo.config" vs just being used internally to generate
> other configs.
> 
> The obvious thing would be to use a different suffix, eg. "foo.fragment"
> for internal use fragments. That would require changing
> merge_into_defconfig and merge_into_defconfig_override to not assume the
> .config suffix, and update the users in arm, arm64 and powerpc.
> 
> The other option would be to ignore .config files starting with eg. "_".
> 
> +       @$(foreach c, $(filter-out $(call configfiles,_*.config),$(call configfiles,*.config)), \
> +               printf "  %-20s - %s\\n" \
> +                       $(shell basename $(c)) \
> +                       "$(subst # ,,$(shell grep -m1 '^# ' $(c)))";)
> 
> Not sure which is preferable.

Yeah, I wasn't too happy about some of these results. There seems to be
three cases a fragment:

- user-visible make target
- used internally
- arch-specific settings for a user-visible make target (redundant)

Only the first should be visible. The trouble is that some user-visible
targets are arch-specific.

I think I like your idea of having both .config and .fragment... I'll
give that a try and see how it looks.
Randy Dunlap Aug. 25, 2023, 7:11 p.m. UTC | #9
On 8/25/23 11:20, Kees Cook wrote:
> On Thu, Aug 24, 2023 at 05:04:02PM -0700, Randy Dunlap wrote:
>> Hi Kees,
>>
>> On 8/24/23 15:36, Kees Cook wrote:
>>> Doing a "make help" would show only hard-coded Kconfig targets and
>>> depended on the archhelp target to include ".config" targets. There was
>>> nothing showing global kernel/configs/ targets. Solve this by walking
>>> the wildcard list and include them in the output, using the first comment
>>> line as the help text.
>>>
>>> Update all Kconfig fragments to include help text and adjust archhelp
>>> targets to avoid redundancy.
>>>
>>> Adds the following section to "help" target output:
>>>
>>> Configuration fragment targets (for enabling various Kconfig items):
>>>   debug.config         - Debugging for CI systems and finding regressions
>>>   kvm_guest.config     - Bootable as a KVM guest
>>>   nopm.config          - Disable Power Management
>>>   rust.config          - Enable Rust
>>>   tiny-base.config     - Minimal options for tiny systems
>>>   tiny.config          - Smallest possible kernel image
>>>   x86_debug.config     - Debugging options for tip tree testing
>>>   xen.config           - Bootable as a Xen guest
>>>   tiny.config          - x86-specific options for a small kernel image
>>>   xen.config           - x86-specific options for a Xen virtualization guest
>>
>> ISTM that you are missing the "why" part of this change in the commit
>> description.
> 
> I want to see what fragments are available without needing to know the
> source tree layout for their locations. :)

Why?  :)

but you don't have to answer. I acquiesce (i.e., give up).

>> "make tinyconfig" is the real target here.  The other (tiny.) files are just
>> implementation details.
>> We can't put all implementation details into help messages and it's not
>> difficult to find that the (tiny.) config files are merged to make the
>> final .config file.
> 
> Yeah, this seems true for much of the ppc stuff to, as pointed out by
> mpe. I'll go answer there...
>
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 4739c21a63e2..91c90ce8e0e3 100644
--- a/Makefile
+++ b/Makefile
@@ -1674,7 +1674,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:'
diff --git a/arch/arm/configs/dram_0x00000000.config b/arch/arm/configs/dram_0x00000000.config
index db96dcb420ce..4de3fde0de9a 100644
--- a/arch/arm/configs/dram_0x00000000.config
+++ b/arch/arm/configs/dram_0x00000000.config
@@ -1 +1,2 @@ 
+# DRAM base at 0x00000000
 CONFIG_DRAM_BASE=0x00000000
diff --git a/arch/arm/configs/dram_0xc0000000.config b/arch/arm/configs/dram_0xc0000000.config
index 343d5333d973..fdd4c7b1461e 100644
--- a/arch/arm/configs/dram_0xc0000000.config
+++ b/arch/arm/configs/dram_0xc0000000.config
@@ -1 +1,2 @@ 
+# DRAM base at 0xc0000000
 CONFIG_DRAM_BASE=0xc0000000
diff --git a/arch/arm/configs/dram_0xd0000000.config b/arch/arm/configs/dram_0xd0000000.config
index 61ba7045f8a1..54defdc8d24c 100644
--- a/arch/arm/configs/dram_0xd0000000.config
+++ b/arch/arm/configs/dram_0xd0000000.config
@@ -1 +1,2 @@ 
+# DRAM base at 0xd0000000
 CONFIG_DRAM_BASE=0xd0000000
diff --git a/arch/arm/configs/lpae.config b/arch/arm/configs/lpae.config
index a6d6f7ab3c01..e8d3cd8f1e4b 100644
--- a/arch/arm/configs/lpae.config
+++ b/arch/arm/configs/lpae.config
@@ -1,2 +1,3 @@ 
+# Enable Large Physical Address Extension mode
 CONFIG_ARM_LPAE=y
 CONFIG_VMSPLIT_2G=y
diff --git a/arch/arm64/configs/virt.config b/arch/arm64/configs/virt.config
index 6865d54e68f8..83333a9aa1a5 100644
--- a/arch/arm64/configs/virt.config
+++ b/arch/arm64/configs/virt.config
@@ -1,3 +1,4 @@ 
+# Virtualization guest
 #
 # Base options for platforms
 #
diff --git a/arch/powerpc/configs/32-bit.config b/arch/powerpc/configs/32-bit.config
index ad6546850c68..1a4c93a17007 100644
--- a/arch/powerpc/configs/32-bit.config
+++ b/arch/powerpc/configs/32-bit.config
@@ -1 +1,2 @@ 
+# Build a 32-bit image
 # CONFIG_PPC64 is not set
diff --git a/arch/powerpc/configs/64-bit.config b/arch/powerpc/configs/64-bit.config
index 0fe6406929e2..cc371309bb0c 100644
--- a/arch/powerpc/configs/64-bit.config
+++ b/arch/powerpc/configs/64-bit.config
@@ -1 +1,2 @@ 
+# Build a 64-bit image
 CONFIG_PPC64=y
diff --git a/arch/powerpc/configs/85xx-32bit.config b/arch/powerpc/configs/85xx-32bit.config
index 6b8894d727a2..866e77e22762 100644
--- a/arch/powerpc/configs/85xx-32bit.config
+++ b/arch/powerpc/configs/85xx-32bit.config
@@ -1,3 +1,4 @@ 
+# Build a 32-bit 85xx image
 CONFIG_HIGHMEM=y
 CONFIG_KEXEC=y
 CONFIG_PPC_85xx=y
diff --git a/arch/powerpc/configs/85xx-64bit.config b/arch/powerpc/configs/85xx-64bit.config
index 4aba81222885..cca4151ee889 100644
--- a/arch/powerpc/configs/85xx-64bit.config
+++ b/arch/powerpc/configs/85xx-64bit.config
@@ -1,3 +1,4 @@ 
+# Build a 64-bit 85xx image
 CONFIG_MATH_EMULATION=y
 CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED=y
 CONFIG_PPC64=y
diff --git a/arch/powerpc/configs/85xx-hw.config b/arch/powerpc/configs/85xx-hw.config
index 524db76f47b7..76b22f8a8172 100644
--- a/arch/powerpc/configs/85xx-hw.config
+++ b/arch/powerpc/configs/85xx-hw.config
@@ -1,3 +1,4 @@ 
+# Base hardware support for 86xx
 CONFIG_AQUANTIA_PHY=y
 CONFIG_AT803X_PHY=y
 CONFIG_ATA=y
diff --git a/arch/powerpc/configs/85xx-smp.config b/arch/powerpc/configs/85xx-smp.config
index 3b4d1e54636d..d3525e71cb2f 100644
--- a/arch/powerpc/configs/85xx-smp.config
+++ b/arch/powerpc/configs/85xx-smp.config
@@ -1,2 +1,3 @@ 
+# Enable SMP on 85xx
 CONFIG_NR_CPUS=24
 CONFIG_SMP=y
diff --git a/arch/powerpc/configs/86xx-hw.config b/arch/powerpc/configs/86xx-hw.config
index 0cb24b33c88e..7b8d9f9c3c01 100644
--- a/arch/powerpc/configs/86xx-hw.config
+++ b/arch/powerpc/configs/86xx-hw.config
@@ -1,3 +1,4 @@ 
+# Base hardware support for 86xx
 CONFIG_ATA=y
 CONFIG_BLK_DEV_SD=y
 CONFIG_BLK_DEV_SR=y
diff --git a/arch/powerpc/configs/86xx-smp.config b/arch/powerpc/configs/86xx-smp.config
index 40ac38d3038c..e6cd06a35624 100644
--- a/arch/powerpc/configs/86xx-smp.config
+++ b/arch/powerpc/configs/86xx-smp.config
@@ -1,2 +1,3 @@ 
+# Enable SMP on 86xx
 CONFIG_NR_CPUS=2
 CONFIG_SMP=y
diff --git a/arch/powerpc/configs/altivec.config b/arch/powerpc/configs/altivec.config
index 58a697cb5a62..1c8eb9b23a7f 100644
--- a/arch/powerpc/configs/altivec.config
+++ b/arch/powerpc/configs/altivec.config
@@ -1 +1,2 @@ 
+# Enable Altivec support
 CONFIG_ALTIVEC=y
diff --git a/arch/powerpc/configs/be.config b/arch/powerpc/configs/be.config
index c5cdc99a6530..568bba8ea109 100644
--- a/arch/powerpc/configs/be.config
+++ b/arch/powerpc/configs/be.config
@@ -1 +1,2 @@ 
+# Enable Big Endian mode
 CONFIG_CPU_BIG_ENDIAN=y
diff --git a/arch/powerpc/configs/book3s_32.config b/arch/powerpc/configs/book3s_32.config
index 8721eb7b1294..f33483f077db 100644
--- a/arch/powerpc/configs/book3s_32.config
+++ b/arch/powerpc/configs/book3s_32.config
@@ -1,2 +1,3 @@ 
+# Base support for Book3s
 CONFIG_PPC64=n
 CONFIG_PPC_BOOK3S_32=y
diff --git a/arch/powerpc/configs/corenet_base.config b/arch/powerpc/configs/corenet_base.config
index 1c40de1e764b..47bb6e25c90b 100644
--- a/arch/powerpc/configs/corenet_base.config
+++ b/arch/powerpc/configs/corenet_base.config
@@ -1,2 +1,3 @@ 
+# Base support for corenet
 CONFIG_CORENET_GENERIC=y
 CONFIG_PPC_QEMU_E500=y
diff --git a/arch/powerpc/configs/debug.config b/arch/powerpc/configs/debug.config
index a14ae1f20d60..223b8a2ee8ec 100644
--- a/arch/powerpc/configs/debug.config
+++ b/arch/powerpc/configs/debug.config
@@ -1 +1,2 @@ 
+# Enable PowerPC specific debug options
 CONFIG_SCOM_DEBUGFS=y
diff --git a/arch/powerpc/configs/disable-werror.config b/arch/powerpc/configs/disable-werror.config
index 6ea12a12432c..76a7847f39ce 100644
--- a/arch/powerpc/configs/disable-werror.config
+++ b/arch/powerpc/configs/disable-werror.config
@@ -1 +1,2 @@ 
+# Disable -Werror
 CONFIG_PPC_DISABLE_WERROR=y
diff --git a/arch/powerpc/configs/dpaa.config b/arch/powerpc/configs/dpaa.config
index 4ffacafe4036..65a13ba32813 100644
--- a/arch/powerpc/configs/dpaa.config
+++ b/arch/powerpc/configs/dpaa.config
@@ -1,3 +1,4 @@ 
+# Base suppot for DPPA
 CONFIG_FSL_DPAA=y
 CONFIG_FSL_PAMU=y
 CONFIG_FSL_FMAN=y
diff --git a/arch/powerpc/configs/fsl-emb-nonhw.config b/arch/powerpc/configs/fsl-emb-nonhw.config
index 3009b0efaf34..d1249996cf45 100644
--- a/arch/powerpc/configs/fsl-emb-nonhw.config
+++ b/arch/powerpc/configs/fsl-emb-nonhw.config
@@ -1,3 +1,4 @@ 
+# Non-hardware options common to 85xx and corenet
 CONFIG_ADFS_FS=m
 CONFIG_AFFS_FS=m
 CONFIG_AUDIT=y
diff --git a/arch/powerpc/configs/guest.config b/arch/powerpc/configs/guest.config
index fece83487215..f04ababbb35a 100644
--- a/arch/powerpc/configs/guest.config
+++ b/arch/powerpc/configs/guest.config
@@ -1,3 +1,4 @@ 
+# PowerPC specific virtualization guest options
 CONFIG_VIRTIO_BLK=y
 CONFIG_SCSI_VIRTIO=y
 CONFIG_VIRTIO_NET=y
diff --git a/arch/powerpc/configs/le.config b/arch/powerpc/configs/le.config
index ee43fdb3b8f4..bcf657e1d21f 100644
--- a/arch/powerpc/configs/le.config
+++ b/arch/powerpc/configs/le.config
@@ -1 +1,2 @@ 
+# Enable Little Endian mode
 CONFIG_CPU_LITTLE_ENDIAN=y
diff --git a/arch/powerpc/configs/mpc85xx_base.config b/arch/powerpc/configs/mpc85xx_base.config
index a1e4d72ed39d..20ecf6575c5c 100644
--- a/arch/powerpc/configs/mpc85xx_base.config
+++ b/arch/powerpc/configs/mpc85xx_base.config
@@ -1,3 +1,4 @@ 
+# Base mpc85xxx support
 CONFIG_MATH_EMULATION=y
 CONFIG_MPC8536_DS=y
 CONFIG_MPC85xx_DS=y
diff --git a/arch/powerpc/configs/mpc86xx_base.config b/arch/powerpc/configs/mpc86xx_base.config
index 632c014b122d..8239d1e7785d 100644
--- a/arch/powerpc/configs/mpc86xx_base.config
+++ b/arch/powerpc/configs/mpc86xx_base.config
@@ -1,3 +1,4 @@ 
+# Base mpc85xxx support
 CONFIG_PPC_86xx=y
 CONFIG_GEF_PPC9A=y
 CONFIG_GEF_SBC310=y
diff --git a/arch/powerpc/configs/ppc64le.config b/arch/powerpc/configs/ppc64le.config
index 14dca1062c1b..ac3614cd7926 100644
--- a/arch/powerpc/configs/ppc64le.config
+++ b/arch/powerpc/configs/ppc64le.config
@@ -1,2 +1,3 @@ 
+# Enable ppc64le mode
 CONFIG_PPC64=y
 CONFIG_CPU_LITTLE_ENDIAN=y
diff --git a/arch/powerpc/configs/security.config b/arch/powerpc/configs/security.config
index 1c91a35c6a73..f47034955d12 100644
--- a/arch/powerpc/configs/security.config
+++ b/arch/powerpc/configs/security.config
@@ -1,3 +1,5 @@ 
+# 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
\ No newline at end of file
+# CONFIG_UBSAN_MISC is not set
diff --git a/arch/riscv/configs/32-bit.config b/arch/riscv/configs/32-bit.config
index f6af0f708df4..60dfa2809b19 100644
--- a/arch/riscv/configs/32-bit.config
+++ b/arch/riscv/configs/32-bit.config
@@ -1,3 +1,4 @@ 
+# Build a 32-bit image
 CONFIG_ARCH_RV32I=y
 CONFIG_32BIT=y
 # CONFIG_PORTABLE is not set
diff --git a/arch/riscv/configs/64-bit.config b/arch/riscv/configs/64-bit.config
index 313edc554d84..31a1ad138944 100644
--- a/arch/riscv/configs/64-bit.config
+++ b/arch/riscv/configs/64-bit.config
@@ -1,2 +1,3 @@ 
+# Build a 64-bit image
 CONFIG_ARCH_RV64I=y
 CONFIG_64BIT=y
diff --git a/arch/s390/configs/btf.config b/arch/s390/configs/btf.config
index 39227b4511af..c69b1a370990 100644
--- a/arch/s390/configs/btf.config
+++ b/arch/s390/configs/btf.config
@@ -1 +1,2 @@ 
+# Enable BTF debug info
 CONFIG_DEBUG_INFO_BTF=y
diff --git a/arch/s390/configs/kasan.config b/arch/s390/configs/kasan.config
index 700a8b25c3ff..da2e1f28c13c 100644
--- a/arch/s390/configs/kasan.config
+++ b/arch/s390/configs/kasan.config
@@ -1,3 +1,4 @@ 
+# Enable KASan for debugging
 CONFIG_KASAN=y
 CONFIG_KASAN_INLINE=y
 CONFIG_KASAN_VMALLOC=y
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index fdc2e3abd615..c4b2a8a19fc8 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -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
diff --git a/arch/x86/configs/tiny.config b/arch/x86/configs/tiny.config
index 66c9e2aab16c..4b75a11369e3 100644
--- a/arch/x86/configs/tiny.config
+++ b/arch/x86/configs/tiny.config
@@ -1,3 +1,5 @@ 
+# x86-specific options for a small kernel image
+#
 CONFIG_NOHIGHMEM=y
 # CONFIG_HIGHMEM4G is not set
 # CONFIG_HIGHMEM64G is not set
diff --git a/arch/x86/configs/xen.config b/arch/x86/configs/xen.config
index 581296255b39..46653ec602e0 100644
--- a/arch/x86/configs/xen.config
+++ b/arch/x86/configs/xen.config
@@ -1,3 +1,5 @@ 
+# x86-specific options for a Xen virtualization guest
+#
 # global x86 required specific stuff
 # On 32-bit HIGHMEM4G is not allowed
 CONFIG_HIGHMEM64G=y
diff --git a/kernel/configs/debug.config b/kernel/configs/debug.config
index e8db8d938661..874afe2cd7c0 100644
--- a/kernel/configs/debug.config
+++ b/kernel/configs/debug.config
@@ -1,3 +1,5 @@ 
+# 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,
diff --git a/kernel/configs/kvm_guest.config b/kernel/configs/kvm_guest.config
index 208481d91090..3cc2810147da 100644
--- a/kernel/configs/kvm_guest.config
+++ b/kernel/configs/kvm_guest.config
@@ -1,3 +1,4 @@ 
+# Bootable as a KVM guest
 CONFIG_NET=y
 CONFIG_NET_CORE=y
 CONFIG_NETDEVICES=y
diff --git a/kernel/configs/nopm.config b/kernel/configs/nopm.config
index 81ff07863576..a377c5914218 100644
--- a/kernel/configs/nopm.config
+++ b/kernel/configs/nopm.config
@@ -1,3 +1,5 @@ 
+# Disable Power Management
+
 CONFIG_PM=n
 CONFIG_SUSPEND=n
 CONFIG_HIBERNATION=n
diff --git a/kernel/configs/rust.config b/kernel/configs/rust.config
index 38a7c5362c9c..941c69c161ad 100644
--- a/kernel/configs/rust.config
+++ b/kernel/configs/rust.config
@@ -1 +1,2 @@ 
+# Enable Rust
 CONFIG_RUST=y
diff --git a/kernel/configs/tiny-base.config b/kernel/configs/tiny-base.config
index 2f0e6bf6db2c..ac4d254abc3f 100644
--- a/kernel/configs/tiny-base.config
+++ b/kernel/configs/tiny-base.config
@@ -1 +1,2 @@ 
+# Minimal options for tiny systems
 CONFIG_EMBEDDED=y
diff --git a/kernel/configs/tiny.config b/kernel/configs/tiny.config
index 00009f7d0835..ea643e8f7f14 100644
--- a/kernel/configs/tiny.config
+++ b/kernel/configs/tiny.config
@@ -1,3 +1,5 @@ 
+# Smallest possible kernel image
+#
 # CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_KERNEL_GZIP is not set
diff --git a/kernel/configs/x86_debug.config b/kernel/configs/x86_debug.config
index 6fac5b405334..8a1129a1d59a 100644
--- a/kernel/configs/x86_debug.config
+++ b/kernel/configs/x86_debug.config
@@ -1,3 +1,4 @@ 
+# Debugging options for tip tree testing
 CONFIG_X86_DEBUG_FPU=y
 CONFIG_LOCK_STAT=y
 CONFIG_DEBUG_VM=y
diff --git a/kernel/configs/xen.config b/kernel/configs/xen.config
index 436f806aa1ed..d14880177fd2 100644
--- a/kernel/configs/xen.config
+++ b/kernel/configs/xen.config
@@ -1,3 +1,5 @@ 
+# 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
diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index af1c96198f49..c523f24b504a 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -93,11 +93,11 @@  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))
 
 %.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 $(call configfiles,$@),, $(error No configuration exists for this target on this architecture))
+	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(call configfiles,$@)
 	$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
 
 PHONY += tinyconfig
@@ -115,6 +115,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 +142,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 fragment targets (for enabling various Kconfig items):'
+	@$(foreach c, $(call configfiles,*.config), \
+		printf "  %-20s - %s\\n" \
+			$(shell basename $(c)) \
+			"$(subst # ,,$(shell grep -m1 '^# ' $(c)))";)
 
 # ===========================================================================
 # object files used by all kconfig flavours