| # |
| # 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 := klib.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 += klib.list |
| targets += SYSCALLS.i syscalls.nrs |
| targets += typesize.c typesize.o typesize.bin |
| 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 *.bin |
| |
| EXTRA_KLIBCCFLAGS := -I$(srctree)/$(src) |
| |
| quiet_cmd_makelist = LIST $@ |
| cmd_makelist = echo '$(filter-out FORCE,$^)' > $@ |
| |
| # Create list of all files |
| $(obj)/klib.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 typesize.c |
| quiet_cmd_syscalsz = GEN $@ |
| cmd_syscalsz = \ |
| mkdir -p $(KLIBCINC)/klibc/; \ |
| $(PERL) $(srctree)/$(KLIBCSRC)/syscalls.pl \ |
| -1 $(obj)/SYSCALLS.i \ |
| $(srctree)/$(KLIBCSRC)/arch/$(KLIBCARCHDIR)/sysstub.ph \ |
| $(KLIBCARCH) $(KLIBCBITSIZE) $(obj)/syscalls.nrs \ |
| $(obj) \ |
| $(KLIBCINC)/klibc/havesyscall.h \ |
| $(obj)/typesize.c > $@ \ |
| || ( rm -f $@ ; exit 1 ) |
| |
| $(obj)/typesize.c: $(srctree)/$(KLIBCSRC)/syscalls.pl $(obj)/SYSCALLS.i \ |
| $(srctree)/$(KLIBCSRC)/arch/$(KLIBCARCHDIR)/sysstub.ph \ |
| $(src)/syscommon.h $(obj)/syscalls.nrs FORCE |
| $(call if_changed,syscalsz) |
| |
| # Convert typesize.o to typesize.bin |
| quiet_cmd_mkbin = OBJCOPY $@ |
| cmd_mkbin = $(KLIBCOBJCOPY) -O binary $< $@ |
| |
| $(obj)/typesize.bin: $(obj)/typesize.o FORCE |
| $(call if_changed,mkbin) |
| |
| # 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) $(srctree)/$(KLIBCSRC)/syscalls.pl -2 $(obj)/SYSCALLS.i \ |
| $(srctree)/$(KLIBCSRC)/arch/$(KLIBCARCHDIR)/sysstub.ph \ |
| $(KLIBCARCH) $(KLIBCBITSIZE) $(obj)/syscalls.nrs \ |
| $(obj) \ |
| $(KLIBCINC)/klibc/havesyscall.h \ |
| $(obj)/typesize.bin > $@ \ |
| || ( rm -f $@ ; exit 1 ) |
| |
| $(obj)/syscalls.mk: $(srctree)/$(KLIBCSRC)/syscalls.pl $(obj)/SYSCALLS.i \ |
| $(srctree)/$(KLIBCSRC)/arch/$(KLIBCARCHDIR)/sysstub.ph \ |
| $(call objectify, $(syscall-objs:.o=.S)) \ |
| $(src)/syscommon.h $(obj)/syscalls.nrs \ |
| $(obj)/typesize.bin FORCE |
| $(call if_changed,syscalls) |
| |
| PHONY += FORCE |