Makefile.asm-headers 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # SPDX-License-Identifier: GPL-2.0
  2. # include/asm-generic contains a lot of files that are used
  3. # verbatim by several architectures.
  4. #
  5. # This Makefile generates arch/$(SRCARCH)/include/generated/(uapi/)/asm
  6. # headers from multiple sources:
  7. # - a small wrapper to include the corresponding asm-generic/*.h
  8. # is generated for each file listed as generic-y
  9. # - uapi/asm/unistd_*.h files listed as syscalls-y are generated from
  10. # syscall.tbl with the __NR_* macros
  11. # - Corresponding asm/syscall_table_*.h are generated from the same input
  12. PHONY := all
  13. all:
  14. src := $(srctree)/$(subst /generated,,$(obj))
  15. syscall_abis_32 += common,32
  16. syscall_abis_64 += common,64
  17. syscalltbl := $(srctree)/scripts/syscall.tbl
  18. syshdr-args := --emit-nr
  19. # let architectures override $(syscall_abis_%) and $(syscalltbl)
  20. -include $(srctree)/arch/$(SRCARCH)/kernel/Makefile.syscalls
  21. include $(srctree)/scripts/Kbuild.include
  22. -include $(kbuild-file)
  23. syshdr := $(srctree)/scripts/syscallhdr.sh
  24. systbl := $(srctree)/scripts/syscalltbl.sh
  25. # $(generic)/Kbuild lists mandatory-y. Exclude um since it is a special case.
  26. ifneq ($(SRCARCH),um)
  27. include $(srctree)/$(generic)/Kbuild
  28. endif
  29. redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y))
  30. redundant += $(foreach f, $(generic-y), $(if $(wildcard $(src)/$(f)),$(f)))
  31. redundant := $(sort $(redundant))
  32. $(if $(redundant),\
  33. $(warning redundant generic-y found in $(src)/Kbuild: $(redundant)))
  34. # If arch does not implement mandatory headers, fallback to asm-generic ones.
  35. mandatory-y := $(filter-out $(generated-y), $(mandatory-y))
  36. generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(src)/$(f)),,$(f)))
  37. generic-y := $(addprefix $(obj)/, $(generic-y))
  38. syscall-y := $(addprefix $(obj)/, $(syscall-y))
  39. generated-y := $(addprefix $(obj)/, $(generated-y))
  40. # Remove stale wrappers when the corresponding files are removed from generic-y
  41. old-headers := $(wildcard $(obj)/*.h)
  42. unwanted := $(filter-out $(generic-y) $(generated-y) $(syscall-y),$(old-headers))
  43. quiet_cmd_wrap = WRAP $@
  44. cmd_wrap = echo "\#include <asm-generic/$*.h>" > $@
  45. quiet_cmd_remove = REMOVE $(unwanted)
  46. cmd_remove = rm -f $(unwanted)
  47. quiet_cmd_syshdr = SYSHDR $@
  48. cmd_syshdr = $(CONFIG_SHELL) $(syshdr) \
  49. $(if $(syshdr-args-$*),$(syshdr-args-$*),$(syshdr-args)) \
  50. $(if $(syscall_compat),--prefix "compat$*_") \
  51. --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
  52. $< $@
  53. quiet_cmd_systbl = SYSTBL $@
  54. cmd_systbl = $(CONFIG_SHELL) $(systbl) \
  55. $(if $(systbl-args-$*),$(systbl-args-$*),$(systbl-args)) \
  56. --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
  57. $< $@
  58. all: $(generic-y) $(syscall-y)
  59. $(if $(unwanted),$(call cmd,remove))
  60. @:
  61. $(obj)/%.h: $(srctree)/$(generic)/%.h
  62. $(call cmd,wrap)
  63. $(obj)/unistd_%.h: $(syscalltbl) $(syshdr) FORCE
  64. $(call if_changed,syshdr)
  65. $(obj)/unistd_compat_%.h: syscall_compat:=1
  66. $(obj)/unistd_compat_%.h: $(syscalltbl) $(syshdr) FORCE
  67. $(call if_changed,syshdr)
  68. $(obj)/syscall_table_%.h: $(syscalltbl) $(systbl) FORCE
  69. $(call if_changed,systbl)
  70. targets := $(syscall-y)
  71. # Create output directory. Skip it if at least one old header exists
  72. # since we know the output directory already exists.
  73. ifeq ($(old-headers),)
  74. $(shell mkdir -p $(obj))
  75. endif
  76. PHONY += FORCE
  77. FORCE:
  78. existing-targets := $(wildcard $(sort $(targets)))
  79. -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
  80. .PHONY: $(PHONY)