xref: /linux/scripts/Makefile.headersinst (revision 8be98d2f2a0a262f8bf8a0bc1fdf522b3c7aab17)
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
15*3204a7fbSMasahiro Yamadainclude $(srctree)/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
237ff4f080SMasahiro Yamada# $(filter %/, ...) is a workaround for GNU Make <= 4.2.1, where
247ff4f080SMasahiro Yamada# $(wildcard $(src)/*/) contains not only directories but also regular files.
257ff4f080SMasahiro Yamadasrc-subdirs := $(patsubst $(src)/%/,%,$(filter %/, $(wildcard $(src)/*/)))
267ff4f080SMasahiro 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
59d5470d14SMasahiro Yamadaquiet_cmd_install = HDRINST $@
60555187a8SMasahiro Yamada      cmd_install = $(CONFIG_SHELL) $(srctree)/scripts/headers_install.sh $< $@
61d5470d14SMasahiro Yamada
62d5470d14SMasahiro Yamada$(src-headers): $(dst)/%.h: $(src)/%.h $(srctree)/scripts/headers_install.sh FORCE
637712401aSSam Ravnborg	$(call if_changed,install)
64de789125SDavid Woodhouse
65d5470d14SMasahiro Yamada$(gen-headers): $(dst)/%.h: $(gen)/%.h $(srctree)/scripts/headers_install.sh FORCE
66d5470d14SMasahiro Yamada	$(call if_changed,install)
67d5470d14SMasahiro Yamada
68d5470d14SMasahiro Yamadaquiet_cmd_remove = REMOVE  $(unwanted)
69d5470d14SMasahiro Yamada      cmd_remove = rm -f $(unwanted)
70d5470d14SMasahiro Yamada
71d5470d14SMasahiro Yamada__headers: $(all-headers)
72d5470d14SMasahiro Yamadaifneq ($(unwanted),)
73d5470d14SMasahiro Yamada	$(call cmd,remove)
74d5470d14SMasahiro Yamadaendif
757712401aSSam Ravnborg	@:
768d730cfbSDavid Woodhouse
77d5470d14SMasahiro Yamadaexisting-headers := $(filter $(old-headers), $(all-headers))
78d5470d14SMasahiro Yamada
79d5470d14SMasahiro Yamada-include $(foreach f,$(existing-headers),$(dir $(f)).$(notdir $(f)).cmd)
80d5470d14SMasahiro Yamada
817712401aSSam RavnborgPHONY += FORCE
82d5470d14SMasahiro YamadaFORCE:
83e474ed45SMasahiro Yamada
84e474ed45SMasahiro Yamada.PHONY: $(PHONY)
85