Re: Kbuilds and Makefiles in building the kernel

Nagy Ábrahám Zsombor <[email protected]> Fri, 28 Nov 2025 09:18:40 +0100
Newsgroups org.kernel.vger.linux-newbie
Message-ID <[email protected]>
On Fri, 2025-11-28 at 08:12 +0800, Nick Huang wrote:
> Nagy =C3=81brah=C3=A1m Zsombor <[email protected]> =E6=96=BC 2025=E5=B9=
=B411=E6=9C=8828=E6=97=A5 =E9=80=B1=E4=BA=94 =E4=B8=8A=E5=8D=881:37=E5=AF=
=AB=E9=81=93=EF=BC=9A
> >=20
> > On Thu, 2025-11-27 at 19:26 +0800, Nick Huang wrote:
> > > Abraham Zsombor Nagy <[email protected]> =E6=96=BC 2025=E5=B9=B411=
=E6=9C=8827=E6=97=A5=E9=80=B1=E5=9B=9B
> > > =E4=B8=8B=E5=8D=886:43=E5=AF=AB=E9=81=93=EF=BC=9A
> > > >=20
> > > > Hello,
> > > >=20
> > > > https://docs.kernel.org/kbuild/makefiles.html#the-kbuild-files=C2=
=A0
> > > > stat
> > > > es
> > > > that when a directory contains a Kbuild file, the Makefile is
> > > > skipped in
> > > > that directory.
> > > >=20
> > > > It feels to me that both files are in use e.g. under arch/x86/
> > > > directory.
> > > >=20
> > > > I'm trying to see what files are the core of the kernel and
> > > > what
> > > > files
> > > > can be configured for x86 by partially parsing the Makefiles
> > > > and
> > > > the
> > > > Kbuild files. Would it be sufficient to parse them as:
> > > >=20
> > > > if file =3D=3D "Makefile" or file =3D=3D "Kbuild":
> > > >=20
> > > > =C2=A0> parse(file)
> > > >=20
> > > > or it should prefer the Kbuild file when present, or it is
> > > > using
> > > > some
> > > > other logic?
> > > >=20
> > > > Sincerely,
> > > >=20
> > > > Abraham Nagy
> > > >=20
> > > >=20
> > >=20
> > > Hi=C2=A0 Abraham Zsombor Nagy
> > > What functionality are you trying to add that would require
> > > modifying
> > > the Makefile or Kbuild?
> > >=20
> > > Sincerely,
> > > Nick Huang
> >=20
> > Hi Nick,
> >=20
> > I'm not modifying the build files, only writing a script that walks
> > through the source tree and parses Makefiles and Kbuild files to
> > list
> > what source files are linked to the kernel by default and by
> > CONFIG_*
> > options. This is to see what to read through to get a basic
> > understanding of the kernel at a given config.
> >=20
> > As I understand the documentation linked above, I should skip
> > Makefiles
> > when Kbuild files are present in a directory, but Makefiles feels
> > to
> > have important lines too.
> >=20
> > The approach is something like to extract object files and
> > subdirectories from lines that start with python regex "^\S+-y" or
> > "^\S+-\$\(CONFIG.*\)".
> >=20
> > Sincerely,
> > Abraham
> >=20
> >=20
>=20
> Hi Abraham
> You can use git grep -n "CONFIG_**" to find the files you need.
>=20
> Sincerely,
> Nick

Hello Nick,

Thank you, I've just tried git grep, it seems convenient, however I
still need to further script and fine-tune the output, in which case I
think having a customizable walk algorithm is the way to start with.

find/git & grep walks through the directory tree that could include
build files and sources that are from an incompatible set of config
options. Also, there are some Makefiles that end the line with a
backslash '\' saying to process the next line too, but which won't have
regex match.

A custom algorithm can start from a Makefile (and Kbuild file?)_and
walk directories only that are visible from there. This way I can
enforce a horizon of config options that are meaningfully able to
extend the kernel. E.g. starting with minimal config, seeing the
available additional configs, then in subsequent calls adding configs
one by one until I have a whole kernel (but without extra parts).

Make menuconfig combined with git grep and a text editor could help,
but it would require more manual handling to achieve the same.

Sincerely,
Abraham