On Sat, Apr 20, 2024 at 12:09 AM Nicolas Schier <nicolas@xxxxxxxxx> wrote: > > On Tue 16 Apr 2024 21:18:38 GMT, Masahiro Yamada wrote: > > Kbuild conventionally uses $(obj)/ for generated files, and $(src)/ for > > checked-in source files. It is merely a convention without any functional > > difference. In fact, $(obj) and $(src) are exactly the same, as defined > > in scripts/Makefile.build: > > > > src := $(obj) > > > > When the kernel is built in a separate output directory, $(src) does > > not match the directory in the source tree. It still works because the > > top Makefile sets VPATH to $(srctree). However, VPATH does not cover > > all cases. There are many places where the exact path to the source > > directory is needed. For example, when adding a header search path for > > local headers, it is typical to pass -I$(srctree)/$(src) to the compiler. > > > > However, it introduces inconsistency between upstream Makefiles and > > downstream Makefiles; when the source directory path is needed, > > $(srctree)/$(src) is used in the upstream kernel, while $(src) is used > > in external modules. > > > > To resolve the distortion, this commit changes the semantics of $(src) > > so that it always points to the directory in the source tree. > > > > Going forward, the variables used in Makefiles will work as follows: > > > > $(obj) - directory in the object tree > > $(src) - directory in the source tree (changed by this commit!) > > $(objtree) - the top of the kernel object tree > > $(srctree) - the top of the kernel source tree > > > > This is a tweewide Makefile conversion for replacing $(srctree)/$(src) > > with $(src). > > tweewide -> treewide > > [...] > > diff --git a/drivers/Makefile b/drivers/Makefile > > index 3bf5cab4b451..fe9ceb0d2288 100644 > > --- a/drivers/Makefile > > +++ b/drivers/Makefile > > @@ -6,11 +6,6 @@ > > # Rewritten to use lists instead of if-statements. > > # > > > > -# Some driver Makefiles miss $(srctree)/ for include directive. > > -ifdef building_out_of_srctree > > -MAKEFLAGS += --include-dir=$(srctree) > > -endif > > - > > Ah, it's nice to get rid of this. > > > obj-y += cache/ > > obj-y += irqchip/ > > obj-y += bus/ > [...] > > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > > index 3179747cbd2c..c53d2f168801 100644 > > --- a/scripts/Makefile.lib > > +++ b/scripts/Makefile.lib > > @@ -209,13 +209,13 @@ _c_flags += $(if $(patsubst n%,, \ > > -D__KCSAN_INSTRUMENT_BARRIERS__) > > endif > > > > -# $(srctree)/$(src) for including checkin headers from generated source files > > -# $(objtree)/$(obj) for including generated headers from checkin source files > > +# $(src) for including checkin headers from generated source files > > +# $(obj) for including generated headers from checkin source files > > this is a funny criss-cross of words; but might the following be more > accurate? > > # $(src) for including headers from checked-in source files > # $(obj) for including generated headers These are added only when building_out_of_srctree is defined. When the kernel is built in-tree, the include directive with the double-quote form should work without the header inclusion path. Anyway, this does not seem to be a good idea. I want to get rid of these entirely. > > > > Anyway, thanks for the patch. I think it is quite a good way forward! > > Reviewed-by: Nicolas Schier <nicolas@xxxxxxxxx> -- Best Regards Masahiro Yamada