xref: /linux/scripts/Makefile.headersinst (revision 7ff4f0805eb5056662093b9886a819d2352e188b)
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
23*7ff4f080SMasahiro Yamada# $(filter %/, ...) is a workaround for GNU Make <= 4.2.1, where
24*7ff4f080SMasahiro Yamada# $(wildcard $(src)/*/) contains not only directories but also regular files.
25*7ff4f080SMasahiro Yamadasrc-subdirs := $(patsubst $(src)/%/,%,$(filter %/, $(wildcard $(src)/*/)))
26*7ff4f080SMasahiro Yamadagen-subdirs := $(patsubst $(gen)/%/,%,$(filter %/, $(wildcard $(gen)/*/)))
27d5470d14SMasahiro Yamadaall-subdirs := $(sort $(src-subdirs) $(gen-subdirs))
2805d8cba4SMasahiro Yamada
29d5470d14SMasahiro Yamadasrc-headers := $(if $(src-subdirs), $(shell cd $(src) && find $(src-subdirs) -name '*.h'))
30d5470d14SMasahiro Yamadasrc-headers := $(filter-out $(no-export-headers), $(src-headers))
31d5470d14SMasahiro Yamadagen-headers := $(if $(gen-subdirs), $(shell cd $(gen) && find $(gen-subdirs) -name '*.h'))
32d5470d14SMasahiro Yamadagen-headers := $(filter-out $(no-export-headers), $(gen-headers))
3305d8cba4SMasahiro Yamada
34d5470d14SMasahiro Yamada# If the same header is exported from source and generated directories,
35d5470d14SMasahiro Yamada# the former takes precedence, but this should be warned.
36d5470d14SMasahiro Yamadaduplicated := $(filter $(gen-headers), $(src-headers))
37d5470d14SMasahiro Yamada$(if $(duplicated), $(warning duplicated header export: $(duplicated)))
3805d8cba4SMasahiro Yamada
39d5470d14SMasahiro Yamadagen-headers := $(filter-out $(duplicated), $(gen-headers))
4005d8cba4SMasahiro Yamada
41d5470d14SMasahiro Yamada# Add dst path prefix
42d5470d14SMasahiro Yamadaall-subdirs := $(addprefix $(dst)/, $(all-subdirs))
43d5470d14SMasahiro Yamadasrc-headers := $(addprefix $(dst)/, $(src-headers))
44d5470d14SMasahiro Yamadagen-headers := $(addprefix $(dst)/, $(gen-headers))
45d5470d14SMasahiro Yamadaall-headers := $(src-headers) $(gen-headers)
4610b63956SDavid Howells
47de789125SDavid Woodhouse# Work out what needs to be removed
48d5470d14SMasahiro Yamadaold-subdirs := $(wildcard $(all-subdirs))
49d5470d14SMasahiro Yamadaold-headers := $(if $(old-subdirs),$(shell find $(old-subdirs) -name '*.h'))
50d5470d14SMasahiro Yamadaunwanted    := $(filter-out $(all-headers), $(old-headers))
51de789125SDavid Woodhouse
52d5470d14SMasahiro Yamada# Create directories
53d5470d14SMasahiro Yamadaexisting-dirs := $(sort $(dir $(old-headers)))
54d5470d14SMasahiro Yamadawanted-dirs   := $(sort $(dir $(all-headers)))
55d5470d14SMasahiro Yamadanew-dirs      := $(filter-out $(existing-dirs), $(wanted-dirs))
56d5470d14SMasahiro Yamada$(if $(new-dirs), $(shell mkdir -p $(new-dirs)))
57de789125SDavid Woodhouse
58d5470d14SMasahiro Yamada# Rules
5968475359SDavid Woodhouse
607712401aSSam Ravnborgifndef HDRCHECK
61de789125SDavid Woodhouse
62d5470d14SMasahiro Yamadaquiet_cmd_install = HDRINST $@
63555187a8SMasahiro Yamada      cmd_install = $(CONFIG_SHELL) $(srctree)/scripts/headers_install.sh $< $@
64d5470d14SMasahiro Yamada
65d5470d14SMasahiro Yamada$(src-headers): $(dst)/%.h: $(src)/%.h $(srctree)/scripts/headers_install.sh FORCE
667712401aSSam Ravnborg	$(call if_changed,install)
67de789125SDavid Woodhouse
68d5470d14SMasahiro Yamada$(gen-headers): $(dst)/%.h: $(gen)/%.h $(srctree)/scripts/headers_install.sh FORCE
69d5470d14SMasahiro Yamada	$(call if_changed,install)
70d5470d14SMasahiro Yamada
71d5470d14SMasahiro Yamadaquiet_cmd_remove = REMOVE  $(unwanted)
72d5470d14SMasahiro Yamada      cmd_remove = rm -f $(unwanted)
73d5470d14SMasahiro Yamada
74d5470d14SMasahiro Yamada__headers: $(all-headers)
75d5470d14SMasahiro Yamadaifneq ($(unwanted),)
76d5470d14SMasahiro Yamada	$(call cmd,remove)
77d5470d14SMasahiro Yamadaendif
787712401aSSam Ravnborg	@:
798d730cfbSDavid Woodhouse
80d5470d14SMasahiro Yamadaexisting-headers := $(filter $(old-headers), $(all-headers))
81d5470d14SMasahiro Yamada
82d5470d14SMasahiro Yamada-include $(foreach f,$(existing-headers),$(dir $(f)).$(notdir $(f)).cmd)
83d5470d14SMasahiro Yamada
84d5470d14SMasahiro Yamadaelse
85d5470d14SMasahiro Yamada
86d5470d14SMasahiro Yamadaquiet_cmd_check = HDRCHK  $<
87d5470d14SMasahiro Yamada      cmd_check = $(PERL) $(srctree)/scripts/headers_check.pl $(dst) $(SRCARCH) $<; touch $@
88d5470d14SMasahiro Yamada
89d5470d14SMasahiro Yamadacheck-files := $(addsuffix .chk, $(all-headers))
90d5470d14SMasahiro Yamada
91d5470d14SMasahiro Yamada$(check-files): $(dst)/%.chk : $(dst)/% $(srctree)/scripts/headers_check.pl
92d5470d14SMasahiro Yamada	$(call cmd,check)
93d5470d14SMasahiro Yamada
94d5470d14SMasahiro Yamada__headers: $(check-files)
95d5470d14SMasahiro Yamada	@:
964e420aa9SSam Ravnborg
978d730cfbSDavid Woodhouseendif
988d730cfbSDavid Woodhouse
997712401aSSam RavnborgPHONY += FORCE
100d5470d14SMasahiro YamadaFORCE:
101e474ed45SMasahiro Yamada
102e474ed45SMasahiro Yamada.PHONY: $(PHONY)
103