# First to include the conf info depending on the compilers we need etc
# i.e. all options starting with IC_

include ../conf/system/makeopts-SNIPE_LITE

# For any arch type options
# i.e. anything else like, IMA_ARCH, system call flags etc

include ../conf/system/makeopts-$(HARNESS_ARCH)

#
# The rest should now be a little puddie kat.
#

# Final build options conf file.
# Yep, how many do we need :)

include ../conf/makeopts-HARNESS

COMPILE_OPT = $(INTER_OPTS) $(BUILD_OPTS) $(MPI_OPTS) 

###########################################################################

# Now for the compilation directories

include ../conf/system/makeopts-dirs

###########################################################################
OBJS =  $(objdir)/ft-mpi-common.o \
	$(objdir)/ft-mpi-attr.o \
	$(objdir)/ft-mpi-buffer.o \
	$(objdir)/ft-mpi-convinfo.o \
	$(objdir)/ft-mpi-nb.o \
	$(objdir)/ft-mpi-err.o \
	$(objdir)/ft-mpi-fifo.o \
	$(objdir)/ft-mpi-op.o \
	$(objdir)/ft-mpi-cart.o \
	$(objdir)/ft-mpi-coll-intra-dec.o \
	$(objdir)/ft-mpi-coll-intra-linear.o \
	$(objdir)/ft-mpi-coll-intra-bmtree.o \
	$(objdir)/ft-mpi-graph.o \
	$(objdir)/ft-mpi-intercom.o \
	$(objdir)/ft-mpi-lib.o \
	$(objdir)/ft-mpi-lib-attr.o \
	$(objdir)/ft-mpi-lib-buffer.o \
	$(objdir)/ft-mpi-lib-cart.o \
	$(objdir)/ft-mpi-lib-com.o \
	$(objdir)/ft-mpi-lib-coll.o \
	$(objdir)/ft-mpi-lib-ddt.o \
	$(objdir)/ft-mpi-lib-dims.o \
	$(objdir)/ft-mpi-lib-err.o \
	$(objdir)/ft-mpi-lib-graph.o \
	$(objdir)/ft-mpi-lib-group.o \
	$(objdir)/ft-mpi-lib-intercom.o \
	$(objdir)/ft-mpi-lib-misc.o \
	$(objdir)/ft-mpi-lib-op.o \
	$(objdir)/ft-mpi-lib-p2p.o \
	$(objdir)/ft-mpi-lib-pack.o \
	$(objdir)/ft-mpi-lib-nb.o \
	$(objdir)/ft-mpi-misc.o \
	$(objdir)/ft-mpi-conn.o \
	$(objdir)/ft-mpi-msg-list.o \
	$(objdir)/ft-mpi-msg-size.o \
	$(objdir)/ft-mpi-req-list.o \
	$(objdir)/ft-mpi-procinfo.o \
	$(objdir)/ft-mpi-p2p.o \
	$(objdir)/ft-mpi-ddt.o \
	$(objdir)/ft-mpi-com.o \
	$(objdir)/ft-mpi-group.o \
	$(objdir)/ft-mpi-f2c.o \
	$(objdir)/ft-mpi-f2c-coll.o \
	$(objdir)/ft-mpi-f2c-com.o \
	$(objdir)/ft-mpi-f2c-ddt.o \
	$(objdir)/ft-mpi-f2c-lib.o \
	$(objdir)/ft-mpi-f2c-p2p.o \
	$(objdir)/ft-mpi-f2c-nb.o \
	$(objdir)/ft-mpi-cinfo.o \
	$(objdir)/ft-mpi-top.o \
	$(objdir)/ft-mpi-lib-pers.o \
	$(objdir)/ft-mpi-lib-langint.o \
	 $(objdir)/ft-mpi-sys.o \
	$(WOBJ) 
#sources := $(OBJS:$(objdir)/%=.%)

###########################################################################

default: $(objdir) $(bindir) $(libdir)\
	$(OBJS) \
	$(libdir)/libftmpi.a  

