18d730cfbSDavid Woodhouse# ==========================================================================
28d730cfbSDavid Woodhouse# Installing headers
38d730cfbSDavid Woodhouse#
48d730cfbSDavid Woodhouse# header-y files will be installed verbatim
58d730cfbSDavid Woodhouse# unifdef-y are the files where unifdef will be run before installing files
68d730cfbSDavid Woodhouse# objhdr-y are generated files that will be installed verbatim
78d730cfbSDavid Woodhouse#
88d730cfbSDavid Woodhouse# ==========================================================================
98d730cfbSDavid Woodhouse
1007aea3a7SSam RavnborgUNIFDEF := scripts/unifdef -U__KERNEL__
118d730cfbSDavid Woodhouse
128d730cfbSDavid Woodhouse# Eliminate the contents of (and inclusions of) compiler.h
138d730cfbSDavid WoodhouseHDRSED  := sed 	-e "s/ inline / __inline__ /g" \
14c0519037SMike Frysinger		-e "s/[[:space:]]__user[[:space:]]\{1,\}/ /g" \
15c0519037SMike Frysinger		-e "s/(__user[[:space:]]\{1,\}/ (/g" \
16c0519037SMike Frysinger		-e "s/[[:space:]]__force[[:space:]]\{1,\}/ /g" \
17c0519037SMike Frysinger		-e "s/(__force[[:space:]]\{1,\}/ (/g" \
18c0519037SMike Frysinger		-e "s/[[:space:]]__iomem[[:space:]]\{1,\}/ /g" \
19c0519037SMike Frysinger		-e "s/(__iomem[[:space:]]\{1,\}/ (/g" \
20c0519037SMike Frysinger		-e "s/[[:space:]]__attribute_const__[[:space:]]\{1,\}/\ /g" \
218d730cfbSDavid Woodhouse		-e "s/[[:space:]]__attribute_const__$$//" \
228d730cfbSDavid Woodhouse		-e "/^\#include <linux\/compiler.h>/d"
238d730cfbSDavid Woodhouse
248d730cfbSDavid Woodhouse_dst := $(if $(dst),$(dst),$(obj))
258d730cfbSDavid Woodhouse
26*283039fbSSam Ravnborgkbuild-file := $(srctree)/$(obj)/Kbuild
27*283039fbSSam Ravnborginclude $(kbuild-file)
28de789125SDavid Woodhouse
298d730cfbSDavid Woodhouseinclude scripts/Kbuild.include
308d730cfbSDavid Woodhouse
31*283039fbSSam Ravnborg# If this is include/asm-$(ARCH) then override $(_dst) so that
32*283039fbSSam Ravnborg# we install to include/asm directly.
33de789125SDavid Woodhouse# Unless $(BIASMDIR) is set, in which case we're probably doing
34de789125SDavid Woodhouse# a 'headers_install_all' build and we should keep the -$(ARCH)
35de789125SDavid Woodhouse# in the directory name.
36*283039fbSSam Ravnborgifeq ($(obj),include/asm-$(ARCH)$(BIASMDIR))
378d730cfbSDavid Woodhouse     _dst := include/asm
388d730cfbSDavid Woodhouseendif
398d730cfbSDavid Woodhouse
404e420aa9SSam Ravnborgheader-y	:= $(sort $(header-y) $(unifdef-y))
418d730cfbSDavid Woodhousesubdir-y	:= $(patsubst %/,%,$(filter %/, $(header-y)))
428d730cfbSDavid Woodhouseheader-y	:= $(filter-out %/, $(header-y))
438d730cfbSDavid Woodhouse
44de789125SDavid Woodhouse# stamp files for header checks
454e420aa9SSam Ravnborgcheck-y		:= $(patsubst %,.check.%,$(header-y) $(objhdr-y))
46de789125SDavid Woodhouse
47de789125SDavid Woodhouse# Work out what needs to be removed
48de789125SDavid Woodhouseoldheaders	:= $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h))
494e420aa9SSam Ravnborgunwanted	:= $(filter-out $(header-y) $(objhdr-y),$(oldheaders))
50de789125SDavid Woodhouse
51de789125SDavid Woodhouseoldcheckstamps	:= $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h))
52de789125SDavid Woodhouseunwanted	+= $(filter-out $(check-y),$(oldcheckstamps))
53de789125SDavid Woodhouse
54de789125SDavid Woodhouse# Prefix them all with full paths to $(INSTALL_HDR_PATH)
55de789125SDavid Woodhouseheader-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y))
56de789125SDavid Woodhouseobjhdr-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y))
57de789125SDavid Woodhousecheck-y 	:= $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y))
58de789125SDavid Woodhouse
59de789125SDavid Woodhousequiet_cmd_o_hdr_install   = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
60de789125SDavid Woodhouse      cmd_o_hdr_install   = cp $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(objtree)/$(obj)/%,$@) \
61de789125SDavid Woodhouse			    $(INSTALL_HDR_PATH)/$(_dst)
628d730cfbSDavid Woodhouse
63de789125SDavid Woodhousequiet_cmd_unifdef	  = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
64de789125SDavid Woodhouse      cmd_unifdef	  = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \
65de789125SDavid Woodhouse				   | $(HDRSED) > $@ || :
668d730cfbSDavid Woodhouse
67de789125SDavid Woodhousequiet_cmd_check		  = CHECK   $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@)
684e776b1dSAndrew Morton      cmd_check		  = $(CONFIG_SHELL) $(srctree)/scripts/hdrcheck.sh \
69de789125SDavid Woodhouse                              $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@
7068475359SDavid Woodhouse
71de789125SDavid Woodhousequiet_cmd_remove	  = REMOVE  $(_dst)/$@
72de789125SDavid Woodhouse      cmd_remove	  = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@
738d730cfbSDavid Woodhouse
74de789125SDavid Woodhousequiet_cmd_mkdir		  = MKDIR   $(patsubst $(INSTALL_HDR_PATH)/%,%,$@)
75de789125SDavid Woodhouse      cmd_mkdir		  = mkdir -p $@
76de789125SDavid Woodhouse
77de789125SDavid Woodhouse.PHONY: __headersinst __headerscheck
788d730cfbSDavid Woodhouse
7968475359SDavid Woodhouseifdef HDRCHECK
80de789125SDavid Woodhouse__headerscheck: $(subdir-y) $(check-y)
81de789125SDavid Woodhouse	@true
82de789125SDavid Woodhouse
83de789125SDavid Woodhouse$(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h
8468475359SDavid Woodhouse	$(call cmd,check)
85de789125SDavid Woodhouse
86de789125SDavid Woodhouse# Other dependencies for $(check-y)
87df5f6311SDavid Woodhouseinclude /dev/null $(wildcard $(check-y))
88de789125SDavid Woodhouse
89de789125SDavid Woodhouse# ... but leave $(check-y) as .PHONY for now until those deps are actually correct.
90de789125SDavid Woodhouse.PHONY: $(check-y)
91de789125SDavid Woodhouse
9268475359SDavid Woodhouseelse
938d730cfbSDavid Woodhouse# Rules for installing headers
94*283039fbSSam Ravnborg__headersinst: $(subdir-y) $(header-y) $(objhdr-y)
95de789125SDavid Woodhouse	@true
968d730cfbSDavid Woodhouse
974e420aa9SSam Ravnborg$(objhdr-y) $(subdir-y) $(header-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted)
988d730cfbSDavid Woodhouse
99de789125SDavid Woodhouse$(INSTALL_HDR_PATH)/$(_dst):
1008d730cfbSDavid Woodhouse	$(call cmd,mkdir)
1018d730cfbSDavid Woodhouse
102de789125SDavid Woodhouse.PHONY: $(unwanted)
103de789125SDavid Woodhouse$(unwanted):
104de789125SDavid Woodhouse	$(call cmd,remove)
105de789125SDavid Woodhouse
106*283039fbSSam Ravnborg$(objhdr-y): $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(objtree)/$(obj)/%.h $(kbuild-file)
1078d730cfbSDavid Woodhouse	$(call cmd,o_hdr_install)
1088d730cfbSDavid Woodhouse
109*283039fbSSam Ravnborg$(header-y): $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(kbuild-file)
1108d730cfbSDavid Woodhouse	$(call cmd,unifdef)
1114e420aa9SSam Ravnborg
1128d730cfbSDavid Woodhouseendif
1138d730cfbSDavid Woodhouse
1148d730cfbSDavid Woodhousehdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
1158d730cfbSDavid Woodhouse
1168d730cfbSDavid Woodhouse# Recursion
117de789125SDavid Woodhouse.PHONY: $(subdir-y)
1188d730cfbSDavid Woodhouse$(subdir-y):
1198d730cfbSDavid Woodhouse	$(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel)
120