MYCPP = g++

#CFLAGS = -g
CFLAGS = -O3

#CFLAGS = -Wall -g
#CFLAGS = -O -g
#CFLAGS = -O3 -pg
#CFLAGS = -DNDEBUG -O3
#CFLAGS = -DVERIFY_ON -O3

MFLAGS =

ifeq ($(HOSTTYPE), macintosh)
#  MFLAGS = -DMACINTOSH
  GETOPTFLAGS = -I/sw/include/gnugetopt
  GETOPTLINKDIR = -L/sw/lib
  GETOPTLINKFLAGS = -lgnugetopt
endif

ifeq (solaris, $(OSTYPE))
  MFLAGS = -D_NEED_REDEFINE_RAND_MAX_
endif

CC = $(MYCPP) $(CFLAGS) $(MFLAGS)

RANLIB = ranlib
AR = ar

.SUFFIXES: .o .cpp 

HEADERS = zchaff_base.h zchaff_clsgen.h zchaff_header.h zchaff_dbase.h zchaff_solver.h SAT.h

SOLVER_SRCS = sat_solver.cpp 
SOLVER_OBJS = $(SOLVER_SRCS:.cpp=.o)

LIB_SRCS =  zchaff_utils.cpp \
	    zchaff_solver.cpp\
	    zchaff_base.cpp \
	    zchaff_dbase.cpp \
	    zchaff_wrapper.cpp \

LIB_OBJS = $(LIB_SRCS:.cpp=.o)

# zchaff_utils.o: zchaff_utils.cpp
# 
# zchaff_solver.o: zchaff_solver.cpp zchaff_solver.h zchaff_version.h zchaff_dbase.h zchaff_base.h zchaff_header.h
# 
# zchaff_base.o: zchaff_base.cpp zchaff_base.h zchaff_header.h
# 
# zchaff_dbase.o: zchaff_dbase.cpp zchaff_dbase.h zchaff_base.h zchaff_header.h
# 
# zchaff_wrapper.o: zchaff_wrapper.cpp zchaff_solver.h zchaff_clsgen.h zchaff_version.h zchaff_dbase.h zchaff_base.h zchaff_header.h

symchaff:   $(SOLVER_OBJS) libsat.a
	  $(CC) $(GETOPTLINKDIR) $(SOLVER_OBJS) libsat.a -o symchaff $(GETOPTLINKFLAGS)

zverify_bf: zverify_bf.cpp	
	  $(CC) zverify_bf.cpp -o zverify_bf

zverify_df: zverify_df.cpp
	  $(CC) zverify_df.cpp -o zverify_df

zcore: zcore_extract.cpp
	  $(CC) zcore_extract.cpp -o zcore

zminimal: zminimal.cpp libsat.a
	  $(CC) zminimal.cpp libsat.a -o zminimal

cnf_stats: cnf_stats.cpp
	  $(CC) cnf_stats.cpp -o cnf_stats

$(LIB_OBJS): $(HEADERS)

sat_solver.o: sat_solver.cpp
	  $(CC) $(GETOPTFLAGS) -c sat_solver.cpp

libsat.a:   $(LIB_OBJS)
	@rm -f libsat.a
	$(AR) cr libsat.a $(LIB_OBJS)
	$(RANLIB) libsat.a

.cpp.o:
	$(CC) -c $< 

clean:	
	rm -f *.o libsat.a symchaff

allclean:	
	rm -f *.o libsat.a symchaff zverify_bf zverify_df zcore zminimal cnf_stats

all: symchaff zverify_bf zverify_df zcore zminimal cnf_stats

