#/****************************************************************************
#**  SIONLIB     http://www.fz-juelich.de/jsc/sionlib                       **
#*****************************************************************************
#**  Copyright (c) 2008-2019                                                **
#**  Forschungszentrum Juelich, Juelich Supercomputing Centre               **
#**                                                                         **
#**  See the file COPYRIGHT in the package base directory for details       **
#****************************************************************************/
#------------------------------------------------------------------------------
# General Settings
#------------------------------------------------------------------------------

TOPDIR = ..

include $(TOPDIR)/Makefile.defs
include $(TOPDIR)/mf/common.defs
include $(TOPDIR)/mf/Makefile.svnrev

CFLAGS += $(SION_DEBUG) $(SION_PTHREADS)
CFLAGS += -I. -I../lib -I../parlib
CFLAGS += $(SION_PLATFORM)

CMPIFLAGS = $(MPIMFLAG)
COMPFLAGS = $(OMPMFLAG) $(OMPFLAG)
CHYBFLAGS = $(HYBMFLAG) $(HYBFLAG)

CMPILDFLAGS = $(LDFLAGS) -L../parlib -l$(SION_LIBNAME_MPI) -L../lib -l$(SION_LIBNAME_GEN) -L../lib -l$(SION_LIBNAME_COM) -l$(SION_LIBNAME_COM_LOCK_PTHREADS) $(HINTSLIB)

COMPLDFLAGS = $(LDFLAGS) -L../parlib -l$(SION_LIBNAME_OMP)  -L../lib -l$(SION_LIBNAME_COM) -l$(SION_LIBNAME_COM_LOCK_PTHREADS) $(HINTSLIB) $(OMPFLAG)
CHYBLDFLAGS = $(LDFLAGS) -L../parlib -l$(SION_LIBNAME_OMPI) -L../lib -l$(SION_LIBNAME_GEN) -L../lib -l$(SION_LIBNAME_COM) -l$(SION_LIBNAME_COM_LOCK_PTHREADS) $(HINTSLIB) $(OMPFLAG)

FMPILDFLAGS = $(LDFLAGS) -L../parlib -l$(SION_LIBNAME_MPI) -L../lib -l$(SION_LIBNAME_GEN) -L../lib -l$(SION_LIBNAME_SER) -l$(SION_LIBNAME_COM) -l$(SION_LIBNAME_COM_LOCK_PTHREADS) $(HINTSLIB)
FOMPLDFLAGS = $(COMPLDFLAGS)  $(OMPFLAG)
FHYBLDFLAGS = $(COMPILDFLAGS) $(OMPFLAG)

CFLAGS += -DSVN_REV='"$(SVN_REV)"'

.SUFFIXES:  .cpp .c .f

USER_HDRS =
USER_LIBS =

ifeq ($(MPIENABLE),1)
  USER_UTILS += partest
endif
ifeq ($(HYBENABLE),1)
  USER_UTILS += ompi_partest
endif
ifeq ($(FORTRANENABLE),1)
  ifeq ($(MPIENABLE),1)
    USER_UTILS += fpartest
  endif
endif

PARTEST_OBJS = partest.o \
	partest_split_comm.o \
	partest_sionfile.o \
	partest_mpiio.o \
	partest_tasklocalfile.o \
	partest_util.o \
	partest_opts.o \

PARTEST_OMPI_OBJS = ompi_partest.o \
	ompi_partest_sionfile.o \
	omp_partest_sionfile.o \

FPARTEST_OBJS = fpartest.o

SION_OBJS = $(PARTEST_OBJS) $(PARTEST_OMPI_OBJS) $(FPARTEST_OBJS)

.PHONY: all
all: $(USER_UTILS)

partest: $(PARTEST_OBJS) ../parlib/lib$(SION_LIBNAME_MPI).a  ../parlib/lib$(SION_LIBNAME_GEN).a  ../lib/lib$(SION_LIBNAME_SER).a
	$(MPICC) -o $@ $(PARTEST_OBJS) -L../lib -l$(SION_LIBNAME_SER) $(CMPILDFLAGS) $(MPILIB)

ompi_partest: $(PARTEST_OMPI_OBJS) partest_opts.o ../parlib/lib$(SION_LIBNAME_OMPI).a ../parlib/lib$(SION_LIBNAME_OMP).a ../lib/lib$(SION_LIBNAME_SER).a
	$(HYBCC) -o $@ $(PARTEST_OMPI_OBJS) partest_opts.o $(CHYBLDFLAGS) -L../parlib -l$(SION_LIBNAME_OMP) -L../lib -l$(SION_LIBNAME_SER)  $(MPILIB)

fpartest: fpartest.o  ../parlib/lib$(SION_LIBNAME_MPI).a  ../parlib/lib$(SION_LIBNAME_GEN).a ../lib/lib$(SION_LIBNAME_SER).a ../fortraninterface/lib$(SION_LIBNAME_F77_MPI).a ../fortraninterface/lib$(SION_LIBNAME_F77_SER).a
	$(MPIF90) -o $@ fpartest.o  -L../fortraninterface -l$(SION_LIBNAME_F77_MPI) -l$(SION_LIBNAME_F77_SER) $(FMPILDFLAGS) $(MPILIB)

$(PARTEST_OBJS): %.o: %.c
	$(MPICC) $(CMPIFLAGS) $(CFLAGS) -c $<

$(PARTEST_OMPI_OBJS): %.o: %.c
	$(HYBCC) $(CHYBFLAGS) $(COMPFLAGS) $(CFLAGS) -c $<

$(FPARTEST_OBJS): %.o: %.F90
	$(MPIF90) $(FFLAGS) -c $<

$(PARTEST_OBJS:%.o=%.d): %.d: %.c
	@set -e; rm -f $@; \
        $(MPICC) $(CMPIFLAGS) $(CFLAGS) -MM $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

$(PARTEST_OMPI_OBJS:%.o=%.d): %.d: %.c
	@set -e; rm -f $@; \
        $(HYBCC) $(CHYBFLAGS) $(CFLAGS) -MM $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

.PHONY: install
install: all
	$(MKDIR) -m 755 $(INCDIR)
	@list='$(USER_HDRS)'; for p in $$list; do \
		echo "$(INSTALL) -c -m 644 $$p $(INCDIR)" ; \
		eval "$(INSTALL) -c -m 644 $$p $(INCDIR)" ; \
	done
	$(MKDIR) -m 755 $(LIBDIR)
	@list='$(USER_LIBS)'; for p in $$list; do \
		echo "$(INSTALL) -c -m 644 $$p $(LIBDIR)" ; \
		eval "$(INSTALL) -c -m 644 $$p $(LIBDIR)" ; \
	done
	$(MKDIR) -m 755 $(BINDIR)
	@list='$(USER_UTILS)'; for p in $$list; do \
		echo "$(INSTALL) -c -m 755 $$p $(BINDIR)" ; \
		eval "$(INSTALL) -c -m 755 $$p $(BINDIR)" ; \
	done

.PHONY: clean
clean:
	rm -f *.o lib*.a $(USER_UTILS)

#------------------------------------------------------------------------------
# Dependencies
#------------------------------------------------------------------------------

-include $(SION_OBJS:%.o=%.d)
