#
# BDS : BDD Decomposition-Based Logic Optimization Program
#---------------------------------------------------------------------------
.SUFFIXES: .o .c .u

CC	= gcc
#CC	= cc
RANLIB	= ranlib
#RANLIB	= :

PURE   = 
PUREDOT =
#PURE	= /net/iss/usr/local/bin/purify-4.1-solaris2/purify
#PUREDOT = .pure

QUAN	=
QUANDOT =
#QUAN	= /net/iss/usr/local/bin/quantify-3.1.1-solaris2/quantify
#QUANDOT = .quan

#LINK   = 
LINK	= $(PURE)$(QUAN)

TARGET	= bds12$(PTL)$(PUREDOT)$(QUANDOT)

WHERE	= /home/zzeng/cad/cudd-2.3.1

INCLUDE = $(WHERE)/include
LIBS	= $(WHERE)/cudd/libcudd.a \
		$(WHERE)/epd/libepd.a \
		$(WHERE)/mtr/libmtr.a \
		$(WHERE)/st/libst.a \
		$(WHERE)/util/libutil.a

BLIBS	= -kL$(WHERE)/dddmp -kldddmp -kL$(WHERE)/cudd -klcudd -kL$(WHERE)/mtr \
	-klmtr -kL$(WHERE)/st -klst -kL$(WHERE)/util -klutil

LINTLIBS = $(WHERE)/cudd/llib-lcudd.ln \
	$(WHERE)/mtr/llib-lmtr.ln $(WHERE)/st/llib-lst.ln \
	$(WHERE)/util/llib-lutil.ln

SRC	= main.c bnet.c build.c ftree.c export.c lopt.c array.c list.c queue.c minimize.c \
	  loptUtil.c store.c cutptl.c phase.c enhance.c eliminate.c prepare.c local.c \
	  sharing.c verify.c sweep.c debug.c 
HDR	= bnet.h build.h lopt.h enhance.h eliminate.h prepare.h local.h sharing.h \
          verify.h sweep.h array.h list.h \
	  $(WHERE)/include/cudd.h $(WHERE)/include/cuddInt.h
OBJ	= $(SRC:.c=.o)
UBJ	= $(SRC:.c=.u)

#ICFLAGS = -g -O6 -Wall
#ICFLAGS = -g -Wall
ICFLAGS = -g -O6
#ICFLAGS =
#ICFLAGS = -O3
#XCFLAGS = -DHAVE_IEEE_754 -DBSD
XCFLAGS = -mcpu=pentiumpro -malign-double -DHAVE_IEEE_754 -DBSD -march=pentiumpro

#XCFLAGS = -xtaso -ieee_with_no_inexact -tune host

#------------------------------------------------------
# HP
#XCFLAGS = +O3 -DUNIX100
#XCFLAGS = +O2 +Onolimit -DHPPA -Aa +DAportable -D_INCLUDE_POSIX_SOURCE \
	-D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_XOPEN_SOURCE_EXTENDED
# for -g option
#XCFLAGS = -DHPPA -Aa +DAportable -D_INCLUDE_POSIX_SOURCE \
	-D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_XOPEN_SOURCE_EXTENDED
#------------------------------------------------------

CFLAGS	= $(ICFLAGS) $(MFLAG) $(XCFLAGS)

DDDEBUG = 
#DDDEBUG = -DDEBUG

LDFLAGS =
#LDFLAGS = -jmpopt
#LDFLAGS = -non_shared -om -taso

LINTFLAGS = -u -n -DDEBUG 

#------------------------------------------------------
#    Important : turn on this to enable PTL capability
#------------------------------------------------------

#PTL = 
#DDPTL =

#PTL = .ptl
#DDPTL = -DPTL

#------------------------------------------------------

$(TARGET): $(SRC) $(OBJ) $(HDR) $(LIBS) 
	$(LINK) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) -lm

.c.o: $(HDR)
	$(CC) -c $< -I$(INCLUDE) $(CFLAGS) $(DDDEBUG) $(DDPTL)

# if the header files change, recompile
$(OBJ): $(HDR)
$(UBJ): $(HDR)

.c.u: $(SRC) $(HDR)
	cc -j -I$(INCLUDE) $(XCFLAGS) $<

lint: $(SRC) $(HDR) $(LINTLIBS)
	lint $(LINTFLAGS) -I$(INCLUDE) $(SRC) $(LINTLIBS)

tags: $(SRC) $(HDR)
	ctags $(SRC) $(HDR)

all: $(TARGET) lint tags

clean:
	rm -f *.o *.u *.Counts .pure core *.warnings 

distclean: clean
	rm -f $(TARGET) *.bak *~ .gdb_history *.qv *.qx