all: $(objdir) $(bindir) $(libdir)\
	$(OBJS) \
	$(libdir)/libftmpi.a

###########################################################################

LIBS = $(SL_LIBS) 

LIBOBJS = $(OBJS) \
	$(HARNESS_ROOT)/plugins/ftmpi/$(HARNESS_ARCH)/libnotifier.o \
	$(HARNESS_ROOT)/plugins/ftmpi/$(HARNESS_ARCH)/libstartup.o \
	$(HARNESS_ROOT)/plugins/ftmpi/$(HARNESS_ARCH)/libsecure.o \
	$(HARNESS_ROOT)/plugins/ftmpi/$(HARNESS_ARCH)/libsio.o \
	$(HARNESS_ROOT)/plugins/ftmpi/$(HARNESS_ARCH)/libcio.o \
	$(shareobjdir)/msg.o \
	$(shareobjdir)/msgbuf.o \
	$(shareobjdir)/snipe_lite.o \
	$(shareobjdir)/msg_s.o \
	$(shareobjdir)/snipe_lite_s.o \
	$(shareobjdir)/snipe2.o \
	$(shareobjdir)/snipe2-msg-list.o \
	$(svcobjdir)/ns_lib.o \
	$(shareobjdir)/memory.o \
	$(hobjdir)/envs.o \
	$(hobjdir)/id.o \
	$(hobjdir)/hlib.o 

###########################################################################

HDRS = \
	ft-mpi-attr.h \
	ft-mpi-buffer.h \
	ft-mpi-cart.h ft-mpi-check.h ft-mpi-cinfo.h \
	ft-mpi-coll.h ft-mpi-com.h ft-mpi-common.h \
	ft-mpi-conn.h ft-mpi-convinfo.h \
	ft-mpi-db-types.h ft-mpi-ddt-sys.h \
	ft-mpi-err.h \
	ft-mpi-fifo.h \
	ft-mpi-f2c.h ft-mpi-fprot.h \
	ft-mpi-graph.h ft-mpi-group.h \
	ft-mpi-intercom.h \
	ft-mpi-lib.h ft-mpi-lib-nb.h ft-mpi-lib-p2p.h ft-mpi-list.h \
	ft-mpi-lib-group.h \
	ft-mpi-misc.h ft-mpi-modes.h ft-mpi-msg-list.h \
	ft-mpi-nb.h \
	ft-mpi-op.h \
	ft-mpi-procinfo.h ft-mpi-p2p.h ft-mpi-profile.h \
	ft-mpi-req-list.h \
	ft-mpi-sys.h \
	ft-mpi-top.h \
	../include/mpi.h \
	../include/mpif.h \
	../include/debug.h


###########################################################################
#Makeoptions check
#
#	the conf values change if configure is called.
# check includes static options in HARNESS and *THIS* local makefile as well
###########################################################################

MOPS = ../conf/makeopts-HARNESS ../conf/system/makeopts-${HARNESS_ARCH} \
		Makefile

###########################################################################

###########################################################################
#       Do not change the below unless you know what your doing
###########################################################################

ACKOPT = -DCHECK_ACK
#ACKOPT = -DCHECK_RING

###########################################################################
#       Do not change the below unless you know what your doing
###########################################################################
#
#	We now push the leader and startup records by default i.e. you have
#	to force a poll for these records
#	The STATE record is polled by default and you have to force a push
#
###

NS_POLL_OPS =	-DFTMPI_SYS_STATE_PUSH

###########################################################################

#DEBUG =
#DEBUG =  -g 
#DEBUG =  -O
#DEBUG = -DVERBOSE -g
#DEBUG = -DVERBOSE9
#DEBUG = -DREALVERBOSE
#DEBUG = -DREALVERBOSE9

###########################################################################

