PROGRAM = ../oth_cuda_mpi

MPIOPT  = -D_MPI -I$(MPI_INCLUDE)

OBJS    =        \
Main.o           \
info_gpu_mpi.o   \
rank2device.o    \
bicgstab.o       \
copyV.o          \
comm2.o          \
../cuda/memory_gpu.o     \
../cuda/solve.o          \
../cuda/pbcX.o           \
../cuda/pbcY.o           \
../cuda/pbcZ.o           \
../cuda/prodmv.o         \
../cuda/matrixEx.o       \
../cuda/matrixEy.o       \
../cuda/matrixEz.o       \
../cuda/prodmvEx.o       \
../cuda/prodmvEy.o       \
../cuda/prodmvEz.o       \
../cuda/blas1c.o         \
../cuda/check_gpu.o      \
../cuda/cuda_memory.o    \
../mpi/setupIndex_mpi.o \
../mpi/setupBg_mpi.o    \
../mpi/copyE.o          \
../mpi/comm.o           \
../sol/input_data.o     \
../sol/input2.o         \
../sol/monitor.o        \
../sol/memory.o         \
../cuda/setup.o          \
../sol/arrayIndex.o     \
../cuda/setupMaterial.o  \
../sol/setup2.o         \
../sol/rhs.o            \
../cuda/planewaveEx.o    \
../cuda/planewaveEy.o    \
../cuda/planewaveEz.o    \
../sol/planewave.o      \
../sol/eyee.o           \
../sol/hyee.o           \
../sol/cyee.o           \
../sol/outputChars.o    \
../sol/outputZin.o      \
../sol/outputSpara.o    \
../sol/outputCoupling.o \
../sol/outputCross.o    \
../cuda/outputPloss.o    \
../sol/ingeometry.o     \
../sol/geomlines.o      \
../sol/farfield.o       \
../sol/writeout.o       \
../sol/utils.o          \
../sol/cputime.o        \
../sol/plot3dGeom.o     \
../sol/ev3d.o

CC      = nvcc
CFLAGS  = -O2 -I../include
LDFLAGS = -O2 -L$(MPI_LIB)
LIBS    = -lmpi

$(PROGRAM): $(OBJS)
	@echo "Loading $(PROGRAM) ... "
	@$(CC) -o $(PROGRAM) $(LDFLAGS) $(OBJS) $(LIBS)

.SUFFIXES: .cu

comm2.o: comm2.cu
	$(CC) -c $(CFLAGS) $(MPIOPT) $?

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

clean:
	rm -f *.o
