#/****************************************************************************
#**  SIONLIB     http://www.fz-juelich.de/jsc/sionlib                       **
#*****************************************************************************
#**  Copyright (c) 2008-2018                                                **
#**  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

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

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

USER_HDRS = sion_datatypes_mpi.h sion_mpi.h sion_ompi.h sion_omp.h sion_generic.h
USER_LIBS = lib$(SION_LIBNAME_GEN).a

SION_OBJS_GEN = sion_generic.o \
		sion_generic_apidesc.o \
		sion_generic_buddy.o \
		sion_generic_collective.o \
		sion_generic_collective_merge.o \
		sion_generic_internal.o \
		sion_generic_mapped.o \

SION_OBJS_INTERNAL = sion_lock.o

ifeq ($(OMPENABLE),1)
  SION_OBJS_OMP = sion_omp_cb_gen.o \
		  sion_omp_gen.o \
		  sion_omp_internal_gen.o \

  USER_HDRS += sion_omp.h
  USER_LIBS += lib$(SION_LIBNAME_OMP).a
endif

ifeq ($(MPIENABLE),1)
  SION_OBJS_MPI = sion_mpi_cb_gen.o \
                  sion_mpi_coll_cb_gen.o \
                  sion_mpi_deprecated.o \
                  sion_mpi_file_check.o \
                  sion_mpi_gen.o \
                  sion_mpi_internal_gen.o \
                  sion_mpi_util.o  \

  USER_HDRS += sion_datatypes_mpi.h sion_mpi.h
  USER_LIBS += lib$(SION_LIBNAME_MPI).a
endif
ifeq ($(HYBENABLE),1)
  SION_OBJS_HYB = sion_ompi_cb_gen.o \
		  sion_ompi_coll_cb_gen.o \
		  sion_ompi_gen.o \
		  sion_ompi_internal_gen.o \
		  sion_ompi_util.o \

  USER_HDRS += sion_datatypes_mpi.h sion_ompi.h
  USER_LIBS += lib$(SION_LIBNAME_OMPI).a
endif

ifeq ($(HYBENABLE),1)
  LOCKCC    =$(HYBCC)
  LOCKCFLAGS=$(CHYBFLAGS)
else
ifeq ($(OMPENABLE),1)
  LOCKCC    =$(OMPCC)
  LOCKCFLAGS=$(COMPFLAGS)
else
  LOCKCC    =$(CC)
  LOCKCFLAGS=$(CFLAGS)
endif
endif

SION_OBJS = $(SION_OBJS_GEN) $(SION_OBJS_INTERNAL) $(SION_OBJS_OMP) $(SION_OBJS_MPI) $(SION_OBJS_HYB)

.PHONY: all
all: $(USER_LIBS)

lib$(SION_LIBNAME_GEN).a : $(SION_OBJS_GEN) $(SION_OBJS_INTERNAL)

lib$(SION_LIBNAME_OMP).a : $(SION_OBJS_OMP) $(SION_OBJS_INTERNAL)

lib$(SION_LIBNAME_MPI).a : $(SION_OBJS_MPI) $(SION_OBJS_INTERNAL)

lib$(SION_LIBNAME_OMPI).a : $(SION_OBJS_HYB) $(SION_OBJS_INTERNAL)

%a:
	$(C_AR) $(AFLAG) -rcs $@ $+
	@echo "*** $@ built"

sion_lock.o : sion_lock.c
	$(LOCKCC) $(LOCKCFLAGS) $(CFLAGS) -c sion_lock.c

$(SION_OBJS_GEN): %.o: %.c
	$(CC) $(CFLAGS) -c $<

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

$(SION_OBJS_OMP): %.o: %.c
	$(OMPCC) $(COMPFLAGS) $(CFLAGS) -c $<

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

sion_lock.d : sion_lock.c
	@set -e; rm -f $@; \
        $(LOCKCC) $(LOCKCFLAGS) $(CFLAGS) -MM $< > $@.$$$$; \
	sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
	rm -f $@.$$$$

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

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

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

$(SION_OBJS_MPI:%.o=%.d): %.d: %.c
	@set -e; rm -f $@; \
        $(MPICC) $(CMPIFLAGS) $(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

.PHONY: clean
clean:
	rm -f *.d *.o lib*.a

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