[PATCH v3 6/7] buildtools/chkincs: use a staging directory for headers
Bruce Richardson
bruce.richardson at intel.com
Thu Sep 25 12:22:47 CEST 2025
On Thu, Sep 25, 2025 at 12:17:27PM +0200, Morten Brørup wrote:
> > From: Bruce Richardson [mailto:bruce.richardson at intel.com]
> > Sent: Thursday, 25 September 2025 11.32
> >
> > On Thu, Sep 25, 2025 at 10:42:47AM +0200, David Marchand wrote:
> > > Hello Bruce,
> > >
> > > On Thu, 25 Sept 2025 at 10:00, Bruce Richardson
> > > <bruce.richardson at intel.com> wrote:
> > > >
> > > > On Wed, Sep 24, 2025 at 07:25:34PM +0200, David Marchand wrote:
> > > > > A problem with the current headers check is that it relies on
> > > > > meson dependencies objects that come with their
> > include_directories
> > > > > directives, and all of those point at the library / driver
> > sources.
> > > > >
> > > > > This means that we won't detect a public header including a
> > private
> > > > > (as in, not exported) header, or a driver only header.
> > > > >
> > > > > To address this issue, a staging directory is added and every
> > header
> > > > > is copied to it.
> > > > >
> > > > > Drivers and library headers are staged to two different
> > directories
> > > > > and the check is updated accordingly.
> > > > >
> > > > > Signed-off-by: David Marchand <david.marchand at redhat.com>
> > > >
> > > > In general looks ok to me.
> > > > One small comment though - can we not have "staging" as a top-level
> > > > directory, but instead hide it inside the buildtools directory, or
> > even the
> > > > chkincs directory? I dislike having too many subdirectories
> > directly off
> > > > the root of the project, especially ones purely for internal
> > tooling.
> > >
> > > Well, at first I was trying to change the whole build process iow
> > rely
> > > only on the staging directory and remove all the include_directories:
> > > directives from the declare_dependency() objects.
> > > Libraries and apps were ok, but there were a *lot* of complications
> > > with drivers (what a *huge mess*, especially for NXP drivers with
> > > "compat.h" includes, and Marvell drivers to a smaller extent).
> > > I may retry in the future with some AI tool that will brute force
> > this :-).
> > >
> > > For now, I gave up but did not reconsider the location of the staging
> > part.
> > > Moving to buildtools is indeed saner as it is only for the check now,
> > > and I can also make this staging stuff dependent on the
> > check_includes
> > > option now.
> > >
> >
> > I wonder should we just consider making chkincs an install-time job
> > rather
> > than a build-time one? We could look to build chkincs using a custom
> > install script (meson.add_install_script) after the header copies are
> > already done for us. That should cut down on the complexity within the
> > build system, but it does mean an additional install step to a
> > temporary
> > directory to get it to run. However, for use in our CI I don't see why
> > having an install step with DEST_DIR set to /tmp shouldn't be feasible.
>
> Such a temporary directory should be local to the developer's working directory.
> (The CI might have different needs; that's not what I'm commenting.)
>
> Furthermore, test building for upstreaming should remain simple. I use something like:
> meson setup -Dplatform=generic -Dcheck_includes=true build
> ninja -C build
>
Build testing for upstreaming should really be done using
test-meson-builds.sh to test a variety of scenarios and cross-compilation -
including 32-bit - if possible. That script also does a test install, so
running the check_includes from the install step would be automatically
covered there.
/Bruce
More information about the dev
mailing list