xref: /linux/scripts/Makefile.headersinst (revision de78912582bc1f95733d53e0d40779c0cd7b0686)
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