Commit de78912582bc1f95733d53e0d40779c0cd7b0686
1 parent
b4daf69722
Exists in
master
and in
4 other branches
Use dependencies for 'make headers_install'.
Re-export header files only if either they or their controlling Kbuild file has actually changed. Also allow for similar dependencies with 'headers_check', once we properly create the dependencies for those. Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Showing 3 changed files with 81 additions and 46 deletions Side-by-side Diff
Makefile
... | ... | @@ -898,7 +898,6 @@ |
898 | 898 | echo '*** Error: Headers not exportable for this architecture ($(ARCH))'; \ |
899 | 899 | exit 1 ; fi |
900 | 900 | $(Q)unifdef -Ux /dev/null |
901 | - $(Q)rm -rf $(INSTALL_HDR_PATH)/include | |
902 | 901 | $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.headersinst obj=include |
903 | 902 | |
904 | 903 | PHONY += headers_check |
scripts/Makefile.headersinst
... | ... | @@ -23,30 +23,30 @@ |
23 | 23 | |
24 | 24 | _dst := $(if $(dst),$(dst),$(obj)) |
25 | 25 | |
26 | -.PHONY: __headersinst | |
27 | -__headersinst: | |
28 | - | |
29 | - | |
30 | 26 | ifeq (,$(patsubst include/asm/%,,$(obj)/)) |
31 | 27 | # For producing the generated stuff in include/asm for biarch builds, include |
32 | 28 | # both sets of Kbuild files; we'll generate anything which is mentioned in |
33 | 29 | # _either_ arch, and recurse into subdirectories which are mentioned in either |
34 | 30 | # arch. Since some directories may exist in one but not the other, we must |
35 | -# use '-include'. | |
31 | +# use $(wildcard...). | |
36 | 32 | GENASM := 1 |
37 | 33 | archasm := $(subst include/asm,asm-$(ARCH),$(obj)) |
38 | 34 | altarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj)) |
39 | --include $(srctree)/include/$(archasm)/Kbuild | |
40 | --include $(srctree)/include/$(altarchasm)/Kbuild | |
35 | +KBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild) | |
41 | 36 | else |
42 | -include $(srctree)/$(obj)/Kbuild | |
37 | +KBUILDFILES := $(srctree)/$(obj)/Kbuild | |
43 | 38 | endif |
44 | 39 | |
45 | -include scripts/Kbuild.include | |
40 | +include $(KBUILDFILES) | |
46 | 41 | |
42 | +include scripts/Kbuild.include | |
43 | + | |
47 | 44 | # If this is include/asm-$(ARCH) and there's no $(ALTARCH), then |
48 | 45 | # override $(_dst) so that we install to include/asm directly. |
49 | -ifeq ($(obj)$(ALTARCH),include/asm-$(ARCH)) | |
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. | |
49 | +ifeq ($(obj)$(ALTARCH),include/asm-$(ARCH)$(BIASMDIR)) | |
50 | 50 | _dst := include/asm |
51 | 51 | endif |
52 | 52 | |
... | ... | @@ -56,6 +56,23 @@ |
56 | 56 | header-y := $(filter-out %/, $(header-y)) |
57 | 57 | header-y := $(filter-out $(unifdef-y),$(header-y)) |
58 | 58 | |
59 | +# stamp files for header checks | |
60 | +check-y := $(patsubst %,.check.%,$(header-y) $(unifdef-y) $(objhdr-y)) | |
61 | + | |
62 | +# Work out what needs to be removed | |
63 | +oldheaders := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h)) | |
64 | +unwanted := $(filter-out $(header-y) $(unifdef-y) $(objhdr-y),$(oldheaders)) | |
65 | + | |
66 | +oldcheckstamps := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h)) | |
67 | +unwanted += $(filter-out $(check-y),$(oldcheckstamps)) | |
68 | + | |
69 | +# Prefix them all with full paths to $(INSTALL_HDR_PATH) | |
70 | +header-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(header-y)) | |
71 | +unifdef-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(unifdef-y)) | |
72 | +objhdr-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(objhdr-y)) | |
73 | +check-y := $(patsubst %,$(INSTALL_HDR_PATH)/$(_dst)/%,$(check-y)) | |
74 | + | |
75 | + | |
59 | 76 | ifdef ALTARCH |
60 | 77 | ifeq ($(obj),include/asm-$(ARCH)) |
61 | 78 | altarch-y := altarch-dir |
62 | 79 | |
63 | 80 | |
64 | 81 | |
65 | 82 | |
66 | 83 | |
67 | 84 | |
68 | 85 | |
69 | 86 | |
70 | 87 | |
71 | 88 | |
72 | 89 | |
... | ... | @@ -67,43 +84,47 @@ |
67 | 84 | export ARCHDEF |
68 | 85 | export ALTARCHDEF |
69 | 86 | |
70 | -quiet_cmd_o_hdr_install = INSTALL $(_dst)/$@ | |
71 | - cmd_o_hdr_install = cp $(objtree)/$(obj)/$@ $(INSTALL_HDR_PATH)/$(_dst) | |
87 | +quiet_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) | |
72 | 90 | |
73 | -quiet_cmd_headers_install = INSTALL $(_dst)/$@ | |
74 | - cmd_headers_install = $(HDRSED) $(srctree)/$(obj)/$@ \ | |
75 | - > $(INSTALL_HDR_PATH)/$(_dst)/$@ | |
91 | +quiet_cmd_headers_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | |
92 | + cmd_headers_install = $(HDRSED) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ | |
93 | + > $@ | |
76 | 94 | |
77 | -quiet_cmd_unifdef = UNIFDEF $(_dst)/$@ | |
78 | - cmd_unifdef = $(UNIFDEF) $(srctree)/$(obj)/$@ | $(HDRSED) \ | |
79 | - > $(INSTALL_HDR_PATH)/$(_dst)/$@ || : | |
95 | +quiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | |
96 | + cmd_unifdef = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ | |
97 | + | $(HDRSED) > $@ || : | |
80 | 98 | |
81 | -quiet_cmd_check = CHECK $(_dst)/$@ | |
99 | +quiet_cmd_check = CHECK $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/.check.%,$(_dst)/%,$@) | |
82 | 100 | cmd_check = $(srctree)/scripts/hdrcheck.sh \ |
83 | - $(INSTALL_HDR_PATH)/include \ | |
84 | - $(INSTALL_HDR_PATH)/$(_dst)/$@ | |
101 | + $(INSTALL_HDR_PATH)/include $(subst /.check.,/,$@) $@ | |
85 | 102 | |
86 | -quiet_cmd_mkdir = MKDIR $@ | |
87 | - cmd_mkdir = mkdir -p $(INSTALL_HDR_PATH)/$@ | |
103 | +quiet_cmd_remove = REMOVE $(_dst)/$@ | |
104 | + cmd_remove = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@ | |
88 | 105 | |
89 | -quiet_cmd_gen = GEN $(_dst)/$@ | |
106 | +quiet_cmd_mkdir = MKDIR $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | |
107 | + cmd_mkdir = mkdir -p $@ | |
108 | + | |
109 | +quiet_cmd_gen = GEN $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | |
90 | 110 | cmd_gen = \ |
91 | -STUBDEF=__ASM_STUB_`echo $@ | tr a-z. A-Z_`; \ | |
111 | +FNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@) \ | |
112 | +STUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z. A-Z_`; \ | |
92 | 113 | (echo "/* File autogenerated by 'make headers_install' */" ; \ |
93 | 114 | echo "\#ifndef $$STUBDEF" ; \ |
94 | 115 | echo "\#define $$STUBDEF" ; \ |
95 | 116 | echo "\# if $(ARCHDEF)" ; \ |
96 | -if [ -r $(INSTALL_HDR_PATH)/include/$(archasm)/$@ ]; then \ | |
97 | - echo "\# include <$(archasm)/$@>" ; \ | |
117 | +if [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then \ | |
118 | + echo "\# include <$(archasm)/$$FNAME>" ; \ | |
98 | 119 | else \ |
99 | - echo "\# error $(archasm)/$@ does not exist in" \ | |
120 | + echo "\# error $(archasm)/$$FNAME does not exist in" \ | |
100 | 121 | "the $(ARCH) architecture" ; \ |
101 | 122 | fi ; \ |
102 | 123 | echo "\# elif $(ALTARCHDEF)" ; \ |
103 | -if [ -r $(INSTALL_HDR_PATH)/include/$(altarchasm)/$@ ]; then \ | |
104 | - echo "\# include <$(altarchasm)/$@>" ; \ | |
124 | +if [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then \ | |
125 | + echo "\# include <$(altarchasm)/$$FNAME>" ; \ | |
105 | 126 | else \ |
106 | - echo "\# error $(altarchasm)/$@ does not exist in" \ | |
127 | + echo "\# error $(altarchasm)/$$FNAME does not exist in" \ | |
107 | 128 | "the $(ALTARCH) architecture" ; \ |
108 | 129 | fi ; \ |
109 | 130 | echo "\# else" ; \ |
110 | 131 | |
111 | 132 | |
112 | 133 | |
113 | 134 | |
114 | 135 | |
115 | 136 | |
116 | 137 | |
117 | 138 | |
118 | 139 | |
119 | 140 | |
120 | 141 | |
121 | 142 | |
... | ... | @@ -111,37 +132,49 @@ |
111 | 132 | "neither $(ARCH) nor $(ALTARCH)." ; \ |
112 | 133 | echo "\# endif" ; \ |
113 | 134 | echo "\#endif /* $$STUBDEF */" ; \ |
114 | -) > $(INSTALL_HDR_PATH)/$(_dst)/$@ | |
135 | +) > $@ | |
115 | 136 | |
116 | -__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y) | |
137 | +.PHONY: __headersinst __headerscheck | |
117 | 138 | |
118 | -.PHONY: $(header-y) $(unifdef-y) $(subdir-y) | |
119 | - | |
120 | 139 | ifdef HDRCHECK |
121 | -# Rules for checking headers | |
122 | -$(objhdr-y) $(header-y) $(unifdef-y): | |
140 | +__headerscheck: $(subdir-y) $(check-y) | |
141 | + @true | |
142 | + | |
143 | +$(check-y) : $(INSTALL_HDR_PATH)/$(_dst)/.check.%.h : $(INSTALL_HDR_PATH)/$(_dst)/%.h | |
123 | 144 | $(call cmd,check) |
145 | + | |
146 | +# Other dependencies for $(check-y) | |
147 | +-include /dev/null $(check-y) | |
148 | + | |
149 | +# ... but leave $(check-y) as .PHONY for now until those deps are actually correct. | |
150 | +.PHONY: $(check-y) | |
151 | + | |
124 | 152 | else |
125 | 153 | # Rules for installing headers |
154 | +__headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y) | |
155 | + @true | |
126 | 156 | |
127 | -$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): $(_dst) | |
157 | +$(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted) | |
128 | 158 | |
129 | -.PHONY: $(_dst) | |
130 | -$(_dst): | |
159 | +$(INSTALL_HDR_PATH)/$(_dst): | |
131 | 160 | $(call cmd,mkdir) |
132 | 161 | |
162 | +.PHONY: $(unwanted) | |
163 | +$(unwanted): | |
164 | + $(call cmd,remove) | |
165 | + | |
133 | 166 | ifdef GENASM |
134 | -$(objhdr-y) $(header-y) $(unifdef-y): | |
167 | +$(objhdr-y) $(header-y) $(unifdef-y): $(KBUILDFILES) | |
135 | 168 | $(call cmd,gen) |
136 | 169 | |
137 | 170 | else |
138 | -$(objhdr-y): | |
171 | +$(objhdr-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) | |
139 | 172 | $(call cmd,o_hdr_install) |
140 | 173 | |
141 | -$(header-y): | |
174 | +$(header-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) | |
142 | 175 | $(call cmd,headers_install) |
143 | 176 | |
144 | -$(unifdef-y): | |
177 | +$(unifdef-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) | |
145 | 178 | $(call cmd,unifdef) |
146 | 179 | endif |
147 | 180 | endif |
148 | 181 | |
... | ... | @@ -153,9 +186,10 @@ |
153 | 186 | # for their existence. |
154 | 187 | altarch-dir: $(subdir-y) $(header-y) $(unifdef-y) $(objhdr-y) |
155 | 188 | $(Q)$(MAKE) $(hdrinst)=include/asm-$(ALTARCH) dst=include/asm-$(ALTARCH) |
156 | - $(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm | |
189 | + $(Q)$(MAKE) $(hdrinst)=include/asm dst=include/asm$(BIASMDIR) | |
157 | 190 | |
158 | 191 | # Recursion |
192 | +.PHONY: $(subdir-y) | |
159 | 193 | $(subdir-y): |
160 | 194 | $(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel) |
scripts/hdrcheck.sh