xref: /linux/scripts/Makefile.headersinst (revision d5470d14431e9d39ee2131323589afac2a0bfee4)
1b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
28d730cfbSDavid Woodhouse# ==========================================================================
38d730cfbSDavid Woodhouse# Installing headers
48d730cfbSDavid Woodhouse#
5fcc8487dSNicolas Dichtel# All headers under include/uapi, include/generated/uapi,
661562f98SNicolas Dichtel# arch/<arch>/include/uapi and arch/<arch>/include/generated/uapi are
7fcc8487dSNicolas Dichtel# exported.
8fcc8487dSNicolas Dichtel# They are preprocessed to remove __KERNEL__ section of the file.
98d730cfbSDavid Woodhouse#
108d730cfbSDavid Woodhouse# ==========================================================================
118d730cfbSDavid Woodhouse
1205d8cba4SMasahiro YamadaPHONY := __headers
1305d8cba4SMasahiro Yamada__headers:
1405d8cba4SMasahiro Yamada
1505d8cba4SMasahiro Yamadainclude scripts/Kbuild.include
1605d8cba4SMasahiro Yamada
17*d5470d14SMasahiro Yamadasrc := $(srctree)/$(obj)
18*d5470d14SMasahiro Yamadagen := $(objtree)/$(subst include/,include/generated/,$(obj))
19*d5470d14SMasahiro Yamadadst := usr/include
202f263d14SRichard Genoud
21*d5470d14SMasahiro Yamada-include $(src)/Kbuild
222f263d14SRichard Genoud
23*d5470d14SMasahiro Yamadasrc-subdirs := $(patsubst $(src)/%/,%,$(wildcard $(src)/*/))
24*d5470d14SMasahiro Yamadagen-subdirs := $(patsubst $(gen)/%/,%,$(wildcard $(gen)/*/))
25*d5470d14SMasahiro Yamadaall-subdirs := $(sort $(src-subdirs) $(gen-subdirs))
2605d8cba4SMasahiro Yamada
27*d5470d14SMasahiro Yamadasrc-headers := $(if $(src-subdirs), $(shell cd $(src) && find $(src-subdirs) -name '*.h'))
28*d5470d14SMasahiro Yamadasrc-headers := $(filter-out $(no-export-headers), $(src-headers))
29*d5470d14SMasahiro Yamadagen-headers := $(if $(gen-subdirs), $(shell cd $(gen) && find $(gen-subdirs) -name '*.h'))
30*d5470d14SMasahiro Yamadagen-headers := $(filter-out $(no-export-headers), $(gen-headers))
3105d8cba4SMasahiro Yamada
32*d5470d14SMasahiro Yamada# If the same header is exported from source and generated directories,
33*d5470d14SMasahiro Yamada# the former takes precedence, but this should be warned.
34*d5470d14SMasahiro Yamadaduplicated := $(filter $(gen-headers), $(src-headers))
35*d5470d14SMasahiro Yamada$(if $(duplicated), $(warning duplicated header export: $(duplicated)))
3605d8cba4SMasahiro Yamada
37*d5470d14SMasahiro Yamadagen-headers := $(filter-out $(duplicated), $(gen-headers))
3805d8cba4SMasahiro Yamada
39*d5470d14SMasahiro Yamada# Add dst path prefix
40*d5470d14SMasahiro Yamadaall-subdirs := $(addprefix $(dst)/, $(all-subdirs))
41*d5470d14SMasahiro Yamadasrc-headers := $(addprefix $(dst)/, $(src-headers))
42*d5470d14SMasahiro Yamadagen-headers := $(addprefix $(dst)/, $(gen-headers))
43*d5470d14SMasahiro Yamadaall-headers := $(src-headers) $(gen-headers)
4410b63956SDavid Howells
45de789125SDavid Woodhouse# Work out what needs to be removed
46*d5470d14SMasahiro Yamadaold-subdirs := $(wildcard $(all-subdirs))
47*d5470d14SMasahiro Yamadaold-headers := $(if $(old-subdirs),$(shell find $(old-subdirs) -name '*.h'))
48*d5470d14SMasahiro Yamadaunwanted    := $(filter-out $(all-headers), $(old-headers))
49de789125SDavid Woodhouse
50*d5470d14SMasahiro Yamada# Create directories
51*d5470d14SMasahiro Yamadaexisting-dirs := $(sort $(dir $(old-headers)))
52*d5470d14SMasahiro Yamadawanted-dirs   := $(sort $(dir $(all-headers)))
53*d5470d14SMasahiro Yamadanew-dirs      := $(filter-out $(existing-dirs), $(wanted-dirs))
54*d5470d14SMasahiro Yamada$(if $(new-dirs), $(shell mkdir -p $(new-dirs)))
55de789125SDavid Woodhouse
56*d5470d14SMasahiro Yamada# Rules
5768475359SDavid Woodhouse
587712401aSSam Ravnborgifndef HDRCHECK
59de789125SDavid Woodhouse
60*d5470d14SMasahiro Yamadaquiet_cmd_install = HDRINST $@
61*d5470d14SMasahiro Yamada      cmd_install = $(CONFIG_SHELL) $(srctree)/scripts/headers_install.sh $(@D) $(<D) $(@F)
62*d5470d14SMasahiro Yamada
63*d5470d14SMasahiro Yamada$(src-headers): $(dst)/%.h: $(src)/%.h $(srctree)/scripts/headers_install.sh FORCE
647712401aSSam Ravnborg	$(call if_changed,install)
65de789125SDavid Woodhouse
66*d5470d14SMasahiro Yamada$(gen-headers): $(dst)/%.h: $(gen)/%.h $(srctree)/scripts/headers_install.sh FORCE
67*d5470d14SMasahiro Yamada	$(call if_changed,install)
68*d5470d14SMasahiro Yamada
69*d5470d14SMasahiro Yamadaquiet_cmd_remove = REMOVE  $(unwanted)
70*d5470d14SMasahiro Yamada      cmd_remove = rm -f $(unwanted)
71*d5470d14SMasahiro Yamada
72*d5470d14SMasahiro Yamada__headers: $(all-headers)
73*d5470d14SMasahiro Yamadaifneq ($(unwanted),)
74*d5470d14SMasahiro Yamada	$(call cmd,remove)
75*d5470d14SMasahiro Yamadaendif
767712401aSSam Ravnborg	@:
778d730cfbSDavid Woodhouse
78*d5470d14SMasahiro Yamadaexisting-headers := $(filter $(old-headers), $(all-headers))
79*d5470d14SMasahiro Yamada
80*d5470d14SMasahiro Yamada-include $(foreach f,$(existing-headers),$(dir $(f)).$(notdir $(f)).cmd)
81*d5470d14SMasahiro Yamada
82*d5470d14SMasahiro Yamadaelse
83*d5470d14SMasahiro Yamada
84*d5470d14SMasahiro Yamadaquiet_cmd_check = HDRCHK  $<
85*d5470d14SMasahiro Yamada      cmd_check = $(PERL) $(srctree)/scripts/headers_check.pl $(dst) $(SRCARCH) $<; touch $@
86*d5470d14SMasahiro Yamada
87*d5470d14SMasahiro Yamadacheck-files := $(addsuffix .chk, $(all-headers))
88*d5470d14SMasahiro Yamada
89*d5470d14SMasahiro Yamada$(check-files): $(dst)/%.chk : $(dst)/% $(srctree)/scripts/headers_check.pl
90*d5470d14SMasahiro Yamada	$(call cmd,check)
91*d5470d14SMasahiro Yamada
92*d5470d14SMasahiro Yamada__headers: $(check-files)
93*d5470d14SMasahiro Yamada	@:
944e420aa9SSam Ravnborg
958d730cfbSDavid Woodhouseendif
968d730cfbSDavid Woodhouse
977712401aSSam RavnborgPHONY += FORCE
98*d5470d14SMasahiro YamadaFORCE:
99e474ed45SMasahiro Yamada
100e474ed45SMasahiro Yamada.PHONY: $(PHONY)
101