Subject: Re: [RFC, 1/2] scripts/kconfig/Makefile: Allow KBUILD_DEFCONFIG to be a target

From: Michael Ellerman <[email-masked]>
Date: Wed, 14 Oct 2015 10:43:00 +1100

On Tue, 2015-10-13 at 14:02 -0700, Olof Johansson wrote:
> On Fri, Oct 2, 2015 at 12:47 AM, Michael Ellerman <[email-masked]> wrote:
> > On Wed, 2015-23-09 at 05:40:34 UTC, Michael Ellerman wrote:
> >> Arch Makefiles can set KBUILD_DEFCONFIG to tell kbuild the name of the
> >> defconfig that should be built by default.
> >>
> >> However currently there is an assumption that KBUILD_DEFCONFIG points to
> >> a file at arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG).
> >>
> >> We would like to use a target, using merge_config, as our defconfig, so
> >> adapt the logic in scripts/kconfig/Makefile to allow that.
> >>
> >> To minimise the chance of breaking anything, we first check if
> >> KBUILD_DEFCONFIG is a file, and if so we do the old logic. If it's not a
> >> file, then we call the top-level Makefile with KBUILD_DEFCONFIG as the
> >> target.
> >>
> >> Signed-off-by: Michael Ellerman <[email-masked]>
> >> Acked-by: Michal Marek <[email-masked]>
> >
> > Applied to powerpc next.
> >
> > https://git.kernel.org/powerpc/c/d2036f30cfe1daa19e63ce75
> 
> This breaks arm64 defconfig for me:
> 
> mkdir obj-tmp
> make -f Makefile O=obj-tmp ARCH=arm64 defconfig
> ... watch loop of:
> *** Default configuration is based on target 'defconfig'
>   GEN     ./Makefile

Crap, sorry. I knew I shouldn't have touched that code!

Does this fix it for you?

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index b2b9c87..3043d6b 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -96,7 +96,7 @@ savedefconfig: $(obj)/conf
 defconfig: $(obj)/conf
 ifeq ($(KBUILD_DEFCONFIG),)
        $< $(silent) --defconfig $(Kconfig)
-else ifneq ($(wildcard arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
+else ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG)),)
        @$(kecho) "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
        $(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
 else

$ make O=obj CROSS_COMPILE=/opt/cross/gcc-4.9.0-nolibc/aarch64-linux/bin/aarch64-linux- ARCH=arm64 defconfig
make[1]: Entering directory '/home/michael/kernels/linux-next/obj'
  HOSTCC  scripts/basic/fixdep
  GEN     ./Makefile
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/home/michael/kernels/linux-next/obj'
$ head obj/.config
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 4.3.0-rc5 Kernel Configuration
#
CONFIG_ARM64=y
CONFIG_64BIT=y
CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
CONFIG_MMU=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000

cheers