MPICHDIR     = /usr
LIBDIR       = ../lib
INCDIR       = ../include
##########################################################
# DEFINES and INCLUDES can be brought in from the environment
# if desired
DEFINES      ?=
INCLUDES     ?=
MK_DEFINES   = $(DEFINES)
DEFAULT_INCLUDES = -I $(INCDIR)
MK_INCLUDES  = $(DEFAULT_INCLUDES) $(INCLUDES)

##########################################################
# CFLAGS and CPPFLAGS are set if not brought in from the environment
# using ?= conditional variable definition

CC          = $(MPICHDIR)/bin/mpicc
CCC         = g++
CFLAGS      ?= -Wall -march=native -m64
#CPPFLAGS    ?= -pipe -O2 -ffast-math -D_REENTRANT \
               -Wall -Wno-long-long -Wno-non-template-friend \
	       -fexceptions -fno-strict-aliasing \
	       -fomit-frame-pointer -fPIC \

COMPILE     = $(CC) -c $(MK_DEFINES) $(MK_INCLUDES) $(CPPFLAGS) $(CFLAGS)
LDFLAGS     = -L$(LIBDIR)

LIBS        = -lmpi

LINK        = $(CC) $(CFLAGS) $(LDFLAGS)
##########################################################

MPI_EX_CONN = MPI_Example_C

MPI_EX_CONN_SOURCES = MPI_Ex_0.c MPI_Ex_1.c

MPI_EX_CONN_OBJECTS = $(MPI_EX_CONN_SOURCES:.c=.o)

RANKS = _0 _1
MPI_EX_CONN_TARGETS =  $(foreach RANK, $(RANKS), $(MPI_EX_CONN)$(RANK))


##########################################################
# stupid make does not know .cpp suffix by default
.SUFFIXES: .cpp
.cpp.o: %.cpp
	$(CCC) $(CPPFLAGS) $(OUTPUT_OPTION) -c $<
##########################################################
%.o: %.c
	$(COMPILE) $<

# build test application (MPI)

all: MPI_ex_conn

MPI_ex_conn_objects: $(MPI_EX_CONN_OBJECTS)

MPI_ex_conn: $(MPI_EX_CONN_TARGETS)

$(MPI_EX_CONN)_% : MPI_Ex_%.o  
	$(LINK) -o $@ $^ $(LIBS)

clean:
	rm -rf $(MPI_EX_CONN_OBJECTS) $(MPI_EX_CONN_TARGETS)

