1*53ee8cc1Swenshuai.xi# ========================================================================== 2*53ee8cc1Swenshuai.xi# Installing headers 3*53ee8cc1Swenshuai.xi# 4*53ee8cc1Swenshuai.xi# header-y - list files to be installed. They are preprocessed 5*53ee8cc1Swenshuai.xi# to remove __KERNEL__ section of the file 6*53ee8cc1Swenshuai.xi# objhdr-y - Same as header-y but for generated files 7*53ee8cc1Swenshuai.xi# 8*53ee8cc1Swenshuai.xi# ========================================================================== 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi# called may set destination dir (when installing to asm/) 11*53ee8cc1Swenshuai.xi_dst := $(if $(dst),$(dst),$(obj)) 12*53ee8cc1Swenshuai.xi 13*53ee8cc1Swenshuai.xikbuild-file := $(srctree)/$(obj)/Kbuild 14*53ee8cc1Swenshuai.xiinclude $(kbuild-file) 15*53ee8cc1Swenshuai.xi 16*53ee8cc1Swenshuai.xi_dst := $(if $(destination-y),$(destination-y),$(_dst)) 17*53ee8cc1Swenshuai.xi 18*53ee8cc1Swenshuai.xiinclude scripts/Kbuild.include 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xiinstall := $(INSTALL_HDR_PATH)/$(_dst) 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xiheader-y := $(sort $(header-y)) 23*53ee8cc1Swenshuai.xisubdirs := $(patsubst %/,%,$(filter %/, $(header-y))) 24*53ee8cc1Swenshuai.xiheader-y := $(filter-out %/, $(header-y)) 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi# files used to track state of install/check 27*53ee8cc1Swenshuai.xiinstall-file := $(install)/.install 28*53ee8cc1Swenshuai.xicheck-file := $(install)/.check 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi# generic-y list all files an architecture uses from asm-generic 31*53ee8cc1Swenshuai.xi# Use this to build a list of headers which require a wrapper 32*53ee8cc1Swenshuai.xiwrapper-files := $(filter $(header-y), $(generic-y)) 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi# all headers files for this dir 35*53ee8cc1Swenshuai.xiheader-y := $(filter-out $(generic-y), $(header-y)) 36*53ee8cc1Swenshuai.xiall-files := $(header-y) $(objhdr-y) $(wrapper-files) 37*53ee8cc1Swenshuai.xiinput-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \ 38*53ee8cc1Swenshuai.xi $(addprefix $(objtree)/$(obj)/,$(objhdr-y)) 39*53ee8cc1Swenshuai.xioutput-files := $(addprefix $(install)/, $(all-files)) 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi# Work out what needs to be removed 42*53ee8cc1Swenshuai.xioldheaders := $(patsubst $(install)/%,%,$(wildcard $(install)/*.h)) 43*53ee8cc1Swenshuai.xiunwanted := $(filter-out $(all-files),$(oldheaders)) 44*53ee8cc1Swenshuai.xi 45*53ee8cc1Swenshuai.xi# Prefix unwanted with full paths to $(INSTALL_HDR_PATH) 46*53ee8cc1Swenshuai.xiunwanted-file := $(addprefix $(install)/, $(unwanted)) 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xiprintdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@)) 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xiquiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ 51*53ee8cc1Swenshuai.xi file$(if $(word 2, $(all-files)),s)) 52*53ee8cc1Swenshuai.xi cmd_install = \ 53*53ee8cc1Swenshuai.xi $(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \ 54*53ee8cc1Swenshuai.xi $(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \ 55*53ee8cc1Swenshuai.xi for F in $(wrapper-files); do \ 56*53ee8cc1Swenshuai.xi echo "\#include <asm-generic/$$F>" > $(install)/$$F; \ 57*53ee8cc1Swenshuai.xi done; \ 58*53ee8cc1Swenshuai.xi touch $@ 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xiquiet_cmd_remove = REMOVE $(unwanted) 61*53ee8cc1Swenshuai.xi cmd_remove = rm -f $(unwanted-file) 62*53ee8cc1Swenshuai.xi 63*53ee8cc1Swenshuai.xiquiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files) 64*53ee8cc1Swenshuai.xi# Headers list can be pretty long, xargs helps to avoid 65*53ee8cc1Swenshuai.xi# the "Argument list too long" error. 66*53ee8cc1Swenshuai.xi cmd_check = for f in $(all-files); do \ 67*53ee8cc1Swenshuai.xi echo "$(install)/$${f}"; done \ 68*53ee8cc1Swenshuai.xi | xargs \ 69*53ee8cc1Swenshuai.xi $(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH); \ 70*53ee8cc1Swenshuai.xi touch $@ 71*53ee8cc1Swenshuai.xi 72*53ee8cc1Swenshuai.xiPHONY += __headersinst __headerscheck 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xiifndef HDRCHECK 75*53ee8cc1Swenshuai.xi# Rules for installing headers 76*53ee8cc1Swenshuai.xi__headersinst: $(subdirs) $(install-file) 77*53ee8cc1Swenshuai.xi @: 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xitargets += $(install-file) 80*53ee8cc1Swenshuai.xi$(install-file): scripts/headers_install.pl $(input-files) FORCE 81*53ee8cc1Swenshuai.xi $(if $(unwanted),$(call cmd,remove),) 82*53ee8cc1Swenshuai.xi $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) 83*53ee8cc1Swenshuai.xi $(call if_changed,install) 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xielse 86*53ee8cc1Swenshuai.xi__headerscheck: $(subdirs) $(check-file) 87*53ee8cc1Swenshuai.xi @: 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xitargets += $(check-file) 90*53ee8cc1Swenshuai.xi$(check-file): scripts/headers_check.pl $(output-files) FORCE 91*53ee8cc1Swenshuai.xi $(call if_changed,check) 92*53ee8cc1Swenshuai.xi 93*53ee8cc1Swenshuai.xiendif 94*53ee8cc1Swenshuai.xi 95*53ee8cc1Swenshuai.xi# Recursion 96*53ee8cc1Swenshuai.xihdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj 97*53ee8cc1Swenshuai.xi.PHONY: $(subdirs) 98*53ee8cc1Swenshuai.xi$(subdirs): 99*53ee8cc1Swenshuai.xi $(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(_dst)/$@ 100*53ee8cc1Swenshuai.xi 101*53ee8cc1Swenshuai.xitargets := $(wildcard $(sort $(targets))) 102*53ee8cc1Swenshuai.xicmd_files := $(wildcard \ 103*53ee8cc1Swenshuai.xi $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xiifneq ($(cmd_files),) 106*53ee8cc1Swenshuai.xi include $(cmd_files) 107*53ee8cc1Swenshuai.xiendif 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi.PHONY: $(PHONY) 110*53ee8cc1Swenshuai.xiPHONY += FORCE 111*53ee8cc1Swenshuai.xiFORCE: ; 112