# 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 := $(shell test -d $(obj) && find $(obj) -name *.h)
unwanted    := $(filter-out $(generic-y) $(generated-y) $(syscall-y),$(old-headers))

filechk_wrap = echo "\#include <asm-generic/$*.h>"

quiet_cmd_remove = REMOVE  $(unwanted)
      cmd_remove = rm -f $(unwanted); find $(obj) -type d -empty -delete

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 FORCE
	$(call filechk,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)
