CC = gcc
CFLAGS = -g
INT_DEFINES = -DCMMD_DEBUG

SRCDIR = ../../src
MGRSRC = $(SRCDIR)/mgrs
APPLSRC = $(SRCDIR)/testprog
CMMDSRC = $(SRCDIR)/CMMDlib

LIBDIR = ../../lib/$(ARCH)
ARDPLIB = $(LIBDIR)/libardp.a
COMMLIB = $(LIBDIR)/libcomm.a
CMMDLIB = $(LIBDIR)/libCMMD.a

INCLDIR = $(SRCDIR)/include
INCLUDES = -I$(INCLDIR) -I$(INCLDIR)/$(ARCH)

LIBS = -lCMMD -lcomm -lardp 

TESTS = ringsim hello fileops r1sn newring vector timesend timered timebc longsend

CFILES = ringsim.c hello.c sortio.c sortnode.c timesend.c r1sn.c newring.c \
	 vector.c timered.c timebc.c sortaux.c longsend.c fileops.c

OBJS = $(CFILES:.c=.o)

IOTOBJ = term_iotask.o gfunc.o


INCL_MF = $(INCLDIR)/prm.h $(INCLDIR)/comm.h $(INCLDIR)/altmac.h

IOFILES = term_iotask.o gfunc.o

SIOFILES = $(IOTOBJ) sortio.o

SFILES = sortnode.o sortaux.o

all:: $(TESTS) dsort-node dsort-io ocean-all

include ./Makefile-ocean

$(TESTS) :  $$@.o $(ARDPLIB) $(CMMDLIB) $(COMMLIB)
	$(CC) $(CFLAGS) -o $@ $(@).o -L$(LIBDIR) $(LIBS) 
	chmod 775 $@

term_iotask:	$(IOFILES) $(ARDPLIB) $(COMMLIB) $(CMMDLIB)
	$(CC) $(CFLAGS) -o $@ $(IOFILES)  -L$(LIBDIR) $(LIBS)
	chmod 775 $@

dsort-io: $(SIOFILES) $(ARDPLIB) $(COMMLIB) $(CMMDLIB)
	$(CC) $(CFLAGS) -o $@ $(SIOFILES) -L$(LIBDIR) $(LIBS) -lm
	chmod 775 $@

dsort-node:  $(SFILES) $(COMMLIB)
	$(CC) $(CFLAGS) -o $@ $(SFILES) -L$(LIBDIR) $(LIBS)
	chmod 775 $@

$(IOTOBJ): $(MGRSRC)/$$(@F:.o=.c) $(INCLDIR)/comm.h
	 make -f Makefile-mgrs DEFINES="$(DEFINES)" $(@F)


$(ARDPLIB) :
	make -f ./Makefile-ardp install
	if [ $$? ] ; then exit ; fi

$(COMMLIB): $(COMMLIB_CFILES)
	make -f ./Makefile-libs install ; 
	if [ $$? ] ; then exit ; fi
	
$(CMMDLIB): $(CMMDLIB_CFILES)
	make -f ./Makefile-CMMD install ; 
	if [ $$? ] ; then exit ; fi


$(OBJS) $(OCN_OBJS): $(APPLSRC)/$$(@:.o=.c) $(INCL_MF)
	$(CC) -c $(CFLAGS) $(INT_DEFINES) $(DEFINES) $(INCLUDES) $(APPLSRC)/$(@:.o=.c)


#dependencies

ocean1.o: $(APPLSRC)/ocean.h $(CMMDSRC)/CMMDlib.h

ocean.o: $(APPLSRC)/ocean.h $(CMMDSRC)/CMMDlib.h


clean:
	rm -f $(OBJS) $(OCN_OBJS) core


