1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun# include/asm-generic contains a lot of files that are used
3*4882a593Smuzhiyun# verbatim by several architectures.
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# This Makefile reads the file arch/$(SRCARCH)/include/(uapi/)/asm/Kbuild
6*4882a593Smuzhiyun# and for each file listed in this file with generic-y creates
7*4882a593Smuzhiyun# a small wrapper file in arch/$(SRCARCH)/include/generated/(uapi/)/asm.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunPHONY := all
10*4882a593Smuzhiyunall:
11*4882a593Smuzhiyun
12*4882a593Smuzhiyunsrc := $(subst /generated,,$(obj))
13*4882a593Smuzhiyun-include $(src)/Kbuild
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun# $(generic)/Kbuild lists mandatory-y. Exclude um since it is a special case.
16*4882a593Smuzhiyunifneq ($(SRCARCH),um)
17*4882a593Smuzhiyuninclude $(generic)/Kbuild
18*4882a593Smuzhiyunendif
19*4882a593Smuzhiyun
20*4882a593Smuzhiyuninclude scripts/Kbuild.include
21*4882a593Smuzhiyun
22*4882a593Smuzhiyunredundant := $(filter $(mandatory-y) $(generated-y), $(generic-y))
23*4882a593Smuzhiyunredundant += $(foreach f, $(generic-y), $(if $(wildcard $(srctree)/$(src)/$(f)),$(f)))
24*4882a593Smuzhiyunredundant := $(sort $(redundant))
25*4882a593Smuzhiyun$(if $(redundant),\
26*4882a593Smuzhiyun	$(warning redundant generic-y found in $(src)/Kbuild: $(redundant)))
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun# If arch does not implement mandatory headers, fallback to asm-generic ones.
29*4882a593Smuzhiyunmandatory-y := $(filter-out $(generated-y), $(mandatory-y))
30*4882a593Smuzhiyungeneric-y   += $(foreach f, $(mandatory-y), $(if $(wildcard $(srctree)/$(src)/$(f)),,$(f)))
31*4882a593Smuzhiyun
32*4882a593Smuzhiyungeneric-y   := $(addprefix $(obj)/, $(generic-y))
33*4882a593Smuzhiyungenerated-y := $(addprefix $(obj)/, $(generated-y))
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun# Remove stale wrappers when the corresponding files are removed from generic-y
36*4882a593Smuzhiyunold-headers := $(wildcard $(obj)/*.h)
37*4882a593Smuzhiyununwanted    := $(filter-out $(generic-y) $(generated-y),$(old-headers))
38*4882a593Smuzhiyun
39*4882a593Smuzhiyunquiet_cmd_wrap = WRAP    $@
40*4882a593Smuzhiyun      cmd_wrap = echo "\#include <asm-generic/$*.h>" > $@
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunquiet_cmd_remove = REMOVE  $(unwanted)
43*4882a593Smuzhiyun      cmd_remove = rm -f $(unwanted)
44*4882a593Smuzhiyun
45*4882a593Smuzhiyunall: $(generic-y)
46*4882a593Smuzhiyun	$(if $(unwanted),$(call cmd,remove))
47*4882a593Smuzhiyun	@:
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun$(obj)/%.h:
50*4882a593Smuzhiyun	$(call cmd,wrap)
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun# Create output directory. Skip it if at least one old header exists
53*4882a593Smuzhiyun# since we know the output directory already exists.
54*4882a593Smuzhiyunifeq ($(old-headers),)
55*4882a593Smuzhiyun$(shell mkdir -p $(obj))
56*4882a593Smuzhiyunendif
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun.PHONY: $(PHONY)
59