Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | # 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) |