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