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