#
# This is a makefile for GRAPE-DR.
# For other architectures, set GARCH and HIB as follows:
#
#          GRAPE-DR   GRAPE-7   GRAPE-6BX     GRAPE-6A   Phantom-GRAPE-5
# GARCH    gdr        g7        g6bx          g6a        pg5
# HIB      hib        hib       g6bxhib       -          -
#
# For GRAPE-DR, GRAPE-7 and GRAPE-6BX, set HIBLIB
# and LINKHIB as follows:
#   HIBLIB   = $(LIBPATH)/lib$(HIB).a
#   LINKHIB  = -l$(HIB)
#
# For Phantom-GRAPE-5 with OpenMP enabled, set LDFLAGS and CFLAGS as follows:
#   LDFLAGS += -fopenmp
#   CFLAGS += -fopenmp
#
# For CUDA G5/G6, set LDFLAGS and CFLAGS as follows:
#   LDFLAGS += -L$(cudapath)/lib -lcudart
# Here, 'cudapath' and 'cudasdkpath' denotes the path which
# CUDA Toolkit and SDK are installed into.
# By default, numerical format 'double single' is used.
# For single-precision, use '-lcuda5s' instead of '-cuda5'.
#
# An architecuture-independent makefile can be found at Makefile.generic.
#

GARCH    = gdr
HIB      = hib
INCPATH  = ../../include
LIBPATH  = ../../lib
CC = gcc
CFLAGS   = -O3 -c -I$(INCPATH)
LDFLAGS  = -L$(LIBPATH) -L/usr/X11R6/lib64

OBJS     = direct.o      util.o
AOBJS    = directa.o     util.o animation.o ksort.o Xtc.o
MOBJS    = directmc.o    util.o
TOBJS    = directtest.o  util.o
TAOBJS   = directtesta.o util.o animation.o ksort.o Xtc.o
NBOBJS   = directnb.o    util.o
NBAOBJS  = directnba.o   util.o animation.o ksort.o Xtc.o
TARGET0  = direct_$(GARCH) directmc_$(GARCH) directtest_$(GARCH) directnb_$(GARCH) mkdist
TARGET1  = direct_$(GARCH)
TARGET   = direct_$(GARCH) directa_$(GARCH) directmc_$(GARCH) directtest_$(GARCH) \
           directtesta_$(GARCH) directnb_$(GARCH) directnba_$(GARCH) mkdist

HIBLIB  = $(LIBPATH)/lib$(HIB).a
LINKHIB = -l$(HIB)

compatible:	$(TARGET1)

minimum:	$(TARGET0)

all:		$(TARGET)

direct_$(GARCH):	$(OBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(OBJS) -l$(GARCH)5 $(LINKHIB) -lm

directa_$(GARCH):	$(AOBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(AOBJS) -l$(GARCH)5 $(LINKHIB) -lX11 -lm

directmc_$(GARCH):	$(MOBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(MOBJS) -l$(GARCH)5 $(LINKHIB) -lm

directtest_$(GARCH):	$(TOBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(TOBJS) -l$(GARCH)5 $(LINKHIB) -lm

directtesta_$(GARCH):	$(TAOBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(TAOBJS) -l$(GARCH)5 $(LINKHIB) -lX11 -lm

directnb_$(GARCH):	$(NBOBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(NBOBJS) -l$(GARCH)5nb $(LINKHIB) -lm

directnba_$(GARCH):	$(NBAOBJS) $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ $(NBAOBJS) -l$(GARCH)5nb $(LINKHIB) -lX11 -lm

directa.o:	direct.c
		$(CC) $(CFLAGS) -DANIM -o $@ direct.c

directtesta.o:	directtest.c
		$(CC) $(CFLAGS) -DANIM -o $@ directtest.c

directnba.o:	directnb.c
		$(CC) $(CFLAGS) -DANIM -o $@ directnb.c

multiwalktest_$(GARCH):	multiwalktest.o util.o $(LIBPATH)/lib$(GARCH)5.a $(HIBLIB)
		$(CC) $(LDFLAGS) -o $@ multiwalktest.o util.o -l$(GARCH)5 $(LINKHIB) -lm

mkdist:		mkdist.o util.o
		$(CC) $(LDFLAGS) -o $@ mkdist.o util.o -lm
clean:
		-rm *.o tmp*.{log,snap} $(TARGET1) direct_* directtesta_* directnba_* multiwalktest_*

bak:
		-tar cvfz direct.tar.gz ./*.[hc] ./*.pl ./*.csh ./*.awk ./pl2k ./snapshots/
