summaryrefslogtreecommitdiffstats
path: root/scripts/Makefile.headersinst
blob: 12e1daf875c832931202467011e292bcd3575c0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# ==========================================================================
# Installing headers
#
# header-y files will be installed verbatim
# unifdef-y are the files where unifdef will be run before installing files
# objhdr-y are generated files that will be installed verbatim
#
# ==========================================================================

UNIFDEF := unifdef -U__KERNEL__

# Eliminate the contents of (and inclusions of) compiler.h
HDRSED  := sed 	-e "s/ inline / __inline__ /g" \
		-e "s/[[:space:]]__user[[:space:]]\+/ /g" \
		-e "s/(__user[[:space:]]\+/ (/g" \
		-e "s/[[:space:]]__force[[:space:]]\+/ /g" \
		-e "s/(__force[[:space:]]\+/ (/g" \
		-e "s/[[:space:]]__iomem[[:space:]]\+/ /g" \
		-e "s/(__iomem[[:space:]]\+/ (/g" \
		-e "s/[[:space:]]__attribute_const__[[:space:]]\+/\ /g" \
		-e "s/[[:space:]]__attribute_const__$$//" \
		-e "/^\#include <linux\/compiler.h>/d"

_dst := $(if $(dst),$(dst),$(obj))

.PHONY: __headersinst
__headersinst:


ifeq (,$(patsubst include/asm/%,,$(obj)/))
# For producing the generated stuff in include/asm for biarch builds, include
# both sets of Kbuild files; we'll generate anything which is mentioned in
# _either_ arch, and recurse into subdirectories which are mentioned in either
# arch. Since some directories may exist in one but not the other, we must
# use '-include'.
GENASM := 1
archasm	   := $(subst include/asm,asm-$(ARCH),$(obj))
altarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj))
-include $(srctree)/include/$(archasm)/Kbuild
-include $(srctree)/include/$(altarchasm)/Kbuild
else
include $(srctree)/$(obj)/Kbuild
endif

include scripts/Kbuild.include

# If this is include/asm-$(ARCH) and there's no $(ALTARCH), then
# override $(_dst) so that we install to include/asm directly.
ifeq ($(obj)$(ALTARCH),include/asm-$(ARCH))
     _dst := include/asm
endif

header-y	:= $(sort $(header-y))
unifdef-y	:= $(sort $(unifdef-y))
subdir-y	:= $(patsubst %/,%,$(filter %/, $(header-y)))
header-y	:= $(filter-out %/, $(header-y))
header-y	:= $(filter-out $(unifdef-y),$(header-y))

ifdef ALTARCH
ifeq ($(obj),include/asm-$(ARCH))
altarch-y	:= altarch-dir
endif
endif

# Make the definitions visible for recursive make invocations
export ALTARCH
export ARCHDEF
export ALTARCHDEF

quiet_cmd_o_hdr_install   = INSTALL $(_dst)/$@
      cmd_o_hdr_install   = cp $(objtree)/$(obj)/$@ $(INSTALL_HDR_PATH)/$(_dst)

quiet_cmd_headers_install = INSTALL $(_dst)/$@
      cmd_headers_install = $(HDRSED) $(srctree)/$(obj)/$@		\
			    > $(INSTALL_HDR_PATH)/$(_dst)/$@

quiet_cmd_unifdef	  = UNIFDEF $(_dst)/$@
      cmd_unifdef	  = $(UNIFDEF) $(srctree)/$(obj)/$@ | $(HDRSED)	\
                            > $(INSTALL_HDR_PATH)/$(_dst)/$@ || :

quiet_cmd_check		  = CHECK   $(_dst)/$@
      cmd_check		  = $(srctree)/scripts/hdrcheck.sh		\
                              $(INSTALL_HDR_PATH)/include		\
			      $(INSTALL_HDR_PATH)/$(_dst)/$@

quiet_cmd_mkdir		  = MKDIR   $@
      cmd_mkdir		  = mkdir -p $(INSTALL_HDR_PATH)/$@

quiet_cmd_gen		  = GEN     $(_dst)/$@
      cmd_gen		  = \
STUBDEF=__ASM_STUB_`echo $@ | tr a-z. A-Z_`;				\
(echo "/* File autogenerated by 'make headers_install' */" ;		\
echo "\#ifndef $$STUBDEF" ;						\
echo "\#define $$STUBDEF" ;						\
echo "\# if $(ARCHDEF)" ;						\
if [ -r $(INSTALL_HDR_PATH)/include/$(archasm)/$@ ]; then		\
	echo "\#  include <$(archasm)/$@>" ;				\
else									\
	echo "\#  error $(archasm)/$@ does not exist in"		\
			"the $(ARCH) architecture" ;			\
fi ;									\
echo "\# elif $(ALTARCHDEF)" ;						\
if [ -r $(INSTALL_HDR_PATH)/include/$(altarchasm)/$@ ]; then		\
	echo "\#  include <$(altarchasm)/$@>" ;				\
else									\
	echo "\#  error $(altarchasm)/$@ does not exist in"		\
			"the $(ALTARCH) architecture" ;			\
fi ;									\
echo "\# else" ;							\
echo "\#  warning This machine appears to be"				\
		 "neither $(ARCH) nor $(ALTARCH)." ;			\
echo "\# endif" ;							\
echo "\#endif /* $$STUBDEF */" ;					\
) > $(INSTALL_HDR_PATH)/$(_dst)/$@

__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y)

.PHONY: $(header-y) $(unifdef-y) $(subdir-y)

ifdef HDRCHECK
# Rules for checking headers
$(objhdr-y) $(header-y) $(unifdef-y):
	$(call cmd,check)
else
# Rules for installing headers

$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): $(_dst)

.PHONY: $(_dst)
$(_dst):
	$(call cmd,mkdir)

ifdef GENASM
$(objhdr-y) $(header-y) $(unifdef-y):
	$(call cmd,gen)

else
$(objhdr-y):
	$(call cmd,o_hdr_install)

$(header-y):
	$(call cmd,headers_install)

$(unifdef-y):
	$(call cmd,unifdef)
endif
endif

hdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj

.PHONY: altarch-dir
# All the files in the normal arch dir must be created first, since we test
# for their existence.
altarch-dir: $(subdir-y) $(header-y) $(unifdef-y) $(objhdr-y)
	$(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH)
	$(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm

# Recursion
$(subdir-y):
	$(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel)