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