diff mbox series

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

Message ID 20201123045403.63402-7-masahiroy@kernel.org (mailing list archive)
State New
Headers show
Series [1/7] kbuild: doc: update the description about kbuild Makefiles | expand

Commit Message

Masahiro Yamada Nov. 23, 2020, 4:54 a.m. UTC
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(+)

Comments

Randy Dunlap Nov. 23, 2020, 6:03 p.m. UTC | #1
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.
Masahiro Yamada Nov. 28, 2020, 8:58 a.m. UTC | #2
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
Randy Dunlap Nov. 28, 2020, 4:56 p.m. UTC | #3
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 mbox series

Patch

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'.