diff options
Diffstat (limited to 'scripts/Makefile.headersinst')
| -rw-r--r-- | scripts/Makefile.headersinst | 230 |
1 files changed, 67 insertions, 163 deletions
diff --git a/scripts/Makefile.headersinst b/scripts/Makefile.headersinst index 53dae3eb3d1f..612dc13ddd85 100644 --- a/scripts/Makefile.headersinst +++ b/scripts/Makefile.headersinst | |||
| @@ -1,194 +1,98 @@ | |||
| 1 | # ========================================================================== | 1 | # ========================================================================== |
| 2 | # Installing headers | 2 | # Installing headers |
| 3 | # | 3 | # |
| 4 | # header-y files will be installed verbatim | 4 | # header-y - list files to be installed. They are preprocessed |
| 5 | # unifdef-y are the files where unifdef will be run before installing files | 5 | # to remove __KERNEL__ section of the file |
| 6 | # objhdr-y are generated files that will be installed verbatim | 6 | # unifdef-y - Same as header-y. Obsolete |
| 7 | # objhdr-y - Same as header-y but for generated files | ||
| 7 | # | 8 | # |
| 8 | # ========================================================================== | 9 | # ========================================================================== |
| 9 | 10 | ||
| 10 | UNIFDEF := scripts/unifdef -U__KERNEL__ | 11 | # called may set destination dir (when installing to asm/) |
| 11 | |||
| 12 | # Eliminate the contents of (and inclusions of) compiler.h | ||
| 13 | HDRSED := 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)) | 12 | _dst := $(if $(dst),$(dst),$(obj)) |
| 25 | 13 | ||
| 26 | ifeq (,$(patsubst include/asm/%,,$(obj)/)) | 14 | kbuild-file := $(srctree)/$(obj)/Kbuild |
| 27 | # For producing the generated stuff in include/asm for biarch builds, include | 15 | include $(kbuild-file) |
| 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...). | ||
| 32 | GENASM := 1 | ||
| 33 | archasm := $(subst include/asm,asm-$(ARCH),$(obj)) | ||
| 34 | altarchasm := $(subst include/asm,asm-$(ALTARCH),$(obj)) | ||
| 35 | KBUILDFILES := $(wildcard $(srctree)/include/$(archasm)/Kbuild $(srctree)/include/$(altarchasm)/Kbuild) | ||
| 36 | else | ||
| 37 | KBUILDFILES := $(srctree)/$(obj)/Kbuild | ||
| 38 | endif | ||
| 39 | 16 | ||
| 40 | include $(KBUILDFILES) | 17 | include scripts/Kbuild.include |
| 41 | 18 | ||
| 42 | include scripts/Kbuild.include | 19 | install := $(INSTALL_HDR_PATH)/$(_dst) |
| 43 | 20 | ||
| 44 | # If this is include/asm-$(ARCH) and there's no $(ALTARCH), then | 21 | header-y := $(sort $(header-y) $(unifdef-y)) |
| 45 | # override $(_dst) so that we install to include/asm directly. | 22 | subdirs := $(patsubst %/,%,$(filter %/, $(header-y))) |
| 46 | # Unless $(BIASMDIR) is set, in which case we're probably doing | 23 | header-y := $(filter-out %/, $(header-y)) |
| 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 | _dst := include/asm | ||
| 51 | endif | ||
| 52 | 24 | ||
| 53 | header-y := $(sort $(header-y)) | 25 | # files used to track state of install/check |
| 54 | unifdef-y := $(sort $(unifdef-y)) | 26 | install-file := $(install)/.install |
| 55 | subdir-y := $(patsubst %/,%,$(filter %/, $(header-y))) | 27 | check-file := $(install)/.check |
| 56 | header-y := $(filter-out %/, $(header-y)) | ||
| 57 | header-y := $(filter-out $(unifdef-y),$(header-y)) | ||
| 58 | 28 | ||
| 59 | # stamp files for header checks | 29 | # all headers files for this dir |
| 60 | check-y := $(patsubst %,.check.%,$(header-y) $(unifdef-y) $(objhdr-y)) | 30 | all-files := $(header-y) $(objhdr-y) |
| 31 | input-files := $(addprefix $(srctree)/$(obj)/,$(header-y)) \ | ||
| 32 | $(addprefix $(objtree)/$(obj)/,$(objhdr-y)) | ||
| 33 | output-files := $(addprefix $(install)/, $(all-files)) | ||
| 61 | 34 | ||
| 62 | # Work out what needs to be removed | 35 | # Work out what needs to be removed |
| 63 | oldheaders := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/*.h)) | 36 | oldheaders := $(patsubst $(install)/%,%,$(wildcard $(install)/*.h)) |
| 64 | unwanted := $(filter-out $(header-y) $(unifdef-y) $(objhdr-y),$(oldheaders)) | 37 | unwanted := $(filter-out $(all-files),$(oldheaders)) |
| 65 | 38 | ||
| 66 | oldcheckstamps := $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$(wildcard $(INSTALL_HDR_PATH)/$(_dst)/.check.*.h)) | 39 | # Prefix unwanted with full paths to $(INSTALL_HDR_PATH) |
| 67 | unwanted += $(filter-out $(check-y),$(oldcheckstamps)) | 40 | unwanted-file := $(addprefix $(install)/, $(unwanted)) |
| 68 | 41 | ||
| 69 | # Prefix them all with full paths to $(INSTALL_HDR_PATH) | 42 | printdir = $(patsubst $(INSTALL_HDR_PATH)/%/,%,$(dir $@)) |
| 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 | 43 | ||
| 44 | quiet_cmd_install = INSTALL $(printdir) ($(words $(all-files))\ | ||
| 45 | file$(if $(word 2, $(all-files)),s)) | ||
| 46 | cmd_install = \ | ||
| 47 | $(PERL) $< $(srctree)/$(obj) $(install) $(SRCARCH) $(header-y); \ | ||
| 48 | $(PERL) $< $(objtree)/$(obj) $(install) $(SRCARCH) $(objhdr-y); \ | ||
| 49 | touch $@ | ||
| 75 | 50 | ||
| 76 | ifdef ALTARCH | 51 | quiet_cmd_remove = REMOVE $(unwanted) |
| 77 | ifeq ($(obj),include/asm-$(ARCH)) | 52 | cmd_remove = rm -f $(unwanted-file) |
| 78 | altarch-y := altarch-dir | ||
| 79 | endif | ||
| 80 | endif | ||
| 81 | 53 | ||
| 82 | # Make the definitions visible for recursive make invocations | 54 | quiet_cmd_check = CHECK $(printdir) ($(words $(all-files)) files) |
| 83 | export ALTARCH | 55 | cmd_check = $(PERL) $< $(INSTALL_HDR_PATH)/include $(SRCARCH) \ |
| 84 | export ARCHDEF | 56 | $(addprefix $(install)/, $(all-files)); \ |
| 85 | export ALTARCHDEF | 57 | touch $@ |
| 86 | |||
| 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) | ||
| 90 | |||
| 91 | quiet_cmd_headers_install = INSTALL $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | ||
| 92 | cmd_headers_install = $(HDRSED) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ | ||
| 93 | > $@ | ||
| 94 | |||
| 95 | quiet_cmd_unifdef = UNIFDEF $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | ||
| 96 | cmd_unifdef = $(UNIFDEF) $(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,$(srctree)/$(obj)/%,$@) \ | ||
| 97 | | $(HDRSED) > $@ || : | ||
| 98 | |||
| 99 | quiet_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 | |||
| 103 | quiet_cmd_remove = REMOVE $(_dst)/$@ | ||
| 104 | cmd_remove = rm -f $(INSTALL_HDR_PATH)/$(_dst)/$@ | ||
| 105 | |||
| 106 | quiet_cmd_mkdir = MKDIR $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | ||
| 107 | cmd_mkdir = mkdir -p $@ | ||
| 108 | |||
| 109 | quiet_cmd_gen = GEN $(patsubst $(INSTALL_HDR_PATH)/%,%,$@) | ||
| 110 | cmd_gen = \ | ||
| 111 | FNAME=$(patsubst $(INSTALL_HDR_PATH)/$(_dst)/%,%,$@); \ | ||
| 112 | STUBDEF=__ASM_STUB_`echo $$FNAME | tr a-z.- A-Z__`; \ | ||
| 113 | (echo "/* File autogenerated by 'make headers_install' */" ; \ | ||
| 114 | echo "\#ifndef $$STUBDEF" ; \ | ||
| 115 | echo "\#define $$STUBDEF" ; \ | ||
| 116 | echo "\# if $(ARCHDEF)" ; \ | ||
| 117 | if [ -r $(subst /$(_dst)/,/include/$(archasm)/,$@) ]; then \ | ||
| 118 | echo "\# include <$(archasm)/$$FNAME>" ; \ | ||
| 119 | else \ | ||
| 120 | echo "\# error $(archasm)/$$FNAME does not exist in" \ | ||
| 121 | "the $(ARCH) architecture" ; \ | ||
| 122 | fi ; \ | ||
| 123 | echo "\# elif $(ALTARCHDEF)" ; \ | ||
| 124 | if [ -r $(subst /$(_dst)/,/include/$(altarchasm)/,$@) ]; then \ | ||
| 125 | echo "\# include <$(altarchasm)/$$FNAME>" ; \ | ||
| 126 | else \ | ||
| 127 | echo "\# error $(altarchasm)/$$FNAME does not exist in" \ | ||
| 128 | "the $(ALTARCH) architecture" ; \ | ||
| 129 | fi ; \ | ||
| 130 | echo "\# else" ; \ | ||
| 131 | echo "\# warning This machine appears to be" \ | ||
| 132 | "neither $(ARCH) nor $(ALTARCH)." ; \ | ||
| 133 | echo "\# endif" ; \ | ||
| 134 | echo "\#endif /* $$STUBDEF */" ; \ | ||
| 135 | ) > $@ | ||
| 136 | |||
| 137 | .PHONY: __headersinst __headerscheck | ||
| 138 | |||
| 139 | ifdef 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) | ||
| 147 | include /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 | 58 | ||
| 152 | else | 59 | PHONY += __headersinst __headerscheck |
| 153 | # Rules for installing headers | ||
| 154 | __headersinst: $(subdir-y) $(header-y) $(unifdef-y) $(altarch-y) $(objhdr-y) | ||
| 155 | @true | ||
| 156 | 60 | ||
| 157 | $(objhdr-y) $(subdir-y) $(header-y) $(unifdef-y): | $(INSTALL_HDR_PATH)/$(_dst) $(unwanted) | 61 | ifndef HDRCHECK |
| 158 | 62 | # Rules for installing headers | |
| 159 | $(INSTALL_HDR_PATH)/$(_dst): | 63 | __headersinst: $(subdirs) $(install-file) |
| 160 | $(call cmd,mkdir) | 64 | @: |
| 161 | |||
| 162 | .PHONY: $(unwanted) | ||
| 163 | $(unwanted): | ||
| 164 | $(call cmd,remove) | ||
| 165 | 65 | ||
| 166 | ifdef GENASM | 66 | targets += $(install-file) |
| 167 | $(objhdr-y) $(header-y) $(unifdef-y): $(KBUILDFILES) | 67 | $(install-file): scripts/headers_install.pl $(input-files) FORCE |
| 168 | $(call cmd,gen) | 68 | $(if $(unwanted),$(call cmd,remove),) |
| 69 | $(if $(wildcard $(dir $@)),,$(shell mkdir -p $(dir $@))) | ||
| 70 | $(call if_changed,install) | ||
| 169 | 71 | ||
| 170 | else | 72 | else |
| 171 | $(objhdr-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(objtree)/$(obj)/%.h $(KBUILDFILES) | 73 | __headerscheck: $(subdirs) $(check-file) |
| 172 | $(call cmd,o_hdr_install) | 74 | @: |
| 173 | 75 | ||
| 174 | $(header-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) | 76 | targets += $(check-file) |
| 175 | $(call cmd,headers_install) | 77 | $(check-file): scripts/headers_check.pl $(output-files) FORCE |
| 78 | $(call if_changed,check) | ||
| 176 | 79 | ||
| 177 | $(unifdef-y) : $(INSTALL_HDR_PATH)/$(_dst)/%.h: $(srctree)/$(obj)/%.h $(KBUILDFILES) | ||
| 178 | $(call cmd,unifdef) | ||
| 179 | endif | ||
| 180 | endif | 80 | endif |
| 181 | 81 | ||
| 182 | hdrinst := -rR -f $(srctree)/scripts/Makefile.headersinst obj | 82 | # Recursion |
| 83 | hdr-inst := -rR -f $(srctree)/scripts/Makefile.headersinst obj | ||
| 84 | .PHONY: $(subdirs) | ||
| 85 | $(subdirs): | ||
| 86 | $(Q)$(MAKE) $(hdr-inst)=$(obj)/$@ dst=$(_dst)/$@ | ||
| 183 | 87 | ||
| 184 | .PHONY: altarch-dir | 88 | targets := $(wildcard $(sort $(targets))) |
| 185 | # All the files in the normal arch dir must be created first, since we test | 89 | cmd_files := $(wildcard \ |
| 186 | # for their existence. | 90 | $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd)) |
| 187 | altarch-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 | 91 | ||
| 191 | # Recursion | 92 | ifneq ($(cmd_files),) |
| 192 | .PHONY: $(subdir-y) | 93 | include $(cmd_files) |
| 193 | $(subdir-y): | 94 | endif |
| 194 | $(Q)$(MAKE) $(hdrinst)=$(obj)/$@ dst=$(_dst)/$@ rel=../$(rel) | 95 | |
| 96 | .PHONY: $(PHONY) | ||
| 97 | PHONY += FORCE | ||
| 98 | FORCE: ; | ||