# Internal extra debugging FLAGS.. don't set, you have been WARNED
# DB_PEON_SHOW_STATE_BUILD shows rebuild state info after a recover/start
# DB_LEADER_SHOW_STATE_BUILD shows rebuild state info after a recover/start
# DB_PEON_ACK shows what the peon sends as its debug info 

#DEBUGSYS = -DDB_PEON_SHOW_STATE_BUILD -DDB_LEADER_SHOW_STATE_BUILD -DDB_PEON_ACK
DEBUGSYS = 

###########################################################################

$(objdir) : 
	mkdir $(objdir)

$(bindir) : 
	mkdir $(bindir)

$(libdir) : 
	mkdir $(libdir)

###########################################################################

CFLAGS = $(STDINC) $(SOPT) $(DEBUG) $(COPT) $(NBOPT) $(EXTRA_FLAGS) -I$(pftmpidir) $(F2C_OPTS)

#$(objdir)/%.o: %.c $(MOPS) $(HDRS)
#	$(CC) $(CFLAGS) -c $*.c -o $@

$(objdir)/ft-mpi-sys.o	: ft-mpi-sys.c $(HDRS) $(MOPS)
	$(CC) $(ALLINC) -c ft-mpi-sys.c $(SOPT) $(CFLAGS) $(DEBUGSYS) $(EXTRA_FLAGS) \
	-I$(pftmpidir) $(ACKOPT) $(DEBUG) $(NS_POLL_OPS) -o $@

# Until we have a nicer solution, I reintroduce the explicit compilation of all files.
# The method above has serious problems on SGI, Alpha and IBM's
# EG November 4 2003
$(objdir)/ft-mpi-attr.o: ft-mpi-attr.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-attr.c 
	mv ft-mpi-attr.o $(objdir)

$(objdir)/ft-mpi-common.o: ft-mpi-common.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-common.c 
	mv ft-mpi-common.o $(objdir)

$(objdir)/ft-mpi-buffer.o: ft-mpi-buffer.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-buffer.c 
	mv ft-mpi-buffer.o $(objdir)

$(objdir)/ft-mpi-convinfo.o: ft-mpi-convinfo.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-convinfo.c 
	mv ft-mpi-convinfo.o $(objdir)

$(objdir)/ft-mpi-nb.o: ft-mpi-nb.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-nb.c 
	mv ft-mpi-nb.o $(objdir)

$(objdir)/ft-mpi-err.o: ft-mpi-err.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-err.c 
	mv ft-mpi-err.o $(objdir)

$(objdir)/ft-mpi-fifo.o: ft-mpi-fifo.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-fifo.c 
	mv ft-mpi-fifo.o $(objdir)

$(objdir)/ft-mpi-op.o: ft-mpi-op.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-op.c 
	mv ft-mpi-op.o $(objdir)

$(objdir)/ft-mpi-cart.o: ft-mpi-cart.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-cart.c 
	mv ft-mpi-cart.o $(objdir)

$(objdir)/ft-mpi-coll-intra-dec.o: ft-mpi-coll-intra-dec.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-coll-intra-dec.c 
	mv ft-mpi-coll-intra-dec.o $(objdir)

$(objdir)/ft-mpi-coll-intra-linear.o: ft-mpi-coll-intra-linear.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-coll-intra-linear.c 
	mv ft-mpi-coll-intra-linear.o $(objdir)

$(objdir)/ft-mpi-coll-intra-bmtree.o: ft-mpi-coll-intra-bmtree.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-coll-intra-bmtree.c 
	mv ft-mpi-coll-intra-bmtree.o $(objdir)

$(objdir)/ft-mpi-graph.o: ft-mpi-graph.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-graph.c 
	mv ft-mpi-graph.o $(objdir)

$(objdir)/ft-mpi-intercom.o: ft-mpi-intercom.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-intercom.c 
	mv ft-mpi-intercom.o $(objdir)

$(objdir)/ft-mpi-lib.o: ft-mpi-lib.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib.c 
	mv ft-mpi-lib.o $(objdir)

