1# ========================================================================== 2# Installing headers 3# 4# header-y files will be installed verbatim 5# unifdef-y are the files where unifdef will be run before installing files 6# objhdr-y are generated files that will be installed verbatim 7# 8# ========================================================================== 9 10UNIFDEF := scripts/unifdef -U__KERNEL__ 11 12# Eliminate the contents of (and inclusions of) compiler.h 13HDRSED := sed -e "s/ inline / __inline__ /g" \ 14 -e "s/[[:space:]]__user[[:space:]]\{1,\}/ /g" \ 15 -e "s/(__user[[:space:]]\{1,\}/ (/g" \ 16 -e "s/[[:space:]]__force[[:space:]]\{1,\}/ /g" \ 17 -e "s/(__force[[:space:]]\{1,\}/ (/g" \ 18 -e "s/[[:space:]]__iomem[[:space:]]\{1,\}/ /g" \ 19 -e "s/(__iomem[[:space:]]\{1,\}/ (/g" \ 20 -e "s/[[:space:]]__attribute_const__[[:space:]]\{1,\}/\ /g" \ 21 -e "s/[[:space:]]__attribute_const__$$//" \ 22 -e "/^\#include <linux\/compiler.h>/d" 23 24_dst := $(if $(dst),$(dst),$(obj)) 25 26ifeq (,$(patsubst include/asm/%,,$(obj)/)) 27# For producing the generated stuff in include/asm for biarch builds, include 28# both sets of Kbuild files; we'll generate anything which is mentioned in 29# _either_ arch, and recurse into subdirectories which are mentioned in either 30# arch. Since some directories may exist in one but not the other, we must 31# use $(wildcard...). 32GENASM := 1 33archasm := $(subst include/asm,asm-$(ARCH),$(obj)) 34altarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj)) 35KBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild) 36else 37KBUILDFILES := $(srctree)/$(obj)/Kbuild 38endif 39 40include $(KBUILDFILES) 41 42include scripts/Kbuild.include 43 44# If this is include/asm-$(ARCH) and there's no $(ALTARCH), then 45# override $(_dst) so that we install to include/asm directly. 46# Unless $(BIASMDIR) is set, in which case we're probably doing 47# a 'headers_install_all' build and we should keep the -$(ARCH) 48# in the directory name. 49ifeq ($(obj)$(ALTARCH),include/asm-$(ARCH)$(BIASMDIR)) 50 _dst := include/asm 51endif 52 53header-y := $(sort $(header-y)) 54unifdef-y := $(sort $(unifdef-y)) 55subdir-y := $(patsubst %/,%,$(filter %/, $(header-y))) 56header-y := $(filter-out %/, $(header-y)) 57header-y := $(filter-out $(unifdef-y),$(header-y)) 58 59# stamp files for header checks 60check-y := $(patsubst %,.check.%,$(header-y) $(unifdef-y) $(objhdr-y)) 61 62# Work out what needs to be removed 63oldheaders := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h)) 64unwanted := $(filter-out $(header-y) $(unifdef-y) $(objhdr-y),$(oldheaders)) 65 66oldcheckstamps := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h)) 67unwanted += $(filter-out $(check-y),$(oldcheckstamps)) 68 69# Prefix them all with full paths to $(INSTALL_HDR_PATH) 70header-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y)) 71unifdef-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(unifdef-y)) 72objhdr-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y)) 73check-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y)) 74 75 76ifdef ALTARCH 77ifeq ($(obj),include/asm-$(ARCH)) 78altarch-y := altarch-dir 79endif 80endif 81 82# Make the definitions visible for recursive make invocations 83export ALTARCH 84export ARCHDEF 85export ALTARCHDEF 86 87quiet_cmd_o_hdr_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 88 cmd_o_hdr_install = cp $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(objtree)/$(obj)/%,$@) \ 89 $(INSTALL_HDR_PATH)/$(_dst) 90 91quiet_cmd_headers_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 92 cmd_headers_install = $(HDRSED) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ 93 > $@ 94 95quiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 96 cmd_unifdef = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ 97 | $(HDRSED) > $@ || : 98 99quiet_cmd_check = CHECK $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@) 100 cmd_check = $(CONFIG_SHELL) $(srctree)/scripts/hdrcheck.sh \ 101 $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@ 102 103quiet_cmd_remove = REMOVE $(_dst)/$@ 104 cmd_remove = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@ 105 106quiet_cmd_mkdir = MKDIR $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 107 cmd_mkdir = mkdir -p $@ 108 109quiet_cmd_gen = GEN $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) 110 cmd_gen = \ 111FNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@); \ 112STUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z.- A-Z__`; \ 113(echo "/* File autogenerated by 'make headers_install' */" ; \ 114echo "\#ifndef $$STUBDEF" ; \ 115echo "\#define $$STUBDEF" ; \ 116echo "\# if $(ARCHDEF)" ; \ 117if [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then \ 118 echo "\# include <$(archasm)/$$FNAME>" ; \ 119else \ 120 echo "\# error $(archasm)/$$FNAME does not exist in" \ 121 "the $(ARCH) architecture" ; \ 122fi ; \ 123echo "\# elif $(ALTARCHDEF)" ; \ 124if [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then \ 125 echo "\# include <$(altarchasm)/$$FNAME>" ; \ 126else \ 127 echo "\# error $(altarchasm)/$$FNAME does not exist in" \ 128 "the $(ALTARCH) architecture" ; \ 129fi ; \ 130echo "\# else" ; \ 131echo "\# warning This machine appears to be" \ 132 "neither $(ARCH) nor $(ALTARCH)." ; \ 133echo "\# endif" ; \ 134echo "\#endif /* $$STUBDEF */" ; \ 135) > $@ 136 137.PHONY: __headersinst __headerscheck 138 139ifdef HDRCHECK 140__headerscheck: $(subdir-y) $(check-y) 141 @true 142 143$(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h 144 $(call cmd,check) 145 146# Other dependencies for $(check-y) 147include /dev/null $(wildcard $(check-y)) 148 149# ... but leave $(check-y) as .PHONY for now until those deps are actually correct. 150.PHONY: $(check-y) 151 152else 153# Rules for installing headers 154__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y) 155 @true 156 157$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted) 158 159$(INSTALL_HDR_PATH)/$(_dst): 160 $(call cmd,mkdir) 161 162.PHONY: $(unwanted) 163$(unwanted): 164 $(call cmd,remove) 165 166ifdef GENASM 167$(objhdr-y) $(header-y) $(unifdef-y): $(KBUILDFILES) 168 $(call cmd,gen) 169 170else 171$(objhdr-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(objtree)/$(obj)/%.h $(KBUILDFILES) 172 $(call cmd,o_hdr_install) 173 174$(header-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) 175 $(call cmd,headers_install) 176 177$(unifdef-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) 178 $(call cmd,unifdef) 179endif 180endif 181 182hdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj 183 184.PHONY: altarch-dir 185# All the files in the normal arch dir must be created first, since we test 186# for their existence. 187altarch-dir: $(subdir-y) $(header-y) $(unifdef-y) $(objhdr-y) 188 $(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH) 189 $(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm$(BIASMDIR) 190 191# Recursion 192.PHONY: $(subdir-y) 193$(subdir-y): 194 $(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel) 195