Commit 91998731 authored by Masahiro Yamada's avatar Masahiro Yamada

kbuild: generate asm-generic wrappers if mandatory headers are missing

Some time ago, Sam pointed out a certain degree of overwrap between
generic-y and mandatory-y. (https://lkml.org/lkml/2017/7/10/121)

I tweaked the meaning of mandatory-y a little bit; now it defines the
minimum set of ASM headers that all architectures must have.

If arch does not have specific implementation of a mandatory header,
Kbuild will let it fallback to the asm-generic one by automatically
generating a wrapper. This will allow to drop lots of redundant
generic-y defines.

Previously, "mandatory" was used in the context of UAPI, but I guess
this can be extended to kernel space ASM headers.
Suggested-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent d4ce5458
...@@ -1296,9 +1296,12 @@ See subsequent chapter for the syntax of the Kbuild file. ...@@ -1296,9 +1296,12 @@ See subsequent chapter for the syntax of the Kbuild file.
--- 7.4 mandatory-y --- 7.4 mandatory-y
mandatory-y is essentially used by include/uapi/asm-generic/Kbuild.asm mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild.asm
to define the minimum set of headers that must be exported in to define the minimum set of ASM headers that all architectures must have.
include/asm.
This works like optional generic-y. If a mandatory header is missing
in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate
a wrapper of the asm-generic one.
The convention is to list one subdir per line and The convention is to list one subdir per line and
preferably in alphabetic order. preferably in alphabetic order.
......
...@@ -14,6 +14,10 @@ src := $(subst /generated,,$(obj)) ...@@ -14,6 +14,10 @@ src := $(subst /generated,,$(obj))
include scripts/Kbuild.include include scripts/Kbuild.include
# If arch does not implement mandatory headers, fallback to asm-generic ones.
mandatory-y := $(filter-out $(generated-y), $(mandatory-y))
generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(srctree)/$(src)/$(f)),,$(f)))
generic-y := $(addprefix $(obj)/, $(generic-y)) generic-y := $(addprefix $(obj)/, $(generic-y))
generated-y := $(addprefix $(obj)/, $(generated-y)) generated-y := $(addprefix $(obj)/, $(generated-y))
......
...@@ -56,13 +56,6 @@ check-file := $(installdir)/.check ...@@ -56,13 +56,6 @@ check-file := $(installdir)/.check
all-files := $(header-files) $(genhdr-files) all-files := $(header-files) $(genhdr-files)
output-files := $(addprefix $(installdir)/, $(all-files)) output-files := $(addprefix $(installdir)/, $(all-files))
ifneq ($(mandatory-y),)
missing := $(filter-out $(all-files),$(mandatory-y))
ifneq ($(missing),)
$(error Some mandatory headers ($(missing)) are missing in $(obj))
endif
endif
# Work out what needs to be removed # Work out what needs to be removed
oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h))
unwanted := $(filter-out $(all-files),$(oldheaders)) unwanted := $(filter-out $(all-files),$(oldheaders))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment