| # |
| # kbuild file for generating syscall stubs |
| # |
| |
| # Include automatically generated Makefile fragment. |
| # It contains definition of syscall-objs specifying name of all .o files |
| ifeq ($(clean),) |
| -include $(obj)/syscalls.mk |
| endif |
| |
| # Listing of all .o files |
| always := syscalls.list |
| |
| |
| ##### |
| # Generate syscalls stubs |
| # Based on list in SYSCALLS.def generate stubs for sys calls. Actual arch code |
| # is defined in an arch specific perl file |
| targets += syscalls.mk |
| targets += syscalls.list |
| targets += SYSCALLS.i syscalls.nrs |
| targets += $(syscall-objs) |
| |
| # Side effect of running syscalls.pl |
| clean-files += $(objtree)/$(KLIBCINC)/klibc/havesyscall.h |
| clean-files += $(KLIBCINC)/klibc/havesyscall.h |
| # All the syscall stubs |
| clean-files += *.o *.S *.c *.list |
| |
| quiet_cmd_makelist = LIST $@ |
| cmd_makelist = echo '$(filter-out FORCE,$^)' > $@ |
| |
| # Create list of all files |
| $(obj)/syscalls.list: $(call objectify,$(syscall-objs)) FORCE |
| $(call if_changed,makelist) |
| |
| # Generate assembler file (.i) |
| # We pass -ansi to keep cpp from define e.g. "i386" as well as "__i386__" |
| quiet_cmd_syscall.i = GEN $@ |
| cmd_syscall.i = $(KLIBCCC) $(klibccflags) -D__ASSEMBLY__ \ |
| -ansi -x c++ -E -o $@ $< |
| $(obj)/SYSCALLS.i: $(KLIBCSRC)/SYSCALLS.def FORCE |
| $(call if_changed_dep,syscall.i) |
| |
| # Get syscalls numbers |
| quiet_cmd_syscall.nrs = GEN $@ |
| cmd_syscall.nrs = $(KLIBCCC) $(klibccflags) -Wp,-dM -x c -E -o $@ $< |
| $(obj)/syscalls.nrs: $(KLIBCINC)/sys/syscall.h FORCE |
| $(call if_changed_dep,syscall.nrs) |
| |
| # Generate $(KLIBINC)/klibc/havesyscall.h + makefile fragment |
| # Using sysstub.pl in arch dir generate all .S files |
| quiet_cmd_syscalls = GEN $@ |
| cmd_syscalls = mkdir -p $(KLIBCINC)/klibc/; \ |
| $(PERL) $(KLIBCSRC)/syscalls.pl $(obj)/SYSCALLS.i \ |
| $(KLIBCSRC)/arch/$(KLIBCARCHDIR)/sysstub.ph \ |
| $(KLIBCARCH) $(KLIBCBITSIZE) $(obj)/syscalls.nrs \ |
| $(obj) \ |
| $(KLIBCINC)/klibc/havesyscall.h > $@ \ |
| || rm -f $@ |
| |
| $(obj)/syscalls.mk: $(KLIBCSRC)/syscalls.pl $(obj)/SYSCALLS.i \ |
| $(KLIBCSRC)/arch/$(KLIBCARCHDIR)/sysstub.ph \ |
| $(call objectify, $(syscall-objs:.o=.S)) \ |
| $(KLIBCSRC)/syscommon.h $(obj)/syscalls.nrs |
| $(call cmd,syscalls) |