[Buildroot] [PATCH] package/uclibc: use HOSTCC_NOCCACHE as kconfig HOSTCC

Peter Korsgaard peter at korsgaard.com
Tue Sep 1 18:39:47 UTC 2020


>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:

 > uclibc is part of the toolchain, and as such does not have a dependency
 > on it. As a consequence, it does not have a dependency on host-ccache,
 > when this is needed.

 > Usually, host-ccache is built before uclibc, as part of the dependency
 > of gcc-initial, hiot-binutils, and a few other host packages that are
 > built before uclibc.

 > However, during top-level parallel builds, this ordering is only ever
 > guaranteed at the beginning of the configure step, and not before.

 > But for kconfig-packages, the moment we apply the configuration to
 > prepare the .config file is a pseudo step that happens somewhere in
 > limbo between the patch step and the configure step. As such, the
 > build ordering that is otherwise guaranteed by the _DEPENDENCIES is not
 > applicable yet.

 > And so, with top-level parallel builds with ccache enabled, there is
 > nothing that guarantees host-ccache to be built and installed by the
 > time we are trying to generate uclibc's .config file, which can be quite
 > early in the build process, and thus the build fails:

 >     /home/raphael/github/ftcommunity-TXT/buildroot-rootfs/output/per-package/uclibc/host/bin/ccache /usr/bin/gcc /home/raphael/github/ftcommunity-TXT/buildroot-rootfs/output/build/uclibc-1.0.34/extra/config/conf.c  -c -o ../../extra/config/conf.o -Os -I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"  -DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -DCONFIG_='""'   -I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"  -DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -DCONFIG_='""'
 >     /bin/sh: 1: /home/raphael/github/ftcommunity-TXT/buildroot-rootfs/output/per-package/uclibc/host/bin/ccache: not found
 >     make[2]: *** [Makefile:64: ../../extra/config/conf.o] Error 127
 >     make[1]: *** [Makefile.in:475: extra/config/conf] Error 2
 >     make[1]: Leaving directory '/home/raphael/github/ftcommunity-TXT/buildroot-rootfs/output/build/uclibc-1.0.34'
 >     make: *** [package/uclibc/uclibc.mk:458: /home/raphael/github/ftcommunity-TXT/buildroot-rootfs/output/build/uclibc-1.0.34/.stamp_dotconfig] Error 2
 >     make: *** Waiting for unfinished jobs....

 > The root cause is that uclibc sets;

 >     UCLIBC_KCONFIG_OPTS = $(UCLIBC_MAKE_FLAGS) [...]

 > with:

 >     UCLIBC_MAKE_FLAGS = [...] HOSTCC="$(HOSTCC)"

 > And then the kconfig-package infra calls to the configurators,
 > menuconfig, xconfig et al, but also olddefconfig et al.. with:

 >     [...] $($(1)_MAKE) [...] $(PKG_KCONFIG_COMMON_OPTS) $($(1)_KCONFIG_OPTS) [...]

 > with (note a latent bug in there, will be fixed in another patch):

 >     PKG_KCONFIG_COMMON_OPTS = HOSTCC=$(HOSTCC_NOCCACHE)

 > So, a HOSTCC as set by a package will always win onver the one set by
 > the infra, which is exactly what we want.

 > But in this case, uclibc sets HOSTCC so that it can build its host tools
 > needed during the build, and in doing so uses the ccache-enabled host c
 > compiler. Which might not yet be available for the kconfig-package infra
 > to generate the .config file.

 > We had a similar (non-)issue for the linux package, which was fixed in
 > commit 71a31b2357 (linux: use HOSTCC_NOCCACHE as kconfig HOSTCC).

 > But here, uclibc does not have the toolchain in its dependencies (as said
 > earlier, uclibc *is* part of the toolchain).

 > Since the host compiler is only used to build very few files to generate
 > the simple executable needed to generate the .config file, doing without
 > the ccache-enabled host compiler will be amply enough.

 > So, we override HOSTCC in UCLIBC_KCONFIG_OPTS, to use the non-cached
 > host compiler.

 > Note that, in a first approximation, one would be tempted to change the
 > ordering in the kconfig-package infra:

 >         $($(1)_KCONFIG_OPTS) $(PKG_KCONFIG_COMMON_OPTS)

 > so that the non-cached HOSTCC always wins over the cached one. But this
 > would be incorrect, in cases where the package really needs to override
 > HOSTCC; indeed we want the package-provided values to always win over
 > the default ones providing by the infra.

 > Reported-by: Raphael Jacob <r.jacob2002 at gmail.com>
 > Signed-off-by: Yann E. MORIN <yann.morin.1998 at free.fr>

Committed to 2020.02.x and 2020.05.x, thanks.

-- 
Bye, Peter Korsgaard


More information about the buildroot mailing list