CXX=mpicxx
FC=mpif90
LD=$(CXX)
CC=$(CXX)

LIBPGT_CFLAGS=#-I/lustrefs/homes/timos/Work/libpgt -DHAVE_PGT
LIBPGT_LIBS=#-L/lustrefs/homes/timos/Work/libpgt -lpgt -lpapi

FCFLAGS=-O0 -g3 -I../
CXXFLAGS=-O0 -g3 -I../ $(LIBPGT_CFLAGS)
LDFLAGS=-L../ -lcDAG ../libcDAG.a $(LIBPGT_LIBS) -pthread -L/usr/lib/openmpi/lib -lmpi_cxx -lmpi -lopen-rte -lopen-pal -ldl -Wl,--export-dynamic -lnsl -lutil -lm -ldl

NUMPROCS=8

TESTS=ring ring_reuse generic_op generic_op_singleproc fortran_test \
      bcast_linear bcast_linear_extra_msgs bcast_linear_nocollopt bcast_linear_extra_msgs_nocollopt \
	  bcast_binomial bcast_binomial_extra_msgs bcast_binomial_nocollopt bcast_binomial_extra_msgs_nocollopt

all: $(TESTS)

test:
	mpirun -np $(NUMPROCS) ring
	mpirun -np $(NUMPROCS) ring_reuse
	mpirun -np $(NUMPROCS) generic_op
	./generic_op_singleproc
	mpirun -np $(NUMPROCS) bcast_linear
	mpirun -np $(NUMPROCS) bcast_linear_extra_msgs
	mpirun -np $(NUMPROCS) bcast_linear_nocollopt
	mpirun -np $(NUMPROCS) bcast_linear_extra_msgs_nocollopt
	mpirun -np $(NUMPROCS) bcast_binomial

ring: ring.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)
 
ring_reuse: ring_reuse.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

generic_op: generic_op.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

generic_op_singleproc: generic_op_singleproc.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

fortran_test: fortran_test.f90
	$(FC) $(FCFLAGS) $< -o $@ $(LDFLAGS)

bcast_linear: bcast_linear.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_linear_extra_msgs: bcast_linear_extra_msgs.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_linear_nocollopt: bcast_linear_nocollopt.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_linear_extra_msgs_nocollopt: bcast_linear_extra_msgs_nocollopt.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_binomial: bcast_binomial.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_binomial_extra_msgs: bcast_binomial_extra_msgs.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_binomial_nocollopt: bcast_binomial_nocollopt.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)

bcast_binomial_extra_msgs_nocollopt: bcast_binomial_extra_msgs_nocollopt.cpp
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)







clean:
	rm -f *.o
	rm -f $(TESTS)
