blob: 5eb88fa9ffb761cdf0b0aa28079f17c1bd863f05 [file] [log] [blame]
#
# 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