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