On Thu, Apr 15, 2021 at 4:27 AM Randy Dunlap <rdunlap@xxxxxxxxxxxxx> wrote: > > Currently when using "W=1" with UML builds, there are over 700 warnings > like so: > > CC arch/um/drivers/stderr_console.o > cc1: warning: ./arch/um/include/uapi: No such file or directory [-Wmissing-include-dirs] > > but arch/um/ does not have include/uapi/ at all, so don't > include arch/um/include/uapi/ in USERINCLUDE for UML. > > Signed-off-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > Cc: Masahiro Yamada <masahiroy@xxxxxxxxxx> > Cc: Michal Marek <michal.lkml@xxxxxxxxxxx> > Cc: linux-kbuild@xxxxxxxxxxxxxxx > Cc: Jeff Dike <jdike@xxxxxxxxxxx> > Cc: Richard Weinberger <richard@xxxxxx> > Cc: Anton Ivanov <anton.ivanov@xxxxxxxxxxxxxxxxxx> > Cc: linux-um@xxxxxxxxxxxxxxxxxxx > --- > Makefile | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > Option 2: change the setting of USERINCLUDE. This could alter > (a) build times and > (b) which header files get used: if there are multiple > header files named foobar.h in the $(USERINCLUDE) > subdirectories, this Option changes the order in which > they would be found. > > - linux-next-20210413.orig/Makefile > + linux-next-20210413/Makefile > @@ -501,13 +501,16 @@ LDFLAGS_vmlinux = > > # Use USERINCLUDE when you must reference the UAPI directories only. > USERINCLUDE := \ > - -I$(srctree)/arch/$(SRCARCH)/include/uapi \ > -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \ > -I$(srctree)/include/uapi \ > -I$(objtree)/include/generated/uapi \ > -include $(srctree)/include/linux/compiler-version.h \ > -include $(srctree)/include/linux/kconfig.h > > +ifneq ($(ARCH),um) > +USERINCLUDE += -I$(srctree)/arch/$(SRCARCH)/include/uapi > +endif > + > # Use LINUXINCLUDE when you must reference the include/ directory. > # Needed to be compatible with the O= option > LINUXINCLUDE := \ > > Option 3: modify scripts/Makefile.extrawarn not to set > -Wmissing-include-dirs for arch=um. I think that this is not > a good idea: it could cause valid problem reports not to be > reported. > > Option 4: simply mkdir arch/um/include/uapi > That's what I did first, just as a test, and it works. I like Option 4. But, you cannot do "mkdir -p arch/um/include/uapi" at build-time because the build system should not touch the source tree(, which might be read-only) for O= building. How about adding arch/um/include/uapi/asm/Kbuild, which is just having a SPDX one-liner? > > --- linux-next-20210413.orig/Makefile > +++ linux-next-20210413/Makefile > @@ -500,6 +500,15 @@ AFLAGS_KERNEL = > LDFLAGS_vmlinux = > > # Use USERINCLUDE when you must reference the UAPI directories only. > +# Note: arch/um/ does not have an include/uapi/ subdir. > +ifeq ($(ARCH),um) > +USERINCLUDE := \ > + -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \ > + -I$(srctree)/include/uapi \ > + -I$(objtree)/include/generated/uapi \ > + -include $(srctree)/include/linux/compiler-version.h \ > + -include $(srctree)/include/linux/kconfig.h > +else > USERINCLUDE := \ > -I$(srctree)/arch/$(SRCARCH)/include/uapi \ > -I$(objtree)/arch/$(SRCARCH)/include/generated/uapi \ > @@ -507,6 +516,7 @@ USERINCLUDE := \ > -I$(objtree)/include/generated/uapi \ > -include $(srctree)/include/linux/compiler-version.h \ > -include $(srctree)/include/linux/kconfig.h > +endif > > # Use LINUXINCLUDE when you must reference the include/ directory. > # Needed to be compatible with the O= option -- Best Regards Masahiro Yamada