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 = \ 36 arch=$$(echo $@ | sed -n 's:.*arch/\([^/]*\)/.*:\1:p' | tr a-z A-Z); \ 37 upper=$$(echo $*.h | tr a-z A-Z | tr '/.-' '___'); \ 38 echo "\#ifndef $${arch}_GENERIC_$${upper}" > $@.new; \ 39 echo "\#define $${arch}_GENERIC_$${upper}" >> $@.new; \ 40 echo "\#include <asm-generic/$*.h>" >> $@.new; \ 41 echo "\#endif /* $${arch}_GENERIC_$${upper} */" >> $@.new; \ 42 mv -f $@.new $@ 43 44quiet_cmd_remove = REMOVE $(unwanted) 45 cmd_remove = rm -f $(unwanted) 46 47all: $(generic-y) 48 $(if $(unwanted),$(call cmd,remove)) 49 @: 50 51$(obj)/%.h: 52 $(call cmd,wrap) 53 54# Create output directory. Skip it if at least one old header exists 55# since we know the output directory already exists. 56ifeq ($(old-headers),) 57$(shell mkdir -p $(obj)) 58endif 59 60.PHONY: $(PHONY) 61