Re: [PATCH] kbuild: let the environment set HOSTPKG_CONFIG

Nathan Chancellor <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.kbuild.devel
Message-ID <178614091702.32781.13796520858880316981.b4-review@b4>
> HOSTPKG_CONFIG was added so that "tooling that builds the kernel" could
> choose which pkg-config the host tools ask about their dependencies, but
> it is assigned with '=', so only a make command line assignment takes
> effect. Exporting it does nothing, silently.

I found this paragraph a little hard to read and parse. I might write it
like:

  HOSTPKG_CONFIG was added so that builders could choose which
  pkg-config is used to query host dependencies. However, it does not
  respect values exported from the builder's environment because its
  assigment uses '=', requiring a make command line variable to override
  it.

> That is surprising, because the other inputs to host program builds do
> honour the environment: HOSTCFLAGS, HOSTCXXFLAGS, HOSTLDFLAGS and
> HOSTLDLIBS are all read from it and documented in kbuild.rst as such.

I am not sure HOSTPKG_CONFIG is entirely comparable to these variables,
which are purely for compiler flags. I would compare it more to HOSTCC,
HOSTCXX, and HOSTRUSTC, which all use '=' and do not honor an
environment value. I am not sure we want to deviate from that here but I
am open to opinions from the other Kbuild folks.

> It also matters. A cross development environment sets
> PKG_CONFIG_SYSROOT_DIR and PKG_CONFIG_PATH so that pkg-config answers
> for the target rather than the build machine. Those settings are correct
> for everything that will run on the target and wrong for a program that
> has to run on the build machine. objtool asks pkg-config where libelf is,
> gets the target's include directory, and compiles a host tool against
> the target's C library headers. Because the directory arrives as -I it
> is not treated as a system header directory, -Wno-system-headers no
> longer covers it, and the build stops on warnings that would otherwise
> be suppressed:
> 
>   usr/include/sys/cdefs.h:486: error: "__attribute_const__" redefined [-Werror]
>   tools/include/linux/compiler.h:123: note: previous definition
>   usr/include/stdio.h:449: error: redundant redeclaration of 'fscanf'
> 
> An environment that knows it is cross building can then say
> 
>   export HOSTPKG_CONFIG="env -u PKG_CONFIG_SYSROOT_DIR \
>                              -u PKG_CONFIG_PATH pkg-config"
> 
> once, in the shell it hands to the user, instead of every make command
> line growing an override. Build systems that already pass it on the
> command line are unaffected.

It would be nice if we could try and handle this situation directly
inside Kbuild somehow (like just unsetting these PKG_CONFIG variables)
but I guess that could mess with cross building tools/perf via the
tools/% Kbuild target... maybe that doesn't matter though. I am not sure
I find the argument of avoiding make command overrides convincing, as I
would expect a build wrapper to already need to support a unified set of
variables but maybe I am just naive. Another option would be passing
this value via MAKEFLAGS.

-- 
Cheers,
Nathan
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.