include $(SYNERGY_ROOT)/Make_Includes

BASE_HEADERS = id.h component.h default.h element.h tag.h root.h types.h function.h node.h display.h timed.h 
DATA_HEADERS = data.h bool.h integer.h matrix.h rmatrix.h real.h triple.h vector.h distrib.h udata.h set.h string.h symbol.h pointer.h
SUPPORT_HEADERS = user_types.h set.h units.h signal_change.h buf_info.h link.h clock.h xtype.h modification.h #agent_circuit.h
PARSER_HEADERS = parser.h preparser.h
CORIOLIS_HEADERS = cor_syn_iface.h cor_pipe.h pipe.h pipe_iface.h simple3d.h body_def.h junk.h view3d.h shape.h rc_file.h
GA_HEADERS = ga_iface.h ga_input.h ga_nnet.h ga_optimizer.h ga_parser.h
HEADERS = $(BASE_HEADERS) data.h $(DATA_HEADERS) $(SUPPORT_HEADERS) $(CORIOLIS_HEADERS) $(GA_HEADERS)

BASE_OBJS = component.o default.o element.o id.o tag.o root.o display.o node.o timed.o
SUPPORT_OBJS = user_types.o units.o unit_parser.o pattern_match.o vset_query.o function.o dep_remove.o id_lookup.o buf_info.o link.o clock.o xtype.o modification.o rc_file.o #agent_circuit.o
MATRIX_OBJS = rmatrix.o vector.o triple.o
DATA_OBJS = data.o bool.o integer.o real.o distrib.o $(MATRIX_OBJS) string.o symbol.o pointer.o set.o
PARSE_OBJS = main_parser.o token_parser.o data_parser.o func_parse.o preparser.o ga_parser.o
DUMMY_OBJS = signal_change.o
CORIOLIS_OBJS = cor_link.o cor_pipe.o cor_syn_iface.o junk.o simple3d.o body_def.o hooks.o pipe.o pipe_iface.o load_shape.o shape.o view3d.o
GA_OBJS = ga_iface.o ga_input.o ga_nnet.o ga_optimizer.o
ALL_OBJS = $(BASE_OBJS) $(SUPPORT_OBJS) $(DATA_OBJS) $(PARSE_OBJS) $(DUMMY_OBJS) $(CORIOLIS_OBJS) $(GA_OBJS)

PROF = #-pg
CPP = $(CC) 
CPPFLAGS = $(FLAGS) $(PROF)

LINK = $(CC)
#LINK=purify -cache-dir=$(SYNERGY_ROOT)/bin/purify-tmp -g++ -leaks-at-exit $(CC)

BIN_DIR = $(SYNERGY_ROOT)/bin

top: $(BIN_DIR)/test_parse

all: clean test_parse 

objs: $(ALL_OBJS)

# EXECUTABLE RULES
$(BIN_DIR)/test_parse: $(ALL_OBJS) test_parse.o
	$(LINK) $(CFLAGS) $(PROF) \
	test_parse.o $(ALL_OBJS) \
	$(LEDA_LIBS) $(NEWMAT_LIBS) $(COR_LIBS) $(GA_LIBS) -o $(BIN_DIR)/test_parse

# MAIN OBJS
test_parse.o : test_parse.cc parser.h id_lookup.h user_types.h root.h display.h pattern_match.h cor_syn_iface.h rc_file.h ga_iface.h

#simple objs
id.o : id.cc id.h component.h common.h element.h node.h root.h signal_change.h

component.o : component.cc component.h id.h common.h user_types.h node.h timed.h buf_info.h element.h signal_change.h link.h component.cc root.h

bool.o : bool.cc bool.h data.h id.h common.h

data.o : data.cc $(DATA_HEADERS) id.h common.h units.h

data_parser.o : data_parser.cc parser.h $(DATA_HEADERS) id.h common.h units.h root.h

default.o : default.cc default.h element.h

display.o : display.h display.cc component.h element.h id.h common.h parser.h $(DATA_HEADERS)

distrib.o : distrib.cc distrib.h real.h id.h

element.o : element.cc element.h id.h common.h signal_change.h timed.h buf_info.h root.h

function.o : function.cc function.h element.h id.h common.h root.h

integer.o : integer.cc integer.h data.h udata.h id.h common.h units.h

main_parser.o : main_parser.cc parser.h $(DATA_HEADERS) id.h id_lookup.h common.h user_types.h function.h root.h dep_remove.h link.h element.h component.h set.h cor_syn_iface.h

node.o : node.cc node.h id.h root.h common.h signal_change.h id_lookup.h

preparser.o : preparser.cc preparser.h parser.h component.h element.h id.h id_lookup.h common.h user_types.h root.h link.h component.h

