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