#/****************************************************************************
#**  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

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

SION_COMMON_OBJS = sion_buddy_common.o \
		   sion_buffer.o \
		   sion_common.o \
		   sion_convert.o \
		   sion_debug.o \
		   sion_dup.o \
		   sion_error_handler.o \
		   sion_fd.o \
		   sion_file.o \
		   sion_filedesc.o \
		   sion_flags.o \
		   sion_hints.o \
		   sion_hints_gpfs.o \
		   sion_hints_linux.o \
		   sion_internal.o \
		   sion_internal_collstat.o \
		   sion_internal_seek.o \
		   sion_internal_positioning.o \
		   sion_internal_startptr.o \
		   sion_keyvalue.o \
		   sion_keyvalue_inline.o \
		   sion_keyvalue_keymngr.o \
		   sion_keyvalue_table.o \
		   sion_metadata.o \
		   sion_printts.o \

SION_COMMON_LOCK_PTHREADS_OBJS = sion_lock_pthreads.o
SION_COMMON_LOCK_NONE_OBJS = sion_lock_none.o
SION_COMMON_LOCK_OBJS = sion_lock.o

SION_SER_OBJS = sion_serial.o

SION_OBJS = $(SION_COMMON_OBJS) $(SION_COMMON_LOCK_PTHREADS_OBJS) $(SION_COMMON_LOCK_NONE_OBJS) \
	    $(SION_COMMON_LOCK_OBJS) $(SION_SER_OBJS)

ifeq ($(CXXENABLE),1)
SION_CXX_HDR =
endif

USER_HDRS = sion.h sion_common.h sion_serial.h sion_const.h sion_datatypes.h sion_platform.h \
	    sion_debug.h sion_enums.h sion_printts.h $(SION_CXX_HDR)
USER_LIBS = lib$(SION_LIBNAME_SER).a lib$(SION_LIBNAME_COM).a lib$(SION_LIBNAME_COM_LOCK_PTHREADS).a \
	    lib$(SION_LIBNAME_COM_LOCK_NONE).a 

.PHONY: all
all: $(USER_LIBS)

lib$(SION_LIBNAME_COM).a : $(SION_COMMON_OBJS)

lib$(SION_LIBNAME_COM_LOCK_PTHREADS).a : $(SION_COMMON_LOCK_PTHREADS_OBJS)

lib$(SION_LIBNAME_COM_LOCK_NONE).a : $(SION_COMMON_LOCK_NONE_OBJS)

lib$(SION_LIBNAME_SER).a : $(SION_SER_OBJS)

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

sion_lock_pthreads.o: sion_lock.c
	$(CC) $(CFLAGS) -DSION_USE_PTHREADS -c $< -o $@

sion_lock_none.o: sion_lock.c
	$(CC) $(CFLAGS) -c $< -o $@

sion_hints.o sion_hints_linux.o sion_hints_gpfs.o: %.o: %.c
	$(CC) $(CFLAGS) $(HINTSDEF) $(HINTSINC) -c $<

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

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

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

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

%.d: %.c
	@set -e; rm -f $@; \
        $(CC) $(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 *.o *.d lib*.a

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