timed.o : timed.h timed.cc tag.h common.h clock.h timed.cc

token_parser.o : token_parser.cc parser.h common.h

func_parse.o : func_parse.cc parser.h element.h function.h set.h link.h

real.o : real.cc real.h data.h udata.h id.h common.h units.h

reference.o : reference.cc reference.h id.h common.h

root.o : root.cc root.h real.h data.h id.h common.h signal_change.h node.h link.h modification.h component.h user_types.h default.h #agent_circuit.h

tag.o : tag.cc tag.h

triple.o : triple.cc triple.h matrix.h udata.h data.h id.h common.h units.h

string.o : string.cc string.h data.h id.h common.h root.h types.h

symbol.o : symbol.cc symbol.h data.h id.h common.h root.h types.h

vector.o : vector.cc vector.h matrix.h udata.h data.h id.h common.h units.h

rmatrix.o : rmatrix.cc rmatrix.h matrix.h data.h udata.h id.h common.h units.h

pointer.o : pointer.cc pointer.h data.h id.h common.h

# support objs
user_types.o : user_types.cc user_types.h

set.o : set.cc set.h root.h user_types.h id.h data.h common.h

units.o : units.cc units.h root.h

unit_parser.o : unit_parser.cc units.h

pattern_match.o : pattern_match.cc pattern_match.h

vset_query.o : vset_query.cc vset_query.h


pattern_test : pattern_test.o pattern_match.o
	$(LINK) $(FLAGS) \
	pattern_test.o pattern_match.o $(LEDA_LIBS) -o pattern_test
pattern_test.o : pattern_test.cc pattern_match.h

vset_test: vset_test.o $(ALL_OBJS)
	$(LINK) $(FLAGS) \
	vset_test.o $(ALL_OBJS) \
	$(LEDA_LIBS) $(NEWMAT_LIBS) -o vset_test

vset_test.o : vset_test.cc vset_query.h

dep_remove.o : dep_remove.cc dep_remove.h tag.h

id_lookup.o : id_lookup.cc id_lookup.h root.h element.h component.h common.h pointer.h

buf_info.o : buf_info.h buf_info.cc tag.h

link.o : link.cc link.h component.h common.h cor_syn_iface.h id.h node.h

clock.o : clock.h common.h link.h timed.h root.h clock.cc

xtype.o : symbol.h symbol_tdefs.h xtype.h xtype.cc

modification.o : id.h user_types.h component.h root.h node.h modification.h modification.cc element.h

agent_circuit.o : agent_circuit.cc rmatrix.h vector.h user_types.h root.h tag.h pipe_iface.h pipe.h

rc_file.o : rc_file.cc common.h rc_file.h

ga_iface.o : ga_iface.cc ga_iface.h ga_input.h component.h function.h integer.h element.h root.h element.h function.h #EvStdMetric.hh
ga_input.o : ga_input.cc ga_input.h common.h types.h #StdBitString.hh
ga_nnet.o : ga_nnet.cc ga_iface.h ga_input.h ga_nnet.h element.h integer.h root.h function.h element.h cor_syn_iface.h
ga_optimizer.o : ga_optimizer.cc ga_input.h ga_iface.h ga_optimizer.h integer.h root.h function.h element.h
ga_parser.o : ga_parser.cc parser.h preparser.h ga_iface.h ga_input.h ga_optimizer.h ga_nnet.h

#coriolis_objs
body_def.o : body_def.h junk.h simple3d.h body_def.cc
cor_link.o : cor_link.h cor_link.cc
cor_syn_iface.o : common.h component.h cor_syn_iface.h id.h link.h node.h root.h shape.h types.h view3d.h cor_syn_iface.cc
junk.o : junk.h junk.cc
simple3d.o : junk.h simple3d.h view3d.h simple3d.cc
hooks.o : hooks.cc
pipe.o : common.h component.h data_classes.h element.h id.h node.h pipe.h pipe.cc
pipe_iface.o : common.h component.h cor_pipe.h cor_syn_iface.h data_classes.h element.h id.h node.h pipe.h pipe_iface.h shape.h pipe_iface.cc #agent_circuit.h
view3d.o : common.h simple3d.h view3d.h view3d.cc
shape.o : body_def.h cor_syn_iface.h data.h shape.h simple3d.h shape.cc
cor_pipe.o : cor_pipe.h cor_syn_iface.h element.h pipe.h pipe_iface.h cor_pipe.cc

#dummy objs
signal_change.o : signal_change.h signal_change.cxx
	$(CC) -c signal_change.cxx $(CFLAGS) $(PROF)

load_shape.o : body_def.h common.h load_shape.cc
