#
# Generate socket calls based on SOCKETCALLS.def
#

# Include automatically generated Makefile fragment.
# It contains definition of socketcall-objs specifying name of all .o files
ifeq ($(clean),)
-include $(obj)/socketcalls.mk
endif

# Listing of all .o files
always := klib.list

#####
# Generate socket calls stubs
# Based on input from SOCKETCALLS.def generate socket call stubs
targets     := klib.list
targets     += socketcalls.mk
targets	    += SOCKETCALLS.i
targets     += $(socketcall-objs)
clean-files += *.S *.c *.o *.list

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,$(socketcall-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_socketcall.i = GEN     $@
      cmd_socketcall.i = $(KLIBCCC) $(klibccflags) -D__ASSEMBLY__ \
                                -ansi -x c -E -o $@ $<
$(obj)/SOCKETCALLS.i: $(KLIBCSRC)/SOCKETCALLS.def FORCE
	$(call if_changed_dep,socketcall.i)

# Generate socketcall stubs
quiet_cmd_socketcalls = GEN     $@
      cmd_socketcalls = $(PERL) $(srctree)/$(KLIBCSRC)/socketcalls.pl      \
                                $(obj)/SOCKETCALLS.i                       \
                                $(KLIBCARCH) $(obj) > $@                   \
                                || ( rm -f $@ ; exit 1 )

$(obj)/socketcalls.mk: $(srctree)/$(KLIBCSRC)/socketcalls.pl        \
                       $(obj)/SOCKETCALLS.i                         \
                       $(src)/socketcommon.h
	$(call cmd,socketcalls)

PHONY += FORCE
