# default: touch
# g.SUFFIXES: .c .cc .cpp

CC=g++
# GO= -g
GO= -O3

# DING=/u/dliu/RESEARCH1/lib

LBFGS_HOME=../../third-party/liblbfgs-1.7
LBFGS_INCLUDE=${LBFGS_HOME}/include
LBFGS_LIB=${LBFGS_HOME}/lib/.libs

GTEST_HOME=../../third-party/gtest-1.4.0
GTEST_INCLUDE=${GTEST_HOME}/include
GTEST_LIB=${GTEST_HOME}/lib/.libs

LP_HOME=../../third-party/lp_solve_5.5
LP_INCLUDE=${LP_HOME}/include
LP_LIB=${LP_HOME}/lib/.libs

# QP_HOME=../../third-party/quadprog/src/
# QP_INCLUDE=${QP_HOME}/include
# QP_LIB=${QP_HOME}/lib/.libs

## include ${PETSC_DIR}/conf/base
# include ${TAO_DIR}/bmake/tao_common

# CFLAGS = $(GO) -Wall  -I.. -I${GTEST_INCLUDE} -I${LBFGS_INCLUDE} -L../lib -L${GTEST_LIB} -L${LBFGS_LIB} -DDEBUGMP ${TAO_LIB} ${PETSC_LIB} ${TAO_INCLUDE} ${PETSC_INCLUDE}
# CFLAGS = $(GO) -Wall  -I.. -I${GTEST_INCLUDE} -I${LBFGS_INCLUDE} -L../lib -L${GTEST_LIB} -L${LBFGS_LIB} -DDEBUGMP ${ALL_TAO_LIB} ${ALL_TAO_INCLUDE}

# CFLAGS = $(GO) -std=c++0x -Wall  -I.. -I${GTEST_INCLUDE} -L../lib -L${GTEST_LIB} -DDEBUGMP # -DTIMELIMIT=200206

# CFLAGS = $(GO) -Wall  -I.. -I${LP_INCLUDE} -I${GTEST_INCLUDE} -I${LBFGS_INCLUDE} -L../lib -L${LP_LIB} -L${GTEST_LIB} -L${LBFGS_LIB} -DDEBUGMP # -DTIMELIMIT=200206
# too slow, so I change to the following:
CFLAGS = $(GO) -Wall  -I.. -L../lib -DDEBUGMP # -DTIMELIMIT=200206

top:	touch	deps	topall

touch_and_make_deps:
	make touch
	make deps

touch:
	mkdir -p lib
	mkdir -p bin
	touch ./config/.dep
#	touch ./math/.dep
	touch ./util/.dep
	touch ./wordalign-common/.dep
#	touch ./dirty/.dep
#	touch ./lp/.dep
#	touch ./tao1/.dep
#	touch ./tao2/.dep
#	touch ./tao3/.dep
#	touch ./mapreduce/.dep
#	touch ./wordalign/.dep
#	touch ./ibm1/.dep
#	touch ./ibm1-lbfgs/.dep
##	touch ./ibm1-lbfgs-old/.dep
##	touch ./fert1/.dep
##	touch ./fert3-poisson/.dep
##	touch ./fert4-gibbs/.dep
##	touch ./fert5-poisson/.dep
#	touch ./fert7-mult/.dep
	touch ./ibm1-classic/.dep
#	touch ./ibm1-fertility/.dep
	touch ./hmm-classic-empty/.dep
	touch ./hmm-fertility-empty/.dep
#	touch ./fert2/.dep
#	touch ./unittest/.dep

topall:
	cd ./config && make
	cd ./util && make
	cd ./wordalign-common && make
	cd ./ibm1-classic && make
	cd ./hmm-classic-empty && make
	cd ./hmm-fertility-empty && make

all:
	cd ../config && make
#	cd ../math && make
	cd ../util && make
	cd ../wordalign-common && make
#	cd ../dirty && make
#	cd ../lp && make
#	cd ../mapreduce && make
#	cd ../wordalign && make
#	cd ../ibm1 && make
#	cd ../ibm1-lbfgs && make
##	cd ../ibm1-lbfgs-old && make
##	cd ../fert1 && make
#	cd ../fert7-mult && make
	cd ../ibm1-classic && make
#	cd ../ibm1-fertility && make
	cd ../hmm-classic-empty && make
	cd ../hmm-fertility-empty && make
##	cd ../fert2 && make
##	cd ../unittest && make
##	cd ../tao && make

deps: 
	cd ./config && make dep
	cd ./util && make dep
	cd ./wordalign-common && make dep
#	cd ./dirty && make dep
#	cd ./lp && make dep
##	cd ./tao && make dep
#	cd ./mapreduce && make dep
#	cd ./wordalign && make dep
#	cd ./ibm1 && make dep
#	cd ./ibm1-lbfgs && make dep
##	cd ./ibm1-lbfgs-old && make dep
##	cd ./fert1 && make dep
#	cd ./fert7-mult && make dep
	cd ./ibm1-classic && make dep
#	cd ./ibm1-fertility && make dep
	cd ./hmm-classic-empty && make dep
	cd ./hmm-fertility-empty && make dep
##	cd ./fert2 && make dep
##	cd ./unittest && make dep

%.o:	%.cc
	$(CC) -o $@ -c $(CFLAGS) $<

%.o:	%.cpp
	$(CC) -c -o $@ $(CFLAGS) $<

%.o:	%.c
	cc -c -o $@ $(CFLAGS) $<

junk:
	echo do nothing

# build libraries
lib:	../lib/lib$(PROJ).a

../lib/lib$(PROJ).a: ${CFILES:.cc=.o} ${KRCFILES:.c=.o}
	@${AR} ${ARFLAGS} $@ ${CFILES:.cc=.o} ${KRCFILES:.c=.o}
	ranlib $@

# others
cl:  
	rm -f *.o
	rm -f *~

clall:  
	rm -f ../*/*.o
	rm -f ../*/*~
	rm -f ../lib/*
	rm -f ../bin/*

clean:  
	rm -f ./*/*.o
	rm -f ./*/*~
	rm -f ./lib/*
	rm -f ./bin/*

dep:
	$(CC) $(GO) -MM $(CFLAGS) ${TAO_INCLUDE} ${PETSC_INCLUDE} *.cc >.dep
