MPICHDIR  = /usr
MPICHLIBDIR = $(MPICHDIR)/lib
MPICHINCDIR = $(MPICHDIR)/include
LIBDIR    = /usr/lib
INCDIR    = /usr/include
BUILDDIR  = build
BINDIR    = bin

CC        = $(MPICHDIR)/bin/mpicc
CXX       = $(MPICHDIR)/bin/mpicxx

CPPFLAGS += -I Generics -I Source/Common -std=c++11 -I $(MPICHINCDIR) -I $(INCDIR) -fPIC

LDFLAGS += -lpthread -lmpi
LDLIBS := -L$(MPICHLIBDIR) -L$(LIBDIR)

COMMON_SRC := $(wildcard Source/Common/*.cpp)
COMMON_SRC := $(filter-out Source/Common/Decode.cpp, $(COMMON_SRC))
COMMON_SRC += Generics/rand.cpp
COMMON_DIROBJ = $(subst .cpp,.o,$(COMMON_SRC))
COMMON_OBJ = $(addprefix $(BUILDDIR)/,$(notdir $(COMMON_DIROBJ)))

MPITEST_SRC := $(wildcard Source/MPITest/*.cpp)
MPITEST_DIROBJ := $(subst .cpp,.o,$(MPITEST_SRC))
MPITEST_OBJ = $(addprefix $(BUILDDIR)/,$(notdir $(MPITEST_DIROBJ)))
MPITEST_TGT = $(BINDIR)/mpitest

all : $(MPITEST_TGT)

MPITest: $(MPITEST_TGT)

$(MPITEST_TGT) : $(MPITEST_DIROBJ) $(COMMON_DIROBJ)
	mkdir -p $(BINDIR)
	$(CXX) $(CPPFLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)

clean :
	rm -rf $(MPITEST_TGT) $(MPITEST_OBJ) $(MPITEST_DIROBJ) $(COMMON_OBJ)
