# this makefile is designed for Unix machines (optimized for maximum speed)
# compile using make -f makefile.unix

CC=gcc
CLUSPLUS=g++
CFLAGS=-O3 -funroll-loops -fomit-frame-pointer -fcaller-saves -ffast-math -DUNIX -DMALLOC 
LD=$(CC)
LDFLAGS=
LDLIBS=-lm 

#ifdef ANASTAS
#Anastas_OBJ=Anastas/atractor.o Anastas/htable.o Anastas/lians.o Anastas/parser.o Anastas/surtree.o
#CFLAGS+=-DANASTAS
#LD=$(CPLUSPLUS)
#endif

all: Dgm Plotdgm
Dgm: FileIO.o Memory.o Mesh.o Progress.o Dgm.o Solver.o Time.o Triangle.o Implicit.o Explicit.o Inter-face.o Matrix_Solver.o Frame.o
	f77  $(LDFLAGS) $(LDLIBS) -o $@ FileIO.o Memory.o Mesh.o Progress.o Dgm.o Solver.o Time.o Triangle.o Implicit.o Explicit.o Inter-face.o Matrix_Solver.o Frame.o


Plotdgm: FileIO.o Memory.o Mesh.o Progress.o Plotdgm.o Solver.o Time.o Triangle.o Explicit.o
	$(LD) $(LDFLAGS) $(LDLIBS) -o $@ FileIO.o Memory.o Mesh.o Progress.o Plotdgm.o Solver.o Time.o Triangle.o  Explicit.o

Dgm.o: Dgm.c FileIO.h Memory.h Mesh.h Solver.h Time.h Types.h Matrix.h Implicit.h
	$(CC) $(CFLAGS) -c -o $@ Dgm.c 

Plotdgm.o: Plotdgm.c FileIO.h Memory.h Mesh.h Solver.h Time.h Types.h 
	$(CC) $(CFLAGS) -c -o $@ Plotdgm.c 

Triangle.o: Triangle.c Triangle.h Types.h
	$(CC) $(CFLAGS) -c -o $@ Triangle.c

FileIO.o: FileIO.c FileIO.h Memory.h Types.h
	$(CC) $(CFLAGS) -c -o $@ FileIO.c

Solver.o: Solver.c FileIO.c FileIO.h Memory.h Mesh.h Progress.h Solver.h Triangle.h Types.h Matrix.h
	$(CC) $(CFLAGS) -c -o $@ Solver.c

Time.o: Time.c
	$(CC) $(CFLAGS) -c -o $@ Time.c

Mesh.o : Mesh.c Error.h FileIO.o Memory.h Mesh.h Progress.h Types.h
	$(CC) $(CFLAGS) -c -o $@ Mesh.c

Memory.o: Memory.c Error.h Memory.h Types.h
	$(CC) $(CFLAGS) -c -o $@ Memory.c

Progress.o: Progress.c Progress.h Types.h
	$(CC) $(CFLAGS) -c -o $@ Progress.c

Implicit.o: Implicit.c  FileIO.c FileIO.h Matrix.h Memory.h Mesh.h Progress.h Solver.h Triangle.h Types.h Implicit.h Matrix.h
	$(CC) $(CFLAGS) -c -o $@ Implicit.c

Explicit.o: Explicit.c  FileIO.c FileIO.h Memory.h Mesh.h Progress.h Solver.h Triangle.h Types.h Matrix.h
	$(CC) $(CFLAGS) -c -o $@ Explicit.c

Inter-face.o: Inter-face.f
	f77 $(CFLAGS) -c Inter-face.f

Frame.o: Frame.f
	f77 $(CFLAGS) -c Frame.f

Matrix_Solver.o : Matrix_Solver.f
	f77 $(CFLAGS) -c Matrix_Solver.f

