diff options
author | Masahiro Yamada <yamada.masahiro@socionext.com> | 2019-01-02 20:10:38 -0500 |
---|---|---|
committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2019-01-05 19:46:51 -0500 |
commit | 919987318a129b4d0c2203a3c6fd2d804be77100 (patch) | |
tree | e072c3709d30b9383ada73673ef9ee4dcc79e9c1 | |
parent | d4ce5458ea1b7d8ca49c436d602095c4912777d3 (diff) |
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>
-rw-r--r-- | Documentation/kbuild/makefiles.txt | 9 | ||||
-rw-r--r-- | scripts/Makefile.asm-generic | 4 | ||||
-rw-r--r-- | scripts/Makefile.headersinst | 7 |
3 files changed, 10 insertions, 10 deletions
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 8da26c6dd886..bf28c47bfd72 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt | |||
@@ -1296,9 +1296,12 @@ See subsequent chapter for the syntax of the Kbuild file. | |||
1296 | 1296 | ||
1297 | --- 7.4 mandatory-y | 1297 | --- 7.4 mandatory-y |
1298 | 1298 | ||
1299 | mandatory-y is essentially used by include/uapi/asm-generic/Kbuild.asm | 1299 | mandatory-y is essentially used by include/(uapi/)asm-generic/Kbuild.asm |
1300 | to define the minimum set of headers that must be exported in | 1300 | to define the minimum set of ASM headers that all architectures must have. |
1301 | include/asm. | 1301 | |
1302 | This works like optional generic-y. If a mandatory header is missing | ||
1303 | in arch/$(ARCH)/include/(uapi/)/asm, Kbuild will automatically generate | ||
1304 | a wrapper of the asm-generic one. | ||
1302 | 1305 | ||
1303 | The convention is to list one subdir per line and | 1306 | The convention is to list one subdir per line and |
1304 | preferably in alphabetic order. | 1307 | preferably in alphabetic order. |
diff --git a/scripts/Makefile.asm-generic b/scripts/Makefile.asm-generic index 760323e70ebc..a62d2823f6cf 100644 --- a/scripts/Makefile.asm-generic +++ b/scripts/Makefile.asm-generic | |||
@@ -14,6 +14,10 @@ src := $(subst /generated,,$(obj)) | |||
14 | 14 | ||
15 | include scripts/Kbuild.include | 15 | include scripts/Kbuild.include |
16 | 16 | ||
17 | # If arch does not implement mandatory headers, fallback to asm-generic ones. | ||
18 | mandatory-y := $(filter-out $(generated-y), $(mandatory-y)) | ||
19 | generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(srctree)/$(src)/$(f)),,$(f))) | ||
20 | |||
17 | generic-y := $(addprefix $(obj)/, $(generic-y)) | 21 | generic-y := $(addprefix $(obj)/, $(generic-y)) |
18 | generated-y := $(addprefix $(obj)/, $(generated-y)) | 22 | generated-y := $(addprefix $(obj)/, $(generated-y)) |
19 | 23 | ||
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index 45927fcddbc0..3d1ebaabd1b6 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst | |||
@@ -56,13 +56,6 @@ check-file := $(installdir)/.check | |||
56 | all-files := $(header-files) $(genhdr-files) | 56 | all-files := $(header-files) $(genhdr-files) |
57 | output-files := $(addprefix $(installdir)/, $(all-files)) | 57 | output-files := $(addprefix $(installdir)/, $(all-files)) |
58 | 58 | ||
59 | ifneq ($(mandatory-y),) | ||
60 | missing := $(filter-out $(all-files),$(mandatory-y)) | ||
61 | ifneq ($(missing),) | ||
62 | $(error Some mandatory headers ($(missing)) are missing in $(obj)) | ||
63 | endif | ||
64 | endif | ||
65 | |||
66 | # Work out what needs to be removed | 59 | # Work out what needs to be removed |
67 | oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) | 60 | oldheaders := $(patsubst $(installdir)/%,%,$(wildcard $(installdir)/*.h)) |
68 | unwanted := $(filter-out $(all-files),$(oldheaders)) | 61 | unwanted := $(filter-out $(all-files),$(oldheaders)) |