bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Parallel building of Linux Kernel is broken


From: Masahiro Yamada
Subject: Re: Parallel building of Linux Kernel is broken
Date: Thu, 12 Jul 2018 14:51:02 +0900

Hi.


2018-07-12 14:13 GMT+09:00 Paul Smith <address@hidden>:
> On Thu, 2018-07-12 at 13:55 +0900, Masahiro Yamada wrote:
>> Please add V=1 to the build command, like this:
>>
>> $ make -j8 V=1 defconfig all
>>
>> It will emit _almost_ raw log.
>
> At this time I don't have the resources to do this.  It will take me
> some time if you're going to wait for me.

No problem.   No rush here.

The Linux build system is pretty complex.


I attached information that might be helpful.
Please take it FWIW.


>> >   That's what we need to see; the actual command that
>> > was used to recursively invoke make.
>>
>> Linux Makefile hides "Entering directory ..." messages.
>>
>> If you want to see them,
>> please comment out the following line of the top Makefile.
>>
>> MAKEFLAGS += --no-print-directory
>
> I'm not that interested in seeing these but it wouldn't hurt.  Mainly I
> need to see the manner in which the recursive make is invoked and the
> recipes used to do so.


OK, then V=1 is good enough
to show what you want.






How Linux Makefile works?
--------------------------


Linux needs the configuration before building any objects.


"make defconfig" configures the build setting
suitable for general usage.

"make all" actually builds the kernel.



"make defconfig all" is a useful shorthand
to do the two in a row.


[1] User run "make -j8 defconfig all"

[2] The configuration must finish before the Makefile
    starts building any objects.

    The following code divide "make defconfig all"
    into two sub-makes  "make defconfig" and "make all"
    These two are run one by one.

__build_one_by_one:
        $(Q)set -e; \
        for i in $(MAKECMDGOALS); do \
                $(MAKE) -f $(srctree)/Makefile $$i; \
        done



[3] Sub-make "make defconfig" will find a recipe here

%config: scripts_basic outputmakefile FORCE
        $(Q)$(MAKE) $(build)=scripts/kconfig $@


[4] Sub-make "make all" starts, but top Makefile
    needs to load include/config/auto.conf.

ifeq ($(dot-config),1)
-include include/config/auto.conf
endif


[5] A recipe to generate include/config/auto.conf
    is found here.

include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
        $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig


[6] include/config/auto.conf has been generated,
    so "make all" restarts.


I think the latest GNU Make emits
'jobserver unavailable: using -j1.  Add '+' to parent make rule'
just before "make all" restarts.



[7] '-j8 --jobserver-auth' disappears from MAKEFLAGS,
    then rest of the build process is serialized.





-- 
Best Regards
Masahiro Yamada



reply via email to

[Prev in Thread] Current Thread [Next in Thread]