On Tue, Nov 24, 2020 at 3:03 AM Randy Dunlap <rdunlap@xxxxxxxxxxxxx> 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@xxxxxxxxxx> > > --- > > > > 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@xxxxxxxxxxxxx> > > thanks. > > -- > ~Randy -- Best Regards Masahiro Yamada