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