#
# You need to have CUDD and BOOST installed.  
# Set CUDD_HOME to the root of your CUDD installation.
#

CC = g++
DEBUG = -g
CFLAGS = -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
LIBRARIES = pcap

CUDD_HOME=~/cudd-2.4.2

CUDD_INCLUDE=$(CUDD_HOME)/include
CUDD_LIB= $(CUDD_HOME)/cudd/libcudd.a $(CUDD_HOME)/util/libutil.a\
			  $(CUDD_HOME)/epd/libepd.a $(CUDD_HOME)/mtr/libmtr.a\
			  $(CUDD_HOME)/st/libst.a $(CUDD_HOME)/obj/libobj.a\
                          $(CUDD_HOME)/dddmp/libdddmp.a
BOOST_HOME=/usr/include
HDR=$(CUDD_INCLUDE)/dddmp.h $(CUDD_INCLUDE)/cuddInt.h\
    $(CUDD_INCLUDE)/cudd.h nfaToBDD.h 

LIBS      = $(patsubst %, -l%, $(LIBRARIES))

all: normal

normal: nfaToBDD nfa_bdd_simulate
modified: nfaToBDD_m nfa_operation_m


nfaToBDD:  nfaToBDD.o  $(CUDD_LIB)
	$(CC) $(LFLAGS)  nfaToBDD.o  $(CUDD_LIB) -o nfaToBDD

nfaToBDD.o: $(HDR) $(BOOST_HOME) nfaToBDD.cpp
	$(CC) $(CFLAGS) -O3 -I $(CUDD_INCLUDE) nfaToBDD.cpp


nfa_bdd_simulate:  nfa_operation.o nfa_bdd_simulate.o  $(CUDD_LIB)
	$(CC) $(LFLAGS) nfa_operation.o nfa_bdd_simulate.o $(LIBS) $(CUDD_LIB) -o nfa_bdd_simulate

nfa_operation.o: $(HDR)  nfa_operation.cpp
	$(CC) $(CFLAGS) -O3 -I $(CUDD_INCLUDE) nfa_operation.cpp

nfa_bdd_simulate.o: $(HDR)  nfa_bdd_simulate.cc
	$(CC) $(CFLAGS) -O3 -I $(CUDD_INCLUDE) nfa_bdd_simulate.cc




nfaToBDD_m: $(BOOST_HOME) $(CUDD_INCLUDE) nfaToBDD_m.h nfaToBDD_m.cpp
	$(CC) nfaToBDD_m.cpp $(CUDD_INCLUDE) -o nfaToBDD_m

nfa_operation_m: $(BOOST_HOME) $(CUDD_INCLUDE) nfa_operation_m.h nfa_operation_m.cpp
	$(CC) nfa_operation_m.cpp $(CUDD_INCLUDE) -o nfa_operation_m

clean:
	rm *.o nfaToBDD nfa_bdd_simulate
