Re: [PATCH 7/7] kbuild: doc: document subdir-y syntax

Masahiro Yamada
2020-11-28T18:01:57Z

On Tue, Nov 24, 2020 at 3:03 AM Randy Dunlap <rdunlap@infradead.org> wrote:
>
> On 11/22/20 8:54 PM, Masahiro Yamada wrote:
> > There is no explanation about subdir-y.
> >
> > Let's document it.
> >
> > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> > ---
> >
> > Documentation/kbuild/makefiles.rst | 14 ++++++++++++++
> > 1 file changed, 14 insertions(+)
> >
> > diff --git a/Documentation/kbuild/makefiles.rst b/Documentation/kbuild/makefiles.rst
> > index 159e470f2616..6332b9ca7942 100644
> > --- a/Documentation/kbuild/makefiles.rst
> > +++ b/Documentation/kbuild/makefiles.rst
> > @@ -319,6 +319,20 @@ more details, with real examples.
> > that directory specifies obj-y, those objects will be left orphan.
> > It is very likely a bug of the Makefile or of dependencies in Kconfig.
> >
> > + Kbuild also supports dedicated syntax, subdir-y and subdir-m, for
> > + descending into subdirectories. It is a good fit when you know they
> > + do not contain kernel-space objects at all. A typical usage is to let
> > + Kbuild descend into subdirectories to build tools.
> > +
> > + Examples::
> > +
> > + subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
> > + subdir-$(CONFIG_MODVERSIONS) += genksyms
> > + subdir-$(CONFIG_SECURITY_SELINUX) += selinux
> > +
> > + Unlike obj-y/m, subdir-y/m does not need the trailing slash since this
> > + syntax is always used for directories.
> > +
>
> Just curious: Is a trailing slash allowed here? say for consistency?

If you use a trailing slash for the subdir-y syntax,
it will still work.

Only the problem I see is that the build log will look clumsy
due to the double slashes "//".

For example, if you change scripts/Makefile as follows:

diff --git a/scripts/Makefile b/scripts/Makefile
index b5418ec587fb..554534449877 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -32,9 +32,9 @@ hostprogs += unifdef
# The module linker script is preprocessed on demand
targets += module.lds

-subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
-subdir-$(CONFIG_MODVERSIONS) += genksyms
-subdir-$(CONFIG_SECURITY_SELINUX) += selinux
+subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins/
+subdir-$(CONFIG_MODVERSIONS) += genksyms/
+subdir-$(CONFIG_SECURITY_SELINUX) += selinux/

# Let clean descend into subdirs
subdir- += basic dtc gdb kconfig mod

The build log will look like follows:

masahiro@grover:~/workspace/linux$ make allmodconfig; make scripts
#
# configuration written to .config
#
SYNC include/config/auto.conf
HOSTCC scripts/dtc/dtc.o
HOSTCC scripts/dtc/flattree.o
HOSTCC scripts/dtc/fstree.o
HOSTCC scripts/dtc/data.o
HOSTCC scripts/dtc/livetree.o
HOSTCC scripts/dtc/treesource.o
HOSTCC scripts/dtc/srcpos.o
HOSTCC scripts/dtc/checks.o
HOSTCC scripts/dtc/util.o
LEX scripts/dtc/dtc-lexer.lex.c
YACC scripts/dtc/dtc-parser.tab.[ch]
HOSTCC scripts/dtc/dtc-lexer.lex.o
HOSTCC scripts/dtc/dtc-parser.tab.o
HOSTLD scripts/dtc/dtc
HOSTCXX scripts/gcc-plugins//latent_entropy_plugin.so
GENSEED scripts/gcc-plugins//randomize_layout_seed.h
HOSTCXX scripts/gcc-plugins//randomize_layout_plugin.so
HOSTCXX scripts/gcc-plugins//stackleak_plugin.so
HOSTCC scripts/genksyms//genksyms.o
YACC scripts/genksyms//parse.tab.[ch]
HOSTCC scripts/genksyms//parse.tab.o
LEX scripts/genksyms//lex.lex.c
HOSTCC scripts/genksyms//lex.lex.o
HOSTLD scripts/genksyms//genksyms
HOSTCC scripts/selinux//genheaders/genheaders
HOSTCC scripts/selinux//mdp/mdp
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/extract-cert
HOSTCC scripts/bin2c
HOSTCC scripts/recordmcount
HOSTCC scripts/sign-file
HOSTCC scripts/insert-sys-cert

I can fix Kbuild to avoid "//", but I do not want to support two ways.

So, I'd recommend not to add the trailing slash to subdir-y.

For the others, thank you for pointing out my typos.

>
> > It is good practice to use a `CONFIG_` variable when assigning directory
> > names. This allows kbuild to totally skip the directory if the
> > corresponding `CONFIG_` option is neither 'y' nor 'm'.
> >
>
> Reviewed-by: Randy Dunlap <rdunlap@infradead.org>
>
> thanks.
>
> --
> ~Randy

--
Best Regards
Masahiro Yamada