# SPDX-License-Identifier: GPL-2.0
# This Makefile generates headers in
# tools/perf/arch/$(SRCARCH)/include/generated/asm from the architecture's
# syscall table. This will either be from the generic syscall table, or from a
# table that is specific to that architecture.

PHONY := all
all:

obj := $(OUTPUT)arch/$(SRCARCH)/include/generated/asm

syscall_abis_32  := common,32
syscall_abis_64  := common,64
syscalltbl := $(srctree)/tools/scripts/syscall.tbl

# let architectures override $(syscall_abis_%) and $(syscalltbl)
-include $(srctree)/tools/perf/arch/$(SRCARCH)/entry/syscalls/Makefile.syscalls
include $(srctree)/tools/build/Build.include
-include $(srctree)/tools/perf/arch/$(SRCARCH)/entry/syscalls/Kbuild

systbl := $(srctree)/tools/perf/scripts/syscalltbl.sh

syscall-y   := $(addprefix $(obj)/, $(syscall-y))

# Remove stale wrappers when the corresponding files are removed from generic-y
old-headers := $(wildcard $(obj)/*.h)
unwanted    := $(filter-out $(syscall-y),$(old-headers))

quiet_cmd_remove = REMOVE  $(unwanted)
      cmd_remove = rm -f $(unwanted)

quiet_cmd_systbl = SYSTBL  $@
      cmd_systbl = $(CONFIG_SHELL) $(systbl) \
		   $(if $(systbl-args-$*),$(systbl-args-$*),$(systbl-args)) \
		   --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
		   $< $@

all: $(syscall-y)
	$(if $(unwanted),$(call cmd,remove))
	@:

$(obj)/syscalls_%.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)
