########################################################################
# Compiler and external dependences
########################################################################
CC        = mpicc
F77       = mpif77
CXX       = mpiCC
HYPRE_DIR = ../hypre

########################################################################
# Compiling and linking options
########################################################################
COPTS     = -g -pedantic -Wall
CINCLUDES = -I$(HYPRE_DIR)/include
CDEFS     = -DHAVE_CONFIG_H -DHYPRE_TIMING
CFLAGS    = $(COPTS) $(CINCLUDES) $(CDEFS)
FOPTS     = -g
FINCLUDES = $(CINCLUDES)
FDEFS     = $(CDEFS)
FFLAGS    = $(FOPTS) $(FINCLUDES) $(FDEFS)
CXXOPTS   = $(COPTS)
CXXINCLUDES = $(CINCLUDES) -I..
CXXDEFS   = $(CDEFS)
IFLAGS_BXX = -I../babel-runtime/sidl
CXXFLAGS  = $(CXXOPTS) $(CXXINCLUDES) $(CXXDEFS) $(IFLAGS_BXX)

LINKOPTS  = $(COPTS)
LIBS      = -L$(HYPRE_DIR)/lib -lHYPRE -lg2c -lm
LFLAGS    = $(LINKOPTS) $(LIBS) -lstdc++
LFLAGS_B =\
 -L${HYPRE_DIR}/lib\
 -L${HYPRE_DIR}/../babel-runtime/sidl/.libs\
 -lbHYPREClient-C\
 -lbHYPREClient-CX\
 -lbHYPREClient-F\
 -lbHYPRE\
 -lsidl -ldl -lxml2

########################################################################
# Rules for compiling the source files
########################################################################
.SUFFIXES: .c .f .cxx
.c.o:
	$(CC) $(CFLAGS) -c $<
.f.o:
	$(F77) $(FFLAGS) -c $<
.cxx.o:
	$(CXX) $(CXXFLAGS) -c $<

########################################################################
# List of all programs to be compiled
########################################################################
ALLPROGS = ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 ex10
BABELPROGS = ex5b ex5b77 ex5bxx

all: $(ALLPROGS)

babel: $(BABELPROGS)

########################################################################
# Example 1
########################################################################
ex1: ex1.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 2
########################################################################
ex2: ex2.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 3
########################################################################
ex3: ex3.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 4
########################################################################
ex4: ex4.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 5
########################################################################
ex5: ex5.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 5 Babel C
########################################################################
ex5b: ex5b.o
	$(CC) -o $@ $^ $(LFLAGS_B) $(LFLAGS)

########################################################################
# Example 5 Babel Fortran 77
########################################################################
ex5b77: ex5b77.o
	$(F77) -o $@ $^ $(LFLAGS_B) $(LFLAGS)

########################################################################
# Example 5 Babel C++
########################################################################
ex5bxx: ex5bxx.o
	$(CXX) -o $@ $^ $(LFLAGS_B) $(LFLAGS)

########################################################################
# Example 6
########################################################################
ex6: ex6.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 7
########################################################################
ex7: ex7.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 8
########################################################################
ex8: ex8.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 9
########################################################################
ex9: ex9.o
	$(CC) -o $@ $^ $(LFLAGS)

########################################################################
# Example 10
########################################################################
ex10: ex10.o
	$(CXX) -o $@ $^ $(LFLAGS)

########################################################################
# Clean up
########################################################################
clean:
	rm -f $(ALLPROGS:=.o)
	rm -f $(BABELPROGS:=.o)
veryclean distclean: clean
	rm -f $(ALLPROGS) $(ALLPROGS:=*~)
	rm -f $(BABELPROGS) $(BABELPROGS:=*~)
	rm -rf *.html README_files
