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 268d730cfbSDavid Woodhouseifeq (,$(patsubst include/asm/%,,$(obj)/)) 278d730cfbSDavid Woodhouse# For producing the generated stuff in include/asm for biarch builds, include 288d730cfbSDavid Woodhouse# both sets of Kbuild files; we'll generate anything which is mentioned in 298d730cfbSDavid Woodhouse# _either_ arch, and recurse into subdirectories which are mentioned in either 308d730cfbSDavid Woodhouse# arch. Since some directories may exist in one but not the other, we must 31de789125SDavid Woodhouse# use $(wildcard...). 328d730cfbSDavid WoodhouseGENASM := 1 338d730cfbSDavid Woodhousearchasm := $(subst include/asm,asm-$(ARCH),$(obj)) 348d730cfbSDavid Woodhousealtarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj)) 35de789125SDavid WoodhouseKBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild) 368d730cfbSDavid Woodhouseelse 37de789125SDavid WoodhouseKBUILDFILES := $(srctree)/$(obj)/Kbuild 388d730cfbSDavid Woodhouseendif 398d730cfbSDavid Woodhouse 40de789125SDavid Woodhouseinclude $(KBUILDFILES) 41de789125SDavid Woodhouse 428d730cfbSDavid Woodhouseinclude scripts/Kbuild.include 438d730cfbSDavid Woodhouse 448d730cfbSDavid Woodhouse# If this is include/asm-$(ARCH) and there's no $(ALTARCH), then 458d730cfbSDavid Woodhouse# override $(_dst) so that we install to include/asm directly. 46de789125SDavid Woodhouse# Unless $(BIASMDIR) is set, in which case we're probably doing 47de789125SDavid Woodhouse# a 'headers_install_all' build and we should keep the -$(ARCH) 48de789125SDavid Woodhouse# in the directory name. 49de789125SDavid Woodhouseifeq ($(obj)$(ALTARCH),include/asm-$(ARCH)$(BIASMDIR)) 508d730cfbSDavid Woodhouse _dst := include/asm 518d730cfbSDavid Woodhouseendif 528d730cfbSDavid Woodhouse 53*4e420aa9SSam Ravnborgheader-y := $(sort $(header-y) $(unifdef-y)) 548d730cfbSDavid Woodhousesubdir-y := $(patsubst %/,%,$(filter %/, $(header-y))) 558d730cfbSDavid Woodhouseheader-y := $(filter-out %/, $(header-y)) 568d730cfbSDavid Woodhouse 57de789125SDavid Woodhouse# stamp files for header checks 58*4e420aa9SSam Ravnborgcheck-y := $(patsubst %,.check.%,$(header-y) $(objhdr-y)) 59de789125SDavid Woodhouse 60de789125SDavid Woodhouse# Work out what needs to be removed 61de789125SDavid Woodhouseoldheaders := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h)) 62*4e420aa9SSam Ravnborgunwanted := $(filter-out $(header-y) $(objhdr-y),$(oldheaders)) 63de789125SDavid Woodhouse 64de789125SDavid Woodhouseoldcheckstamps := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h)) 65de789125SDavid Woodhouseunwanted += $(filter-out $(check-y),$(oldcheckstamps)) 66de789125SDavid Woodhouse 67de789125SDavid Woodhouse# Prefix them all with full paths to $(INSTALL_HDR_PATH) 68de789125SDavid Woodhouseheader-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y)) 69de789125SDavid Woodhouseobjhdr-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y)) 70de789125SDavid Woodhousecheck-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y)) 71de789125SDavid Woodhouse 72de789125SDavid Woodhouse 738d730cfbSDavid Woodhouseifdef ALTARCH 748d730cfbSDavid Woodhouseifeq ($(obj),include/asm-$(ARCH)) 758d730cfbSDavid Woodhousealtarch-y := altarch-dir 768d730cfbSDavid Woodhouseendif 778d730cfbSDavid Woodhouseendif 788d730cfbSDavid Woodhouse 798d730cfbSDavid Woodhouse# Make the definitions visible for recursive make invocations 808d730cfbSDavid Woodhouseexport ALTARCH 818d730cfbSDavid Woodhouseexport ARCHDEF 828d730cfbSDavid Woodhouseexport ALTARCHDEF 838d730cfbSDavid Woodhouse 84de789125SDavid Woodhousequiet_cmd_o_hdr_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 85de789125SDavid Woodhouse cmd_o_hdr_install = cp $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(objtree)/$(obj)/%,$@) \ 86de789125SDavid Woodhouse $(INSTALL_HDR_PATH)/$(_dst) 878d730cfbSDavid Woodhouse 88de789125SDavid Woodhousequiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 89de789125SDavid Woodhouse cmd_unifdef = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ 90de789125SDavid Woodhouse | $(HDRSED) > $@ || : 918d730cfbSDavid Woodhouse 92de789125SDavid Woodhousequiet_cmd_check = CHECK $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@) 934e776b1dSAndrew Morton cmd_check = $(CONFIG_SHELL) $(srctree)/scripts/hdrcheck.sh \ 94de789125SDavid Woodhouse $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@ 9568475359SDavid Woodhouse 96de789125SDavid Woodhousequiet_cmd_remove = REMOVE $(_dst)/$@ 97de789125SDavid Woodhouse cmd_remove = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@ 988d730cfbSDavid Woodhouse 99de789125SDavid Woodhousequiet_cmd_mkdir = MKDIR $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 100de789125SDavid Woodhouse cmd_mkdir = mkdir -p $@ 101de789125SDavid Woodhouse 102de789125SDavid Woodhousequiet_cmd_gen = GEN $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 1038d730cfbSDavid Woodhouse cmd_gen = \ 1040db19c41SDavid WoodhouseFNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@); \ 105ec268be3SMike FrysingerSTUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z.- A-Z__`; \ 1068d730cfbSDavid Woodhouse(echo "/* File autogenerated by 'make headers_install' */" ; \ 1078d730cfbSDavid Woodhouseecho "\#ifndef $$STUBDEF" ; \ 1088d730cfbSDavid Woodhouseecho "\#define $$STUBDEF" ; \ 1098d730cfbSDavid Woodhouseecho "\# if $(ARCHDEF)" ; \ 110de789125SDavid Woodhouseif [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then \ 111de789125SDavid Woodhouse echo "\# include <$(archasm)/$$FNAME>" ; \ 1128d730cfbSDavid Woodhouseelse \ 113de789125SDavid Woodhouse echo "\# error $(archasm)/$$FNAME does not exist in" \ 1148d730cfbSDavid Woodhouse "the $(ARCH) architecture" ; \ 1158d730cfbSDavid Woodhousefi ; \ 1168d730cfbSDavid Woodhouseecho "\# elif $(ALTARCHDEF)" ; \ 117de789125SDavid Woodhouseif [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then \ 118de789125SDavid Woodhouse echo "\# include <$(altarchasm)/$$FNAME>" ; \ 1198d730cfbSDavid Woodhouseelse \ 120de789125SDavid Woodhouse echo "\# error $(altarchasm)/$$FNAME does not exist in" \ 1218d730cfbSDavid Woodhouse "the $(ALTARCH) architecture" ; \ 1228d730cfbSDavid Woodhousefi ; \ 1238d730cfbSDavid Woodhouseecho "\# else" ; \ 1248d730cfbSDavid Woodhouseecho "\# warning This machine appears to be" \ 1258d730cfbSDavid Woodhouse "neither $(ARCH) nor $(ALTARCH)." ; \ 1268d730cfbSDavid Woodhouseecho "\# endif" ; \ 1278d730cfbSDavid Woodhouseecho "\#endif /* $$STUBDEF */" ; \ 128de789125SDavid Woodhouse) > $@ 1298d730cfbSDavid Woodhouse 130de789125SDavid Woodhouse.PHONY: __headersinst __headerscheck 1318d730cfbSDavid Woodhouse 13268475359SDavid Woodhouseifdef HDRCHECK 133de789125SDavid Woodhouse__headerscheck: $(subdir-y) $(check-y) 134de789125SDavid Woodhouse @true 135de789125SDavid Woodhouse 136de789125SDavid Woodhouse$(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h 13768475359SDavid Woodhouse $(call cmd,check) 138de789125SDavid Woodhouse 139de789125SDavid Woodhouse# Other dependencies for $(check-y) 140df5f6311SDavid Woodhouseinclude /dev/null $(wildcard $(check-y)) 141de789125SDavid Woodhouse 142de789125SDavid Woodhouse# ... but leave $(check-y) as .PHONY for now until those deps are actually correct. 143de789125SDavid Woodhouse.PHONY: $(check-y) 144de789125SDavid Woodhouse 14568475359SDavid Woodhouseelse 1468d730cfbSDavid Woodhouse# Rules for installing headers 147*4e420aa9SSam Ravnborg__headersinst: $(subdir-y) $(header-y) $(altarch-y) $(objhdr-y) 148de789125SDavid Woodhouse @true 1498d730cfbSDavid Woodhouse 150*4e420aa9SSam Ravnborg$(objhdr-y) $(subdir-y) $(header-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted) 1518d730cfbSDavid Woodhouse 152de789125SDavid Woodhouse$(INSTALL_HDR_PATH)/$(_dst): 1538d730cfbSDavid Woodhouse $(call cmd,mkdir) 1548d730cfbSDavid Woodhouse 155de789125SDavid Woodhouse.PHONY: $(unwanted) 156de789125SDavid Woodhouse$(unwanted): 157de789125SDavid Woodhouse $(call cmd,remove) 158de789125SDavid Woodhouse 1598d730cfbSDavid Woodhouseifdef GENASM 160*4e420aa9SSam Ravnborg$(objhdr-y) $(header-y): $(KBUILDFILES) 1618d730cfbSDavid Woodhouse $(call cmd,gen) 1628d730cfbSDavid Woodhouse 1638d730cfbSDavid Woodhouseelse 164308ba5fcSDavid Woodhouse$(objhdr-y): $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(objtree)/$(obj)/%.h $(KBUILDFILES) 1658d730cfbSDavid Woodhouse $(call cmd,o_hdr_install) 1668d730cfbSDavid Woodhouse 167de789125SDavid Woodhouse$(header-y): $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) 1688d730cfbSDavid Woodhouse $(call cmd,unifdef) 169*4e420aa9SSam Ravnborg 1708d730cfbSDavid Woodhouseendif 17168475359SDavid Woodhouseendif 1728d730cfbSDavid Woodhouse 1738d730cfbSDavid Woodhousehdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj 1748d730cfbSDavid Woodhouse 1758d730cfbSDavid Woodhouse.PHONY: altarch-dir 176b5122177SDavid Woodhouse# All the files in the normal arch dir must be created first, since we test 177b5122177SDavid Woodhouse# for their existence. 178*4e420aa9SSam Ravnborgaltarch-dir: $(subdir-y) $(header-y) $(objhdr-y) 1798d730cfbSDavid Woodhouse $(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH) 180de789125SDavid Woodhouse $(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm$(BIASMDIR) 1818d730cfbSDavid Woodhouse 1828d730cfbSDavid Woodhouse# Recursion 183de789125SDavid Woodhouse.PHONY: $(subdir-y) 1848d730cfbSDavid Woodhouse$(subdir-y): 1858d730cfbSDavid Woodhouse $(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel) 186