[U-Boot] [PATCH] kbuild: move ARCH, CPU, etc. to top Makefile to fix random build error

Masahiro Yamada yamada.masahiro at socionext.com
Fri Apr 3 05:54:11 CEST 2015


Hi Stephen,


Thanks for your analisys!

2015-04-02 7:33 GMT+09:00 Stephen Warren <swarren at wwwdotorg.org>:
> On 03/31/2015 06:02 AM, Masahiro Yamada wrote:
>>
>> Since the Kconfig conversion, some developers have reported that
>> Kbuild sometimes fails completely at random.  According to the error
>> reports, it seems to occur for any target board, but only on very
>> fast computers.
>>
>> The log message for the fail case is like this:
>>
>>    make[1]: *** No rule to make target `../arch//cpu/u-boot.lds',
>>    needed by `u-boot.lds'.  Stop.
>>
>> It looks like the top config.mk has not been included for *some*
>> reason, and $(ARCH) has been left blank.
>>
>> I suspect "autoconf_is_current" is not working in some situation.
>
>
> That's certainly true. The following code doesn't end up including config.mk
> in the bad case:
>
>> # We want to include arch/$(ARCH)/config.mk only when
>> include/config/auto.conf
>> # is up-to-date. When we switch to a different board configuration, old
>> CONFIG
>> # macros are still remaining in include/config/auto.conf. Without the
>> following
>> # gimmick, wrong config.mk would be included leading nasty
>> warnings/errors.
>> autoconf_is_current := $(if $(wildcard $(KCONFIG_CONFIG)),$(shell find . \
>>                 -path ./include/config/auto.conf -newer
>> $(KCONFIG_CONFIG)))
>> ifneq ($(autoconf_is_current),)
>> include $(srctree)/config.mk
>> include $(srctree)/arch/$(ARCH)/Makefile
>> endif
>
>
> That's because:
>
>> [swarren at swarren-lx1 tegra-uboot-flasher]$ ls -l --full-time
>> u-boot-*/{.config,include/config/auto.conf}|cat
>> -rw-rw-r-- 1 swarren swarren 9219 2015-04-01 15:50:08.000000000 -0600
>> u-boot-bad/.config
>> -rw-rw-r-- 1 swarren swarren  928 2015-04-01 15:50:08.000000000 -0600
>> u-boot-bad/include/config/auto.conf
>> -rw-rw-r-- 1 swarren swarren 9219 2015-04-01 15:51:25.000000000 -0600
>> u-boot-ok/.config
>> -rw-rw-r-- 1 swarren swarren  928 2015-04-01 15:51:26.000000000 -0600
>> u-boot-ok/include/config/auto.conf
>
>
> In the bad case, the timestamps are equal (and hence the -newer check
> fails), whereas in the good case they're different. Recall ext* filesystems
> have a 1s timestamp resolution.


It makes sense that this problem happens more frequently on faster computers.


> Note that this is state left over from "make xxx_defconfig"; If I just
> manually run "make all" in a tree in this state, it'll stay in this state
> forever, and vice-versa for a working tree.
>
> I expect that simulating this condition with some judicious manually
> executed touch commands would be extremely easy.
>
> Possible solutions are:
>
> Is there a -newer-or-equal that could be used in the find command rather
> than -newer?

I checked the "man find", but I could only find a -newer option,
but it works enough for our purpose.

Please check if this patch solves the problem:
http://patchwork.ozlabs.org/patch/457838/


> When running "make xxx_defconfig", can the code there compare the timestamp
> of those two files, and keep looping and touching the auto.conf file until
> the timestamps differ.
>
> Something else entirely? I couldn't see anything relating to
> autoconf_is_current in the kernel's makefiles.


Right. The kernel does not need this hack.

When we build the kernel, ARCH= is given from the command line,
i.e. the correct arch/${ARCH}/Makefile is always included.
(In other words, it is users who are responsible
for passing the correct ARCH from the command line.)

For U-boot, on the other hand, ARCH is decided by the board configuration.
(It was done by mkconfig+boards.cfg, and it is by Kconfig now.)

If we build ARM board after PowerPC board, for example,
the .config points to ARM, but include/config/auto.conf to PowerPC,
it causes a wrong  arch/${ARCH}/{config.mk,Makefile} to be included at
the first run.

I know the autoconf_is_current is an ugly hack,
but it requires more changes to the build system to rip it off.



-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list