##########################################
#                                        #
#  Makefile for DirectSearch             #
#                                        #
#  Anne Shepherd                         #
#  College of William and Mary           #
#  Spring 01                             #
#                                        #
##########################################

CC = g++        
CFLAGS = -Wall -g   
#CFLAGS = -Wall -g 

SRC = objective.cc DirectSearch.cc PatternSearch.cc \
	CoordinateSearch.cc CompassSearch.cc MultiCompassSearch.cc \
	NLessSearch.cc HJSearch.cc EdHJSearch.cc SimplexSearch.cc \
	SHHSearch.cc NMSearch.cc SMDSearch.cc rngs.c rvgs.c \
	standalone.cc main_default.cc main_eval.cc main_spec.cc \
	main_arb.cc main_fail.cc main_hy.cc main_obj.cc trigclass.cc 
HDR = DirectSearch.h PatternSearch.h objective.h \
	CoordinateSearch.h CompassSearch.h MultiCompassSearch.h \
	NLessSearch.h HJSearch.h EdHJSearch.h SimplexSearch.h \
	SHHSearch.h NMSearch.h SMDSearch.h Hybrid_NMSearch.h \
	trigclass.h rngs.h rvgs.h vec.h cppmat.h \
	Dyn_alloc.h maps_general.h

COMHDR = cppmat.h vec.h objective.h  

COBJ = DirectSearch.o PatternSearch.o objective.o \
	CoordinateSearch.o CompassSearch.o MultiCompassSearch.o \
	NLessSearch.o HJSearch.o EdHJSearch.o SimplexSearch.o \
	SHHSearch.o NMSearch.o SMDSearch.o Hybrid_NMSearch.o \
	trigclass.o rngs.o rvgs.o

# Pattern Search object sets
POBJ = DirectSearch.o PatternSearch.o objective.o
COOROBJ =  $(POBJ) CoordinateSearch.o 
CMPOBJ =  $(POBJ) CompassSearch.o 
MCOBJ = $(CMPROBJ) MultiCompassSearch.o rngs.o rvgs.o
NLOBJ = $(POBJ) NLessSearch.o
HJOBJ = $(POBJ) HJSearch.o
EHJOBJ =  $(POBJ) EdHJSearch.o
ALLP = $(POBJ) CoordinateSearch.o CompassSearch.o \
	MultiCompassSearch.o rngs.o rvgs.o NLessSearch.o \
	HJSearch.o EdHJSearch.o

# Simplex Search object sets
SOBJ = DirectSearch.o SimplexSearch.o objective.o
NMOBJ = $(SOBJ) NMSearch.o
SHHOBJ = $(SOBJ) SHHSearch.o
SMDOBJ = $(SOBJ) SMDSearch.o
HYOBJ = $(NMOBJ) PatternSearch.o EdHJSearch.o Hybrid_NMSearch.o
ALLS = $(SOBJ) NMSearch.o SHHSearch.o SMDSearch.o PatternSearch.o \
	EdHJSearch.o Hybrid_NMSearch.o 

LIBS = -lm

.cc.o: $*o
	${CC} -c ${CFLAGS} $*.cc

all: main_default main_spec main_eval main_arb main_fail \
	main_hy main_obj standalone

eval: main_eval standalone

main_default: $(SMDOBJ) main_default.o
	$(CC) $(CFLAGS) $(LIBS) -o main_default $(SMDOBJ) main_default.o

main_spec: $(NMOBJ) main_spec.o
	$(CC) $(CFLAGS) $(LIBS) -o main_spec $(NMOBJ) main_spec.o 

main_eval: $(CMPOBJ) main_eval.o
	$(CC) $(CFLAGS) $(LIBS) -o main_eval $(CMPOBJ) main_eval.o

main_arb: $(NMOBJ) main_arb.o
	$(CC) $(CFLAGS) $(LIBS) -o main_arb $(NMOBJ) main_arb.o 

main_obj: $(HJOBJ) main_obj.o trigclass.o
	$(CC) $(CFLAGS) $(LIBS) -o main_obj $(HJOBJ) main_obj.o \
	trigclass.o

standalone: standalone.o
	$(CC) $(CFLAGS) $(LIBS) -o standalone standalone.o

main_fail: $(SHHOBJ) main_fail.o
	$(CC) $(CFLAGS) $(LIBS) -o main_fail $(SHHOBJ) main_fail.o


# Commment these three lines out if you don't want the VERB (as in 
# "verbose") flag on for this search. 
Hybrid_NMSearch.o: $(NMOBJ) PatternSearch.o EdHJSearch.o \
	Hybrid_NMSearch.cc Hybrid_NMSearch.h
	$(CC) $(CFLAGS) -DVERB -c Hybrid_NMSearch.cc

main_hy: $(HYOBJ) main_hy.o
	$(CC) $(CFLAGS) $(LIBS) -o main_hy $(HYOBJ) main_hy.o

rngs.o: rngs.c rngs.h
	$(CC) $(CFLAGS) -c rngs.c

rvgs.o: rvgs.c rvgs.h
	$(CC) $(CFLAGS) -c rvgs.c

trigclass.o: trigclass.cc trigclass.h
	$(CC) $(CFLAGS) -c trigclass.cc

clean: 
	rm -f *.o  main_default main_spec main_eval main_fail \
	main_arb main_hy standalone


#### additional header file dependencies ####

DirectSearch.o: $(COMHDR) DirectSearch.h Dyn_alloc.h 
PatternSearch.o:  $(COMHDR) PatternSearch.h
CompassSearch.o: $(COMHDR) CompassSearch.h 
CoordinateSearch.o: $(COMHDR) CoordinateSearch.h 
MultiCompassSearch.o: $(COMHDR) MultiCompassSearch.h maps_general.h \
	rvgs.h rngs.h
HJSearch.o:  $(COMHDR) HJSearch.h 
EdHJSearch.o:  $(COMHDR) EdHJSearch.h 
NLessSearch.o:  $(COMHDR) NLessSearch.h 
SimplexSearch.o: $(COMHDR) SimplexSearch.h
NMSearch.o: $(COMHDR) NMSearch.h
Hybrid_NMSearch.o: $(COMHDR) Hybrid_NMSearch.h 
SHHSearch.o: $(COMHDR) SHHSearch.h
SMDSearch.o: $(COMHDR) SMDSearch.h



