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: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Acked-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
parent
d4ce5458ea
commit
919987318a
|
@ -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))
|
||||||
|
|
||||||
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
|
||||||
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))
|
||||||
|
|
Loading…
Reference in a new issue