# -*-Makefile-*-
# $Id: Makefile,v 1.15 2003/12/15 16:52:21 pletzer Exp $
# Use gmake!

# Any definition such as F90 and OPT can be overloaded
# using gmake F90=... OPT=... NTCC=... 
# 
# Examples
# gmake F90=lf95 NTCC=/usr/ntcc/lff95 OPT=-g SUPERLU=/usr/local/superlu BLAS=/usr/local/lff95/lib GSL=/usr/local/GSL-1.4
# gmake F90=ifc NTCC=/usr/ntcc/ifc SUPERLU=/usr/local/superlu BLAS=/usr/local/ifc/lib CLIB=-lPEPCF90


# Compiler dependencies
#######################
F90 = f90
OPT = -O
FOPT = $(OPT)
CC = cc
COPT = $(OPT)

# Library and module dependencies
#################################
# top directory where ezcdf resides
NTCC = /usr/ntcc

NETCDF = -L/usr/local
SUPERLU = /usr/local
GSL = /usr/local
BLAS= /usr/local
CLIB =  # C library needed to link with Fortran compiler
#################################

LIBS = -L./ -l$(PACKAGE) \
	-L$(NTCC)/lib -lezcdf \
	-L$(NETCDF)/lib -lnetcdf \
	-L$(SUPERLU)/lib -lsuperlu \
	-L$(BLAS)/lib -lblas \
	-L$(GSL)/lib -lgsl -lgslcblas \
	$(CLIB)
MODS =  -I./ -I$(NTCC)/mod

PACKAGE = gaco
DRIVERS_F90 = tester.f90 driver.f90
DRIVERS_O = $(subst .f90,.o,$(DRIVERS_F90))
DRIVERS = $(subst .f90,,$(DRIVERS_F90))
OBJ = $(subst .f90,.o,$(filter-out $(DRIVERS_O), $(wildcard *.f90)))
OBJ += $(subst .c,.o,$(wildcard *.c))

all: $(DRIVERS)

lib$(PACKAGE).a: $(OBJ)
	ar rf $@ $(OBJ)


tester: tester.o lib$(PACKAGE).a
	$(F90) $(FOPT) -o $@ $< -L./ $(LIBS)
driver: driver.o lib$(PACKAGE).a
	$(F90) $(FOPT) -o $@ $< -L./ $(LIBS)


%.o: %.f90
	$(F90) -c $(FOPT) $(MODS) -o $@ $<

%.o: %.c
	$(CC) -c $(COPT) -I$(SUPERLU)/include -I$(GSL)/include -o $@ $<


clean:
	rm -f *.o

realclean: clean
	rm -f *.mod *.a $(DRIVERS)

tester.o: $(OBJ)
driver.o: $(OBJ)
airy.o: supralu_mod.o indexer.o gabor.o xkzgrid.o operators.o plotmtv.o 
singular.o: supralu_mod.o indexer.o gabor.o xkzgrid.o operators.o plotmtv.o 
coupled.o: supralu_mod.o indexer.o gabor.o xkzgrid.o operators.o plotmtv.o 
eigenwave.o: supralu_mod.o indexer.o gabor.o xkzgrid.o operators.o plotmtv.o
eigenbessel.o: supralu_mod.o indexer.o gabor.o xkzgrid.o operators.o plotmtv.o
ktae.o: supralu_mod.o indexer.o gabor.o xkzgrid.o operators.o plotmtv.o
