# ARMCI makefile for Windows NT nmake

#if you do not have fortran compiler you can build ARMCI by defining
#NOFORT = 1
!ifdef NOFORT
FORTDEF  =-DNOFORT
!endif

#you can use MT library
#MT=1
!ifdef MT
   MTDEF = -DNO_STDLIBC
   MTLIB = /MT /link /NODEFAULTLIB:libc.lib
   MTOPT = /MT
!endif


LIBRARY=armci.lib
LIBDIR =..\..\lib\win32
OBJDIR =.\obj
PRJDIR =.\NTprojects
LIBRARY_PATH = $(LIBDIR)\$(LIBRARY)

DEFINES  =-DWIN32 -DDATA_SERVER -DSERVER_THREAD -DSOCKETS $(FORTDEF) $(MTDEF)
INCLUDES =-I$(MPI_INCLUDE)

AR = link.exe -lib 
ARFLAGS = /nologo /out:$(LIBRARY_PATH)

CC = cl
COPT = -nologo -W3 -GX -O2 $(MTOPT)
CFLAGS = $(COPT) $(DEFINES) $(INCLUDES) -Fo"$(OBJDIR)/" -c

FC = fl32
FOPT = -nologo -G5 -Ox
FFLAGS = $(FOPT) -Fo"$(OBJDIR)/" -c

#path and name of MPI library
MPI_LIB_NAME=Cvwmpi.lib
#MPI_LIB_NAME=mpich.lib
LIBS = $(MPI_LIB)\$(MPI_LIB_NAME) wsock32.lib $(MTLIB)

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

COBJ =  "$(OBJDIR)\winshmem.obj" \
        "$(OBJDIR)\shmalloc.obj" \
        "$(OBJDIR)\rmw.obj" \
        "$(OBJDIR)\clusterinfo.obj" \
        "$(OBJDIR)\memory.obj" \
        "$(OBJDIR)\mutex.obj" \
        "$(OBJDIR)\message.obj" \
        "$(OBJDIR)\locks.obj" \
        "$(OBJDIR)\fence.obj" \
        "$(OBJDIR)\acc.obj" \
        "$(OBJDIR)\strided.obj" \
        "$(OBJDIR)\armci.obj" \
        "$(OBJDIR)\vector.obj"\
        "$(OBJDIR)\pack.obj"\
        "$(OBJDIR)\memlock.obj"\
        "$(OBJDIR)\dataserv.obj"\
        "$(OBJDIR)\spawn.obj"\
        "$(OBJDIR)\request.obj"\
        "$(OBJDIR)\kr_malloc.obj"\
        "$(OBJDIR)\ds-shared.obj"\
        "$(OBJDIR)\buffers.obj"\
        "$(OBJDIR)\async.obj"\
        "$(OBJDIR)\aggregate.obj"\
        "$(OBJDIR)\sockets.obj"

!ifndef NOFORT
FOBJ =  "$(OBJDIR)\fcopy.obj" \
        "$(OBJDIR)\faccumulate.obj"
!endif

OBJ = $(COBJ) $(FOBJ)

$(LIBRARY_PATH): $(LIBDIR) $(OBJ)
	$(AR) @<<
	$(ARFLAGS) $(OBJ)
<<

"$(LIBDIR)" :
    if not exist "$(LIBDIR)\$(NULL)" mkdir "$(LIBDIR)"

"$(OBJDIR)" :
    if not exist "$(OBJDIR)\$(NULL)" mkdir "$(OBJDIR)"

.c{$(OBJDIR)}.obj:
	$(CC) $(CFLAGS) $<

.f{$(OBJDIR)}.obj:
	$(FC) $(FFLAGS) $<

$(OBJ): $(OBJDIR) armci.h armcip.h
$(OBJDIR)/test.obj: $(OBJDIR) armci.h

test.exe: $(OBJDIR)/test.obj $(LIBRARY_PATH)
	$(CC) $(COPT) -Fe$@ $** $(LIBS)

#	-@erase /q  $(OBJDIR)\* *.exe $(PRJDIR)\*.idb $(PRJDIR)\*.pch $(PRJDIR)\*.pdb  $(LIBRARY_PATH)
clean:
	-@erase /q  $(OBJDIR)\* *.exe  $(LIBRARY_PATH)
	-@rmdir $(OBJDIR)
	-@erase /q  $(PRJDIR)\*.idb $(PRJDIR)\*.pch $(PRJDIR)\*.pdb
