#
# Copyright (C) 2011-2012 Michael Tuexen
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of the project nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.	IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#

CFLAGS=/I. /W3

CVARSDLL=-DSCTP_DEBUG -DSCTP_SIMPLE_ALLOCATOR -DSCTP_PROCESS_LEVEL_LOCKS
CVARSDLL=$(CVARSDLL) -D__Userspace__ -D__Userspace_os_Windows
CVARSDLL=$(CVARSDLL) -DINET -DINET6
CVARSDLL=$(CVARSDLL) -D_LIB

LINKFLAGS=/LIBPATH:. Ws2_32.lib

usrsctp_OBJECTS = \
	user_environment.obj \
	user_mbuf.obj \
	user_recv_thread.obj \
	user_sctp_timer_iterate.obj \
	user_socket.obj \
	sctp_asconf.obj \
	sctp_auth.obj \
	sctp_bsd_addr.obj \
	sctp_callout.obj \
	sctp_cc_functions.obj \
	sctp_crc32.obj \
	sctp_indata.obj \
	sctp_input.obj \
	sctp_output.obj \
	sctp_pcb.obj \
	sctp_peeloff.obj \
	sctp_sha1.obj \
	sctp_ss_functions.obj \
	sctp_sysctl.obj \
	sctp_timer.obj \
	sctp_userspace.obj  \
	sctp_usrreq.obj \
	sctputil.obj \
	sctp6_usrreq.obj

usrsctp_HEADERS = \
	user_atomic.h \
	user_environment.h \
	user_inpcb.h \
	user_ip6_var.h \
	user_malloc.h \
	user_mbuf.h \
	user_recv_thread.h \
	user_route.h \
	user_socketvar.h \
	user_uma.h \
	user_queue.h \
	user_ip_icmp.h \
	user_ip6_var.h \
	netinet\sctp.h \
	netinet\sctp_asconf.h \
	netinet\sctp_auth.h \
	netinet\sctp_bsd_addr.h \
	netinet\sctp_callout.h \
	netinet\sctp_constants.h \
	netinet\sctp_crc32.h \
	netinet\sctp_header.h \
	netinet\sctp_indata.h \
	netinet\sctp_input.h \
	netinet\sctp_lock_userspace.h \
	netinet\sctp_os.h \
	netinet\sctp_os_userspace.h \
	netinet\sctp_output.h \
	netinet\sctp_pcb.h \
	netinet\sctp_peeloff.h \
	netinet\sctp_process_lock.h \
	netinet\sctp_sha1.h \
	netinet\sctp_structs.h \
	netinet\sctp_sysctl.h \
	netinet\sctp_timer.h \
	netinet\sctp_uio.h \
	netinet\sctp_var.h \
	netinet\sctputil.h \
	netinet6\sctp6_var.h

usrsctp.lib : $(usrsctp_OBJECTS)
	lib /out:usrsctp.lib $(LINKFLAGS) $(usrsctp_OBJECTS)

user_environment.obj : user_environment.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c user_environment.c

user_mbuf.obj  : user_mbuf.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c user_mbuf.c

user_recv_thread.obj: user_recv_thread.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c user_recv_thread.c

user_sctp_timer_iterate.obj : user_sctp_timer_iterate.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c user_sctp_timer_iterate.c

user_socket.obj : user_socket.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c user_socket.c

sctp_asconf.obj : netinet\sctp_asconf.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_asconf.c

sctp_auth.obj : netinet\sctp_auth.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_auth.c

sctp_bsd_addr.obj : netinet\sctp_bsd_addr.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_bsd_addr.c

sctp_callout.obj : netinet\sctp_callout.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_callout.c

sctp_cc_functions.obj : netinet\sctp_cc_functions.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_cc_functions.c

sctp_crc32.obj : netinet\sctp_crc32.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_crc32.c

sctp_indata.obj : netinet\sctp_indata.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_indata.c

sctp_input.obj : netinet\sctp_input.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_input.c

sctp_output.obj : netinet\sctp_output.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_output.c

sctp_pcb.obj : netinet\sctp_pcb.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_pcb.c

sctp_peeloff.obj : netinet\sctp_peeloff.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_peeloff.c

sctp_sha1.obj : netinet\sctp_sha1.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_sha1.c

sctp_ss_functions.obj : netinet\sctp_ss_functions.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_ss_functions.c

sctp_sysctl.obj : netinet\sctp_sysctl.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_sysctl.c

sctp_timer.obj : netinet\sctp_timer.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_timer.c

sctp_userspace.obj : netinet\sctp_userspace.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_userspace.c

sctp_usrreq.obj : netinet\sctp_usrreq.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctp_usrreq.c

sctputil.obj : netinet\sctputil.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet\sctputil.c

sctp6_usrreq.obj : netinet6\sctp6_usrreq.c $(usrsctp_HEADERS)
	cl $(CVARSDLL) $(CFLAGS) -c netinet6\sctp6_usrreq.c

clean:
	del *.obj
	del usrsctp.lib
