# 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)