$(objdir)/ft-mpi-lib-attr.o: ft-mpi-lib-attr.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-attr.c 
	mv ft-mpi-lib-attr.o $(objdir)

$(objdir)/ft-mpi-lib-buffer.o: ft-mpi-lib-buffer.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-buffer.c 
	mv ft-mpi-lib-buffer.o $(objdir)

$(objdir)/ft-mpi-lib-cart.o: ft-mpi-lib-cart.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-cart.c 
	mv ft-mpi-lib-cart.o $(objdir)

$(objdir)/ft-mpi-lib-com.o: ft-mpi-lib-com.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-com.c 
	mv ft-mpi-lib-com.o $(objdir)

$(objdir)/ft-mpi-lib-coll.o: ft-mpi-lib-coll.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-coll.c 
	mv ft-mpi-lib-coll.o $(objdir)

$(objdir)/ft-mpi-lib-ddt.o: ft-mpi-lib-ddt.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-ddt.c 
	mv ft-mpi-lib-ddt.o $(objdir)

$(objdir)/ft-mpi-lib-dims.o: ft-mpi-lib-dims.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-dims.c 
	mv ft-mpi-lib-dims.o $(objdir)

$(objdir)/ft-mpi-lib-err.o: ft-mpi-lib-err.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-err.c 
	mv ft-mpi-lib-err.o $(objdir)

$(objdir)/ft-mpi-lib-graph.o: ft-mpi-lib-graph.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-graph.c 
	mv ft-mpi-lib-graph.o $(objdir)

$(objdir)/ft-mpi-lib-group.o: ft-mpi-lib-group.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-group.c 
	mv ft-mpi-lib-group.o $(objdir)

$(objdir)/ft-mpi-lib-intercom.o: ft-mpi-lib-intercom.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-intercom.c 
	mv ft-mpi-lib-intercom.o $(objdir)

$(objdir)/ft-mpi-lib-misc.o: ft-mpi-lib-misc.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-misc.c 
	mv ft-mpi-lib-misc.o $(objdir)

$(objdir)/ft-mpi-lib-op.o: ft-mpi-lib-op.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-op.c 
	mv ft-mpi-lib-op.o $(objdir)

$(objdir)/ft-mpi-lib-p2p.o: ft-mpi-lib-p2p.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-p2p.c 
	mv ft-mpi-lib-p2p.o $(objdir)

$(objdir)/ft-mpi-lib-pack.o: ft-mpi-lib-pack.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-pack.c 
	mv ft-mpi-lib-pack.o $(objdir)

$(objdir)/ft-mpi-lib-nb.o: ft-mpi-lib-nb.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-nb.c 
	mv ft-mpi-lib-nb.o $(objdir)

$(objdir)/ft-mpi-misc.o: ft-mpi-misc.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-misc.c 
	mv ft-mpi-misc.o $(objdir)

$(objdir)/ft-mpi-conn.o: ft-mpi-conn.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-conn.c 
	mv ft-mpi-conn.o $(objdir)

$(objdir)/ft-mpi-msg-list.o: ft-mpi-msg-list.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-msg-list.c 
	mv ft-mpi-msg-list.o $(objdir)

$(objdir)/ft-mpi-msg-size.o: ft-mpi-msg-size.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-msg-size.c 
	mv ft-mpi-msg-size.o $(objdir)

$(objdir)/ft-mpi-req-list.o: ft-mpi-req-list.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-req-list.c 
	mv ft-mpi-req-list.o $(objdir)

$(objdir)/ft-mpi-procinfo.o: ft-mpi-procinfo.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-procinfo.c 
	mv ft-mpi-procinfo.o $(objdir)

$(objdir)/ft-mpi-p2p.o: ft-mpi-p2p.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-p2p.c 
	mv ft-mpi-p2p.o $(objdir)

$(objdir)/ft-mpi-ddt.o: ft-mpi-ddt.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-ddt.c 
	mv ft-mpi-ddt.o $(objdir)

