SHELL = /bin/sh
CC = gcc
COPT = -O2
CFLAGS = -g
# location of Cerberus modified Linux Kernel
LINUXDIR = /usr/src/linux
# location of GMP build
GMPDIR = ./gmp-2.0.2
CPPFLAGS = -I$(LINUXDIR)/net/ipsec -I$(LINUXDIR)/include -I$(GMPDIR)
# PORT=7500 (instead of default PORT=500)
# CPPFLAGS += -DPORT=7500 
# If your system doesn't define byte order, do it here
# -DBYTE_ORDER=LITTLE_ENDIAN
CPPFLAGS += -DDEBUG
# Print selected output to file ./demo[ir]
# CPPFLAGS += -DDEMO
# WIT & DEBUG_IN_OUT only work properly with DEBUG
# CPPFLAGS += -DWIT
# Test Var Len Attr - Make SA Lifetime (in MM & QM-ESP) a variable len attrib
# CPPFLAGS += -DTEST_VAR_ATTR
# Test Client ID - Initiator always sends Client ID
# CPPFLAGS += -DTEST_SEND_CLIENT_ID
# Test (instrument) kernel interaction
# CPPFLAGS += -DTEST_KERN
# Print state table
# CPPFLAGS += -DTEST_PR_STATE
# CPPFLAGS += -DDEBUG_IN_OUT
ALLFLAGS = $(CPPFLAGS) $(CFLAGS)
LIBS = -L$(GMPDIR) -lgmp
# Some machines need -lbind
# if not there, things like __inet_ntoa are not recognized
#LIBS = -L$(GMPDIR) -lgmp -lbind
LDFLAGS = $(ALLFLAGS)
SHADIR = $(LINUXDIR)/net/ipsec/crypto/sha/
MD5DIR  = $(LINUXDIR)/net/ipsec/crypto/md5/

BINNAME = plutoplus

RM = /bin/rm
RMFLAGS = -f

.SUFFIXES:
.SUFFIXES: .c .o

OBJS =  cookie.o      demux.o  ipsec_doi.o   ipsec_doi_mainxchg.o ipsec_doi_quickxchg.o\
        kernel_comm.o log.o    main.o        md5.o                misc.o \
	rnd.o         server.o sha.o         state.o              timer.o\
        $(DES_OBJS)

all: $(BINNAME)

include Makefile.des

install: all

$(BINNAME): $(OBJS)
	$(CC) -o $(BINNAME) $(LDFLAGS) $(OBJS) $(LIBS)
	chmod u+s $(BINNAME)

cleanall: clean

distclean: clean

mostlyclean: clean

realclean: clean

clean:
	$(RM) $(RMFLAGS) $(OBJS) *.core core *~ a.out ktrace.out
	$(RM) $(RMFLAGS) $(BINNAME)

.c.o:
	$(CC) $(COPTS) $(ALLFLAGS) -c $<

md5.o:  $(MD5DIR)md5.c
	$(CC) $(ALLFLAGS) $(COPT) -I$(MD5DIR) -c $(MD5DIR)md5.c -o md5.o
sha.o:  $(SHADIR)sha.c
	$(CC) $(ALLFLAGS) $(COPT) -I$(SHADIR) -c $(SHADIR)sha.c -o sha.o
rnd.o: rnd.c $(SHADIR)sha.h defs.h constants.h
demux.o: demux.c constants.h packet.h defs.h state.h $(MD5DIR)md5.h $(SHADIR)sha.h
kernel_comm.o: kernel_comm.c constants.h
ipsec_doi.o: ipsec_doi.c constants.h state.h packet.h defs.h $(MD5DIR)md5.h $(SHADIR)sha.h
ipsec_doi_mainxchg.o: ipsec_doi_mainxchg.c constants.h state.h packet.h defs.h $(MD5DIR)md5.h $(SHADIR)sha.h
ipsec_doi_quickxchg.o: ipsec_doi_quickxchg.c constants.h state.h packet.h defs.h $(MD5DIR)md5.h $(SHADIR)sha.h
cookie.o: cookie.c constants.h defs.h $(SHADIR)sha.h
log.o: log.c
state.o: state.c state.h constants.h defs.h
main.o: main.c
server.o: server.c defs.h constants.h state.h
timer.o: timer.c constants.h state.h defs.h
misc.o : misc.c
