| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- # SPDX-License-Identifier: GPL-2.0
- # include/asm-generic contains a lot of files that are used
- # verbatim by several architectures.
- #
- # This Makefile generates arch/$(SRCARCH)/include/generated/(uapi/)/asm
- # headers from multiple sources:
- # - a small wrapper to include the corresponding asm-generic/*.h
- # is generated for each file listed as generic-y
- # - uapi/asm/unistd_*.h files listed as syscalls-y are generated from
- # syscall.tbl with the __NR_* macros
- # - Corresponding asm/syscall_table_*.h are generated from the same input
- PHONY := all
- all:
- src := $(srctree)/$(subst /generated,,$(obj))
- syscall_abis_32 += common,32
- syscall_abis_64 += common,64
- syscalltbl := $(srctree)/scripts/syscall.tbl
- syshdr-args := --emit-nr
- # let architectures override $(syscall_abis_%) and $(syscalltbl)
- -include $(srctree)/arch/$(SRCARCH)/kernel/Makefile.syscalls
- include $(srctree)/scripts/Kbuild.include
- -include $(kbuild-file)
- syshdr := $(srctree)/scripts/syscallhdr.sh
- systbl := $(srctree)/scripts/syscalltbl.sh
- # $(generic)/Kbuild lists mandatory-y. Exclude um since it is a special case.
- ifneq ($(SRCARCH),um)
- include $(srctree)/$(generic)/Kbuild
- endif
- redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y))
- redundant += $(foreach f, $(generic-y), $(if $(wildcard $(src)/$(f)),$(f)))
- redundant := $(sort $(redundant))
- $(if $(redundant),\
- $(warning redundant generic-y found in $(src)/Kbuild: $(redundant)))
- # If arch does not implement mandatory headers, fallback to asm-generic ones.
- mandatory-y := $(filter-out $(generated-y), $(mandatory-y))
- generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(src)/$(f)),,$(f)))
- generic-y := $(addprefix $(obj)/, $(generic-y))
- syscall-y := $(addprefix $(obj)/, $(syscall-y))
- generated-y := $(addprefix $(obj)/, $(generated-y))
- # Remove stale wrappers when the corresponding files are removed from generic-y
- old-headers := $(wildcard $(obj)/*.h)
- unwanted := $(filter-out $(generic-y) $(generated-y) $(syscall-y),$(old-headers))
- quiet_cmd_wrap = WRAP $@
- cmd_wrap = echo "\#include <asm-generic/$*.h>" > $@
- quiet_cmd_remove = REMOVE $(unwanted)
- cmd_remove = rm -f $(unwanted)
- quiet_cmd_syshdr = SYSHDR $@
- cmd_syshdr = $(CONFIG_SHELL) $(syshdr) \
- $(if $(syshdr-args-$*),$(syshdr-args-$*),$(syshdr-args)) \
- $(if $(syscall_compat),--prefix "compat$*_") \
- --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
- $< $@
- quiet_cmd_systbl = SYSTBL $@
- cmd_systbl = $(CONFIG_SHELL) $(systbl) \
- $(if $(systbl-args-$*),$(systbl-args-$*),$(systbl-args)) \
- --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
- $< $@
- all: $(generic-y) $(syscall-y)
- $(if $(unwanted),$(call cmd,remove))
- @:
- $(obj)/%.h: $(srctree)/$(generic)/%.h
- $(call cmd,wrap)
- $(obj)/unistd_%.h: $(syscalltbl) $(syshdr) FORCE
- $(call if_changed,syshdr)
- $(obj)/unistd_compat_%.h: syscall_compat:=1
- $(obj)/unistd_compat_%.h: $(syscalltbl) $(syshdr) FORCE
- $(call if_changed,syshdr)
- $(obj)/syscall_table_%.h: $(syscalltbl) $(systbl) FORCE
- $(call if_changed,systbl)
- targets := $(syscall-y)
- # Create output directory. Skip it if at least one old header exists
- # since we know the output directory already exists.
- ifeq ($(old-headers),)
- $(shell mkdir -p $(obj))
- endif
- PHONY += FORCE
- FORCE:
- existing-targets := $(wildcard $(sort $(targets)))
- -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
- .PHONY: $(PHONY)
|