Message ID | 20201123045403.63402-7-masahiroy@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/7] kbuild: doc: update the description about kbuild Makefiles | expand |
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? > 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.
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
On 11/28/20 12:58 AM, Masahiro Yamada wrote: > 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(+) >>> >>> + >>> + 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 "//". > Yes, that does look odd. > For example, if you change scripts/Makefile as follows: > ... > 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. OK, I agree. Thanks.
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. + 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'.
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(+)