[Top][All Lists]

[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


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.

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

[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

[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]