$(objdir)/ft-mpi-com.o: ft-mpi-com.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-com.c 
	mv ft-mpi-com.o $(objdir)

$(objdir)/ft-mpi-group.o: ft-mpi-group.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-group.c 
	mv ft-mpi-group.o $(objdir)

$(objdir)/ft-mpi-f2c.o: ft-mpi-f2c.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c.c 
	mv ft-mpi-f2c.o $(objdir)

$(objdir)/ft-mpi-f2c-coll.o: ft-mpi-f2c-coll.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c-coll.c 
	mv ft-mpi-f2c-coll.o $(objdir)

$(objdir)/ft-mpi-f2c-com.o: ft-mpi-f2c-com.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c-com.c 
	mv ft-mpi-f2c-com.o $(objdir)

$(objdir)/ft-mpi-f2c-ddt.o: ft-mpi-f2c-ddt.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c-ddt.c 
	mv ft-mpi-f2c-ddt.o $(objdir)

$(objdir)/ft-mpi-f2c-lib.o: ft-mpi-f2c-lib.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c-lib.c 
	mv ft-mpi-f2c-lib.o $(objdir)

$(objdir)/ft-mpi-f2c-p2p.o: ft-mpi-f2c-p2p.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c-p2p.c 
	mv ft-mpi-f2c-p2p.o $(objdir)

$(objdir)/ft-mpi-f2c-nb.o: ft-mpi-f2c-nb.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-f2c-nb.c 
	mv ft-mpi-f2c-nb.o $(objdir)

$(objdir)/ft-mpi-cinfo.o: ft-mpi-cinfo.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-cinfo.c 
	mv ft-mpi-cinfo.o $(objdir)

$(objdir)/ft-mpi-top.o: ft-mpi-top.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-top.c 
	mv ft-mpi-top.o $(objdir)

$(objdir)/ft-mpi-lib-pers.o: ft-mpi-lib-pers.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-pers.c 
	mv ft-mpi-lib-pers.o $(objdir)

$(objdir)/ft-mpi-lib-langint.o: ft-mpi-lib-langint.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-lib-langint.c 
	mv ft-mpi-lib-langint.o $(objdir)

$(objdir)/ft-mpi-incomplete.o: ft-mpi-incomplete.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-incomplete.c 
	mv ft-mpi-incomplete.o $(objdir)

$(objdir)/ft-mpi-incomplete-2.o: ft-mpi-incomplete-2.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-incomplete-2.c 
	mv ft-mpi-incomplete-2.o $(objdir)

$(objdir)/ft-mpi-prof-wrappers.o: ft-mpi-prof-wrappers.c $(MOPS) $(HDRS)
	$(CC) $(CFLAGS) -c ft-mpi-prof-wrappers.c 
	mv ft-mpi-prof-wrappers.o $(objdir)



###########################################################################
#			FT-MPI Library itself
###########################################################################

$(libdir)/libftmpi.a	: $(LIBOBJS)
	rm -f $(libdir)/libftmpi.a
	ar crv $(libdir)/libftmpi.a $(LIBOBJS)

###########################################################################
#
###########################################################################

clean :
	rm -f ${OBJS} $(libdir)/libftmpi.a

cleaner :
	rm -f ${OBJS} $(libdir)/libftmpi.a

#%.d: %.c
#        $(SHELL) -ec '$(CC) -M $(CPPFLAGS) $< \
#                      | sed '\"s/$*\\.o[ :]*/& $@/g'\" > $@'

#include $(sources:.o=.d)

#.dependencies.${HARNESS_ARCH}:$(HDRS) $(MOPS)
#	@rm -f .dependencies.${HARNESS_ARCH}
#	@touch .dependencies.${HARNESS_ARCH}
#	makedepend $(ALLINC) -f.dependencies.${HARNESS_ARCH} -p$(objdir)/ -m -I$(pftmpidir) *.c
#depend: .dependencies.${HARNESS_ARCH}
#
#include .dependencies.${HARNESS_ARCH}

