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 108d730cfbSDavid WoodhouseUNIFDEF := unifdef -U__KERNEL__ 118d730cfbSDavid Woodhouse 128d730cfbSDavid Woodhouse# Eliminate the contents of (and inclusions of) compiler.h 138d730cfbSDavid WoodhouseHDRSED := sed -e "s/ inline / __inline__ /g" \ 148d730cfbSDavid Woodhouse -e "s/[[:space:]]__user[[:space:]]\+/ /g" \ 158d730cfbSDavid Woodhouse -e "s/(__user[[:space:]]\+/ (/g" \ 168d730cfbSDavid Woodhouse -e "s/[[:space:]]__force[[:space:]]\+/ /g" \ 178d730cfbSDavid Woodhouse -e "s/(__force[[:space:]]\+/ (/g" \ 188d730cfbSDavid Woodhouse -e "s/[[:space:]]__iomem[[:space:]]\+/ /g" \ 198d730cfbSDavid Woodhouse -e "s/(__iomem[[:space:]]\+/ (/g" \ 208d730cfbSDavid Woodhouse -e "s/[[:space:]]__attribute_const__[[:space:]]\+/\ /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 31*de789125SDavid Woodhouse# use $(wildcard...). 328d730cfbSDavid WoodhouseGENASM := 1 338d730cfbSDavid Woodhousearchasm := $(subst include/asm,asm-$(ARCH),$(obj)) 348d730cfbSDavid Woodhousealtarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj)) 35*de789125SDavid WoodhouseKBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild) 368d730cfbSDavid Woodhouseelse 37*de789125SDavid WoodhouseKBUILDFILES := $(srctree)/$(obj)/Kbuild 388d730cfbSDavid Woodhouseendif 398d730cfbSDavid Woodhouse 40*de789125SDavid Woodhouseinclude $(KBUILDFILES) 41*de789125SDavid 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. 46*de789125SDavid Woodhouse# Unless $(BIASMDIR) is set, in which case we're probably doing 47*de789125SDavid Woodhouse# a 'headers_install_all' build and we should keep the -$(ARCH) 48*de789125SDavid Woodhouse# in the directory name. 49*de789125SDavid Woodhouseifeq ($(obj)$(ALTARCH),include/asm-$(ARCH)$(BIASMDIR)) 508d730cfbSDavid Woodhouse _dst := include/asm 518d730cfbSDavid Woodhouseendif 528d730cfbSDavid Woodhouse 538d730cfbSDavid Woodhouseheader-y := $(sort $(header-y)) 548d730cfbSDavid Woodhouseunifdef-y := $(sort $(unifdef-y)) 558d730cfbSDavid Woodhousesubdir-y := $(patsubst %/,%,$(filter %/, $(header-y))) 568d730cfbSDavid Woodhouseheader-y := $(filter-out %/, $(header-y)) 578d730cfbSDavid Woodhouseheader-y := $(filter-out $(unifdef-y),$(header-y)) 588d730cfbSDavid Woodhouse 59*de789125SDavid Woodhouse# stamp files for header checks 60*de789125SDavid Woodhousecheck-y := $(patsubst %,.check.%,$(header-y) $(unifdef-y) $(objhdr-y)) 61*de789125SDavid Woodhouse 62*de789125SDavid Woodhouse# Work out what needs to be removed 63*de789125SDavid Woodhouseoldheaders := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h)) 64*de789125SDavid Woodhouseunwanted := $(filter-out $(header-y) $(unifdef-y) $(objhdr-y),$(oldheaders)) 65*de789125SDavid Woodhouse 66*de789125SDavid Woodhouseoldcheckstamps := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h)) 67*de789125SDavid Woodhouseunwanted += $(filter-out $(check-y),$(oldcheckstamps)) 68*de789125SDavid Woodhouse 69*de789125SDavid Woodhouse# Prefix them all with full paths to $(INSTALL_HDR_PATH) 70*de789125SDavid Woodhouseheader-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y)) 71*de789125SDavid Woodhouseunifdef-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(unifdef-y)) 72*de789125SDavid Woodhouseobjhdr-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y)) 73*de789125SDavid Woodhousecheck-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y)) 74*de789125SDavid Woodhouse 75*de789125SDavid Woodhouse 768d730cfbSDavid Woodhouseifdef ALTARCH 778d730cfbSDavid Woodhouseifeq ($(obj),include/asm-$(ARCH)) 788d730cfbSDavid Woodhousealtarch-y := altarch-dir 798d730cfbSDavid Woodhouseendif 808d730cfbSDavid Woodhouseendif 818d730cfbSDavid Woodhouse 828d730cfbSDavid Woodhouse# Make the definitions visible for recursive make invocations 838d730cfbSDavid Woodhouseexport ALTARCH 848d730cfbSDavid Woodhouseexport ARCHDEF 858d730cfbSDavid Woodhouseexport ALTARCHDEF 868d730cfbSDavid Woodhouse 87*de789125SDavid Woodhousequiet_cmd_o_hdr_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 88*de789125SDavid Woodhouse cmd_o_hdr_install = cp $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(objtree)/$(obj)/%,$@) \ 89*de789125SDavid Woodhouse $(INSTALL_HDR_PATH)/$(_dst) 908d730cfbSDavid Woodhouse 91*de789125SDavid Woodhousequiet_cmd_headers_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 92*de789125SDavid Woodhouse cmd_headers_install = $(HDRSED) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ 93*de789125SDavid Woodhouse > $@ 948d730cfbSDavid Woodhouse 95*de789125SDavid Woodhousequiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 96*de789125SDavid Woodhouse cmd_unifdef = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ 97*de789125SDavid Woodhouse | $(HDRSED) > $@ || : 988d730cfbSDavid Woodhouse 99*de789125SDavid Woodhousequiet_cmd_check = CHECK $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@) 10068475359SDavid Woodhouse cmd_check = $(srctree)/scripts/hdrcheck.sh \ 101*de789125SDavid Woodhouse $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@ 10268475359SDavid Woodhouse 103*de789125SDavid Woodhousequiet_cmd_remove = REMOVE $(_dst)/$@ 104*de789125SDavid Woodhouse cmd_remove = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@ 1058d730cfbSDavid Woodhouse 106*de789125SDavid Woodhousequiet_cmd_mkdir = MKDIR $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 107*de789125SDavid Woodhouse cmd_mkdir = mkdir -p $@ 108*de789125SDavid Woodhouse 109*de789125SDavid Woodhousequiet_cmd_gen = GEN $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 1108d730cfbSDavid Woodhouse cmd_gen = \ 111*de789125SDavid WoodhouseFNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@) \ 112*de789125SDavid WoodhouseSTUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z. A-Z_`; \ 1138d730cfbSDavid Woodhouse(echo "/* File autogenerated by 'make headers_install' */" ; \ 1148d730cfbSDavid Woodhouseecho "\#ifndef $$STUBDEF" ; \ 1158d730cfbSDavid Woodhouseecho "\#define $$STUBDEF" ; \ 1168d730cfbSDavid Woodhouseecho "\# if $(ARCHDEF)" ; \ 117*de789125SDavid Woodhouseif [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then \ 118*de789125SDavid Woodhouse echo "\# include <$(archasm)/$$FNAME>" ; \ 1198d730cfbSDavid Woodhouseelse \ 120*de789125SDavid Woodhouse echo "\# error $(archasm)/$$FNAME does not exist in" \ 1218d730cfbSDavid Woodhouse "the $(ARCH) architecture" ; \ 1228d730cfbSDavid Woodhousefi ; \ 1238d730cfbSDavid Woodhouseecho "\# elif $(ALTARCHDEF)" ; \ 124*de789125SDavid Woodhouseif [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then \ 125*de789125SDavid Woodhouse echo "\# include <$(altarchasm)/$$FNAME>" ; \ 1268d730cfbSDavid Woodhouseelse \ 127*de789125SDavid Woodhouse echo "\# error $(altarchasm)/$$FNAME does not exist in" \ 1288d730cfbSDavid Woodhouse "the $(ALTARCH) architecture" ; \ 1298d730cfbSDavid Woodhousefi ; \ 1308d730cfbSDavid Woodhouseecho "\# else" ; \ 1318d730cfbSDavid Woodhouseecho "\# warning This machine appears to be" \ 1328d730cfbSDavid Woodhouse "neither $(ARCH) nor $(ALTARCH)." ; \ 1338d730cfbSDavid Woodhouseecho "\# endif" ; \ 1348d730cfbSDavid Woodhouseecho "\#endif /* $$STUBDEF */" ; \ 135*de789125SDavid Woodhouse) > $@ 1368d730cfbSDavid Woodhouse 137*de789125SDavid Woodhouse.PHONY: __headersinst __headerscheck 1388d730cfbSDavid Woodhouse 13968475359SDavid Woodhouseifdef HDRCHECK 140*de789125SDavid Woodhouse__headerscheck: $(subdir-y) $(check-y) 141*de789125SDavid Woodhouse @true 142*de789125SDavid Woodhouse 143*de789125SDavid Woodhouse$(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h 14468475359SDavid Woodhouse $(call cmd,check) 145*de789125SDavid Woodhouse 146*de789125SDavid Woodhouse# Other dependencies for $(check-y) 147*de789125SDavid Woodhouse-include /dev/null $(check-y) 148*de789125SDavid Woodhouse 149*de789125SDavid Woodhouse# ... but leave $(check-y) as .PHONY for now until those deps are actually correct. 150*de789125SDavid Woodhouse.PHONY: $(check-y) 151*de789125SDavid Woodhouse 15268475359SDavid Woodhouseelse 1538d730cfbSDavid Woodhouse# Rules for installing headers 154*de789125SDavid Woodhouse__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y) 155*de789125SDavid Woodhouse @true 1568d730cfbSDavid Woodhouse 157*de789125SDavid Woodhouse$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted) 1588d730cfbSDavid Woodhouse 159*de789125SDavid Woodhouse$(INSTALL_HDR_PATH)/$(_dst): 1608d730cfbSDavid Woodhouse $(call cmd,mkdir) 1618d730cfbSDavid Woodhouse 162*de789125SDavid Woodhouse.PHONY: $(unwanted) 163*de789125SDavid Woodhouse$(unwanted): 164*de789125SDavid Woodhouse $(call cmd,remove) 165*de789125SDavid Woodhouse 1668d730cfbSDavid Woodhouseifdef GENASM 167*de789125SDavid Woodhouse$(objhdr-y) $(header-y) $(unifdef-y): $(KBUILDFILES) 1688d730cfbSDavid Woodhouse $(call cmd,gen) 1698d730cfbSDavid Woodhouse 1708d730cfbSDavid Woodhouseelse 171*de789125SDavid Woodhouse$(objhdr-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) 1728d730cfbSDavid Woodhouse $(call cmd,o_hdr_install) 1738d730cfbSDavid Woodhouse 174*de789125SDavid Woodhouse$(header-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) 1758d730cfbSDavid Woodhouse $(call cmd,headers_install) 1768d730cfbSDavid Woodhouse 177*de789125SDavid Woodhouse$(unifdef-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) 1788d730cfbSDavid Woodhouse $(call cmd,unifdef) 1798d730cfbSDavid Woodhouseendif 18068475359SDavid Woodhouseendif 1818d730cfbSDavid Woodhouse 1828d730cfbSDavid Woodhousehdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj 1838d730cfbSDavid Woodhouse 1848d730cfbSDavid Woodhouse.PHONY: altarch-dir 185b5122177SDavid Woodhouse# All the files in the normal arch dir must be created first, since we test 186b5122177SDavid Woodhouse# for their existence. 187b5122177SDavid Woodhousealtarch-dir: $(subdir-y) $(header-y) $(unifdef-y) $(objhdr-y) 1888d730cfbSDavid Woodhouse $(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH) 189*de789125SDavid Woodhouse $(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm$(BIASMDIR) 1908d730cfbSDavid Woodhouse 1918d730cfbSDavid Woodhouse# Recursion 192*de789125SDavid Woodhouse.PHONY: $(subdir-y) 1938d730cfbSDavid Woodhouse$(subdir-y): 1948d730cfbSDavid Woodhouse $(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel) 195