diff mbox

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

Message ID 1444779780.12197.3.camel@ellerman.id.au (mailing list archive)
State New, archived
Headers show

Commit Message

Michael Ellerman Oct. 13, 2015, 11:43 p.m. UTC
On Tue, 2015-10-13 at 14:02 -0700, Olof Johansson wrote:
> On Fri, Oct 2, 2015 at 12:47 AM, Michael Ellerman <mpe@ellerman.id.au> 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 <mpe@ellerman.id.au>
> >> Acked-by: Michal Marek <mmarek@suse.com>
> >
> > 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?




$ 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


--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Olof Johansson Oct. 14, 2015, 4:54 p.m. UTC | #1
On Tue, Oct 13, 2015 at 4:43 PM, Michael Ellerman <mpe@ellerman.id.au> wrote:
> On Tue, 2015-10-13 at 14:02 -0700, Olof Johansson wrote:
>> On Fri, Oct 2, 2015 at 12:47 AM, Michael Ellerman <mpe@ellerman.id.au> 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 <mpe@ellerman.id.au>
>> >> Acked-by: Michal Marek <mmarek@suse.com>
>> >
>> > 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?

Yes, it does, however:

>
> 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)

Do you need a $(srctree) prefix here too? I'm not entirely sure what I
would do to reproduce a run that goes down this path so I can't
confirm.


-Olof
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michael Ellerman Oct. 15, 2015, 3:27 a.m. UTC | #2
On Wed, 2015-10-14 at 09:54 -0700, Olof Johansson wrote:
> On Tue, Oct 13, 2015 at 4:43 PM, Michael Ellerman <mpe@ellerman.id.au> wrote:
> > On Tue, 2015-10-13 at 14:02 -0700, Olof Johansson wrote:
> >> On Fri, Oct 2, 2015 at 12:47 AM, Michael Ellerman <mpe@ellerman.id.au> 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 <mpe@ellerman.id.au>
> >> >> Acked-by: Michal Marek <mmarek@suse.com>
> >> >
> >> > 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?
> 
> Yes, it does, however:
> 
> > 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)
> 
> Do you need a $(srctree) prefix here too? I'm not entirely sure what I
> would do to reproduce a run that goes down this path so I can't
> confirm.

That is the path you're going down, now that it's fixed. That's the path where
KBUILD_DEFCONFIG is a real file, ie. the old behaviour.

I'm not sure why it doesn't have a $(srctree) there, but it's never had one.

It looks like it eventually boils down to zconf_fopen() which looks for the
file in both .  and $(srctree).

So I think we could add a $(srctree) there, it would be more obvious and not
rely on the zconf_fopen() behaviour, but I'd rather leave it as is and let
Michal do that as a cleanup later.

cheers


--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michal Marek Oct. 15, 2015, 7:34 a.m. UTC | #3
Dne 15.10.2015 v 05:27 Michael Ellerman napsal(a):
> On Wed, 2015-10-14 at 09:54 -0700, Olof Johansson wrote:
>> On Tue, Oct 13, 2015 at 4:43 PM, Michael Ellerman <mpe@ellerman.id.au> wrote:
>>> On Tue, 2015-10-13 at 14:02 -0700, Olof Johansson wrote:
>>>> On Fri, Oct 2, 2015 at 12:47 AM, Michael Ellerman <mpe@ellerman.id.au> 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 <mpe@ellerman.id.au>
>>>>>> Acked-by: Michal Marek <mmarek@suse.com>
>>>>>
>>>>> 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?
>>
>> Yes, it does, however:
>>
>>> 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)
>>
>> Do you need a $(srctree) prefix here too? I'm not entirely sure what I
>> would do to reproduce a run that goes down this path so I can't
>> confirm.
> 
> That is the path you're going down, now that it's fixed. That's the path where
> KBUILD_DEFCONFIG is a real file, ie. the old behaviour.
> 
> I'm not sure why it doesn't have a $(srctree) there, but it's never had one.
> 
> It looks like it eventually boils down to zconf_fopen() which looks for the
> file in both .  and $(srctree).

Yes, the kconfig frontends do part of what would ideally be the job of
make or the Makefile.

Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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