xref: /linux/scripts/Makefile.headersinst (revision 8d730cfb50cc77da6d00f941daef440918a1922f)
1*8d730cfbSDavid Woodhouse# ==========================================================================
2*8d730cfbSDavid Woodhouse# Installing headers
3*8d730cfbSDavid Woodhouse#
4*8d730cfbSDavid Woodhouse# header-y files will be installed verbatim
5*8d730cfbSDavid Woodhouse# unifdef-y are the files where unifdef will be run before installing files
6*8d730cfbSDavid Woodhouse# objhdr-y are generated files that will be installed verbatim
7*8d730cfbSDavid Woodhouse#
8*8d730cfbSDavid Woodhouse# ==========================================================================
9*8d730cfbSDavid Woodhouse
10*8d730cfbSDavid WoodhouseUNIFDEF := unifdef -U__KERNEL__
11*8d730cfbSDavid Woodhouse
12*8d730cfbSDavid Woodhouse# Eliminate the contents of (and inclusions of) compiler.h
13*8d730cfbSDavid WoodhouseHDRSED  := sed 	-e "s/ inline / __inline__ /g" \
14*8d730cfbSDavid Woodhouse		-e "s/[[:space:]]__user[[:space:]]\+/ /g" \
15*8d730cfbSDavid Woodhouse		-e "s/(__user[[:space:]]\+/ (/g" \
16*8d730cfbSDavid Woodhouse		-e "s/[[:space:]]__force[[:space:]]\+/ /g" \
17*8d730cfbSDavid Woodhouse		-e "s/(__force[[:space:]]\+/ (/g" \
18*8d730cfbSDavid Woodhouse		-e "s/[[:space:]]__iomem[[:space:]]\+/ /g" \
19*8d730cfbSDavid Woodhouse		-e "s/(__iomem[[:space:]]\+/ (/g" \
20*8d730cfbSDavid Woodhouse		-e "s/[[:space:]]__attribute_const__[[:space:]]\+/\ /g" \
21*8d730cfbSDavid Woodhouse		-e "s/[[:space:]]__attribute_const__$$//" \
22*8d730cfbSDavid Woodhouse		-e "/^\#include <linux\/compiler.h>/d"
23*8d730cfbSDavid Woodhouse
24*8d730cfbSDavid Woodhouse_dst := $(if $(dst),$(dst),$(obj))
25*8d730cfbSDavid Woodhouse
26*8d730cfbSDavid Woodhouse.PHONY: __headersinst
27*8d730cfbSDavid Woodhouse__headersinst:
28*8d730cfbSDavid Woodhouse
29*8d730cfbSDavid Woodhouse
30*8d730cfbSDavid Woodhouseifeq (,$(patsubst include/asm/%,,$(obj)/))
31*8d730cfbSDavid Woodhouse# For producing the generated stuff in include/asm for biarch builds, include
32*8d730cfbSDavid Woodhouse# both sets of Kbuild files; we'll generate anything which is mentioned in
33*8d730cfbSDavid Woodhouse# _either_ arch, and recurse into subdirectories which are mentioned in either
34*8d730cfbSDavid Woodhouse# arch. Since some directories may exist in one but not the other, we must
35*8d730cfbSDavid Woodhouse# use '-include'.
36*8d730cfbSDavid WoodhouseGENASM := 1
37*8d730cfbSDavid Woodhousearchasm	   := $(subst include/asm,asm-$(ARCH),$(obj))
38*8d730cfbSDavid Woodhousealtarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj))
39*8d730cfbSDavid Woodhouse-include $(srctree)/include/$(archasm)/Kbuild
40*8d730cfbSDavid Woodhouse-include $(srctree)/include/$(altarchasm)/Kbuild
41*8d730cfbSDavid Woodhouseelse
42*8d730cfbSDavid Woodhouseinclude $(srctree)/$(obj)/Kbuild
43*8d730cfbSDavid Woodhouseendif
44*8d730cfbSDavid Woodhouse
45*8d730cfbSDavid Woodhouseinclude scripts/Kbuild.include
46*8d730cfbSDavid Woodhouse
47*8d730cfbSDavid Woodhouse# If this is include/asm-$(ARCH) and there's no $(ALTARCH), then
48*8d730cfbSDavid Woodhouse# override $(_dst) so that we install to include/asm directly.
49*8d730cfbSDavid Woodhouseifeq ($(obj)$(ALTARCH),include/asm-$(ARCH))
50*8d730cfbSDavid Woodhouse     _dst := include/asm
51*8d730cfbSDavid Woodhouseendif
52*8d730cfbSDavid Woodhouse
53*8d730cfbSDavid Woodhouseheader-y	:= $(sort $(header-y))
54*8d730cfbSDavid Woodhouseunifdef-y	:= $(sort $(unifdef-y))
55*8d730cfbSDavid Woodhousesubdir-y	:= $(patsubst %/,%,$(filter %/, $(header-y)))
56*8d730cfbSDavid Woodhouseheader-y	:= $(filter-out %/, $(header-y))
57*8d730cfbSDavid Woodhouseheader-y	:= $(filter-out $(unifdef-y),$(header-y))
58*8d730cfbSDavid Woodhouse
59*8d730cfbSDavid Woodhouseifdef ALTARCH
60*8d730cfbSDavid Woodhouseifeq ($(obj),include/asm-$(ARCH))
61*8d730cfbSDavid Woodhousealtarch-y	:= altarch-dir
62*8d730cfbSDavid Woodhouseendif
63*8d730cfbSDavid Woodhouseendif
64*8d730cfbSDavid Woodhouse
65*8d730cfbSDavid Woodhouse# Make the definitions visible for recursive make invocations
66*8d730cfbSDavid Woodhouseexport ALTARCH
67*8d730cfbSDavid Woodhouseexport ARCHDEF
68*8d730cfbSDavid Woodhouseexport ALTARCHDEF
69*8d730cfbSDavid Woodhouse
70*8d730cfbSDavid Woodhousequiet_cmd_o_hdr_install   = INSTALL $(_dst)/$@
71*8d730cfbSDavid Woodhouse      cmd_o_hdr_install   = cp $(objtree)/$(obj)/$@ $(INSTALL_HDR_PATH)/$(_dst)
72*8d730cfbSDavid Woodhouse
73*8d730cfbSDavid Woodhousequiet_cmd_headers_install = INSTALL $(_dst)/$@
74*8d730cfbSDavid Woodhouse      cmd_headers_install = $(HDRSED) $(srctree)/$(obj)/$@		\
75*8d730cfbSDavid Woodhouse			    > $(INSTALL_HDR_PATH)/$(_dst)/$@
76*8d730cfbSDavid Woodhouse
77*8d730cfbSDavid Woodhousequiet_cmd_unifdef	  = UNIFDEF $(_dst)/$@
78*8d730cfbSDavid Woodhouse      cmd_unifdef	  = $(UNIFDEF) $(srctree)/$(obj)/$@ | $(HDRSED)	\
79*8d730cfbSDavid Woodhouse                            > $(INSTALL_HDR_PATH)/$(_dst)/$@ || :
80*8d730cfbSDavid Woodhouse
81*8d730cfbSDavid Woodhousequiet_cmd_mkdir		  = MKDIR   $@
82*8d730cfbSDavid Woodhouse      cmd_mkdir		  = mkdir -p $(INSTALL_HDR_PATH)/$@
83*8d730cfbSDavid Woodhouse
84*8d730cfbSDavid Woodhousequiet_cmd_gen		  = GEN     $(_dst)/$@
85*8d730cfbSDavid Woodhouse      cmd_gen		  = \
86*8d730cfbSDavid WoodhouseSTUBDEF=__ASM_STUB_`echo $@ | tr a-z. A-Z_`;				\
87*8d730cfbSDavid Woodhouse(echo "/* File autogenerated by 'make headers_install' */" ;		\
88*8d730cfbSDavid Woodhouseecho "\#ifndef $$STUBDEF" ;						\
89*8d730cfbSDavid Woodhouseecho "\#define $$STUBDEF" ;						\
90*8d730cfbSDavid Woodhouseecho "\# if $(ARCHDEF)" ;						\
91*8d730cfbSDavid Woodhouseif [ -r $(srctree)/include/$(archasm)/$@ ]; then			\
92*8d730cfbSDavid Woodhouse	echo "\#  include <$(archasm)/$@>" ;				\
93*8d730cfbSDavid Woodhouseelse									\
94*8d730cfbSDavid Woodhouse	echo "\#  error $(archasm)/$@ does not exist in"		\
95*8d730cfbSDavid Woodhouse			"the $(ARCH) architecture" ;			\
96*8d730cfbSDavid Woodhousefi ;									\
97*8d730cfbSDavid Woodhouseecho "\# elif $(ALTARCHDEF)" ;						\
98*8d730cfbSDavid Woodhouseif [ -r $(srctree)/include/$(altarchasm)/$@ ]; then			\
99*8d730cfbSDavid Woodhouse	echo "\#  include <$(altarchasm)/$@>" ;				\
100*8d730cfbSDavid Woodhouseelse									\
101*8d730cfbSDavid Woodhouse	echo "\#  error $(altarchasm)/$@ does not exist in"		\
102*8d730cfbSDavid Woodhouse			"the $(ALTARCH) architecture" ;			\
103*8d730cfbSDavid Woodhousefi ;									\
104*8d730cfbSDavid Woodhouseecho "\# else" ;							\
105*8d730cfbSDavid Woodhouseecho "\#  warning This machine appears to be"				\
106*8d730cfbSDavid Woodhouse		 "neither $(ARCH) nor $(ALTARCH)." ;			\
107*8d730cfbSDavid Woodhouseecho "\# endif" ;							\
108*8d730cfbSDavid Woodhouseecho "\#endif /* $$STUBDEF */" ;					\
109*8d730cfbSDavid Woodhouse) > $(INSTALL_HDR_PATH)/$(_dst)/$@
110*8d730cfbSDavid Woodhouse
111*8d730cfbSDavid Woodhouse__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y)
112*8d730cfbSDavid Woodhouse
113*8d730cfbSDavid Woodhouse.PHONY: $(header-y) $(unifdef-y) $(subdir-y)
114*8d730cfbSDavid Woodhouse
115*8d730cfbSDavid Woodhouse# Rules for installing headers
116*8d730cfbSDavid Woodhouse
117*8d730cfbSDavid Woodhouse$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): $(_dst)
118*8d730cfbSDavid Woodhouse
119*8d730cfbSDavid Woodhouse.PHONY: $(_dst)
120*8d730cfbSDavid Woodhouse$(_dst):
121*8d730cfbSDavid Woodhouse	$(call cmd,mkdir)
122*8d730cfbSDavid Woodhouse
123*8d730cfbSDavid Woodhouseifdef GENASM
124*8d730cfbSDavid Woodhouse$(objhdr-y) $(header-y) $(unifdef-y):
125*8d730cfbSDavid Woodhouse	$(call cmd,gen)
126*8d730cfbSDavid Woodhouse
127*8d730cfbSDavid Woodhouseelse
128*8d730cfbSDavid Woodhouse$(objhdr-y):
129*8d730cfbSDavid Woodhouse	$(call cmd,o_hdr_install)
130*8d730cfbSDavid Woodhouse
131*8d730cfbSDavid Woodhouse$(header-y):
132*8d730cfbSDavid Woodhouse	$(call cmd,headers_install)
133*8d730cfbSDavid Woodhouse
134*8d730cfbSDavid Woodhouse$(unifdef-y):
135*8d730cfbSDavid Woodhouse	$(call cmd,unifdef)
136*8d730cfbSDavid Woodhouseendif
137*8d730cfbSDavid Woodhouse
138*8d730cfbSDavid Woodhousehdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj
139*8d730cfbSDavid Woodhouse
140*8d730cfbSDavid Woodhouse.PHONY: altarch-dir
141*8d730cfbSDavid Woodhousealtarch-dir:
142*8d730cfbSDavid Woodhouse	$(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH)
143*8d730cfbSDavid Woodhouse	$(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm
144*8d730cfbSDavid Woodhouse
145*8d730cfbSDavid Woodhouse# Recursion
146*8d730cfbSDavid Woodhouse$(subdir-y):
147*8d730cfbSDavid Woodhouse	$(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel)
148