ifndef arch
arch := $(shell sh ../config/arch.sh)
endif
include ../config/make.$(arch)

good_gm = $(arch)/mapper \
	$(arch)/static_mapper \
	$(arch)/file_mapper \
	$(arch)/ping \
	$(arch)/bandwidth \
	$(arch)/bobwidth \
	$(arch)/timeout \
	$(arch)/trouble

ifeq ($(arch),intel_ms)
gm = $(good_gm) $(arch)/gm_mapper_service.exe
else
gm = $(good_gm)
endif

ifeq ($(arch), ppc_vxWorks)
mapper_object = $(arch)/vx_mapper.o
else
mapper_object = $(arch)/mapper.o
endif

#includes := $(shell ls *.h ../libmt/*.h)

all: $(arch) \
	$(arch)/simple_routes \
	$(arch)/ad_hoc_routes \
	$(arch)/dijkstra_routes \
	$(arch)/force_routes \
	$(arch)/simple_simulator \
	$(arch)/griddle_simulator \
	$(arch)/ad_hoc_simulator \
	$(arch)/barrel_simulator \
	$(arch)/test_mapper \
	$(arch)/test_static_mapper \
	$(arch)/test_file_mapper \
	$(arch)/test_ping \
	$(arch)/routes4danny \
	$(arch)/routes4david \
	$(arch)/test_graph_match \
	$(arch)/routes_diff \
	$(arch)/sift \
	$(arch)/nway2error \
	$(arch)/deadlock \
	$(arch)/map2wiring \
	$(arch)/longest \
	$(arch)/best \
	$(arch)/examine \
	$(arch)/conflicts \
	$(arch)/reduce

gm: $(gm)

simple_routes_depends =  \
$(arch)/map2routes.o \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libmt.a

ad_hoc_routes_depends =  \
$(arch)/map2routes.o \
../ad_hoc_calculator/$(arch)/libac.a \
../libmt/$(arch)/libmt.a

dijkstra_routes_depends =  \
$(arch)/map2routes.o \
../dijkstra/$(arch)/libdijkstra.a \
../libmt/$(arch)/libmt.a

force_routes_depends =  \
$(arch)/map2routes.o \
../force/$(arch)/libforce.a \
../libmt/$(arch)/libmt.a

simple_simulator_depends =  \
$(arch)/simulator.o \
../nway/$(arch)/libnway.a \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a

griddle_simulator_depends =  \
$(arch)/simulator.o \
../griddle/$(arch)/libgriddle.a \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a

ad_hoc_simulator_depends =  \
$(arch)/simulator.o \
../nway/$(arch)/libnway.a \
../ad_hoc_calculator/$(arch)/libac.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a


barrel_simulator_depends =  \
$(arch)/simulator.o \
../barrel_simulation/$(arch)/libbs.a \
../ad_hoc_calculator/$(arch)/libac.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a


test_mapper_depends = \
$(arch)/test_mapper.o \
../simple/$(arch)/libsimple.a \
../mmapper/$(arch)/libmm.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

mapper_depends = \
$(mapper_object) \
../simple/$(arch)/libsimple.a \
../mmapper/$(arch)/libmm.a \
../libmt/$(arch)/libmtgm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

test_static_mapper_depends = \
$(arch)/test_mapper.o \
../simple/$(arch)/libsimple.a \
../smapper/$(arch)/libstm.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

static_mapper_depends = \
$(mapper_object) \
../simple/$(arch)/libsimple.a \
../smapper/$(arch)/libstm.a \
../libmt/$(arch)/libmtgm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

test_file_mapper_depends = \
$(arch)/test_mapper.o \
../file_calculator/$(arch)/libfc.a \
../smapper/$(arch)/libstm.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

file_mapper_depends = \
$(mapper_object) \
../file_calculator/$(arch)/libfc.a \
../smapper/$(arch)/libstm.a \
../libmt/$(arch)/libmtgm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

gm_mapper_service_depends = \
$(arch)/gm_mapper_service.o \
../simple/$(arch)/libsimple.a \
../mmapper/$(arch)/libmm.a \
../libmt/$(arch)/libmtgm.a \
../libmt/$(arch)/libmt.a \
../deadlock/$(arch)/libdeadlock.a

ping_depends = \
$(arch)/ping.o \
../ping/$(arch)/libping.a \
../deadlock/$(arch)/libdeadlock.a \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libmtgm.a \
../libmt/$(arch)/libmt.a

shift_depends = \
$(arch)/ping.o \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libmt.a

test_ping_depends = \
$(arch)/ping.test.o \
../ping/$(arch)/libping.a \
../deadlock/$(arch)/libdeadlock.a \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a

routes4danny_depends = \
$(arch)/routes4danny.o \
../libmt/$(arch)/libmt.a

routes4david_depends = \
$(arch)/routes4david.o \
../libmt/$(arch)/libmt.a

test_graph_match_depends = \
$(arch)/test_graph_match.o \
../libmt/$(arch)/libmt.a

routes_diff_depends = \
$(arch)/routes_diff.o \
../libmt/$(arch)/libmt.a

sift_depends = \
$(arch)/sift.o \
../file_calculator/$(arch)/libfc.a \
../libmt/$(arch)/libmt.a

nway2error_depends = \
$(arch)/nway2error.o \
../libmt/$(arch)/libmt.a

deadlock_depends = \
$(arch)/deadlock.o \
../deadlock/$(arch)/libdeadlock.a \
../file_calculator/$(arch)/libfc.a \
../libmt/$(arch)/libmt.a \


map2wiring_depends = \
$(arch)/map2wiring.o \
../libmt/$(arch)/libmt.a

longest_depends = \
$(arch)/longest.o \
../libmt/$(arch)/libmt.a

best_depends = \
$(arch)/best.o \
../nway/$(arch)/libnway.a \
../simple/$(arch)/libsimple.a \
../libmt/$(arch)/libsm.a \
../libmt/$(arch)/libmt.a

examine_depends = \
$(arch)/examine.o \
../libmt/$(arch)/libmt.a

conflicts_depends = \
$(arch)/conflicts.o \
../libmt/$(arch)/libmt.a

reduce_depends = \
$(arch)/reduce.o \
../libmt/$(arch)/libmt.a

bobwidth_depends = $(arch)/bobwidth.o

timeout_depends = $(arch)/timeout.o

bandwidth_depends = \
$(arch)/bandwidth.o \
../libmt/$(arch)/libmt.a \
../libmt/$(arch)/libmtgm.a

trouble_depends = \
$(arch)/trouble.o \
../libmt/$(arch)/libmtgm.a \
../libmt/$(arch)/libmt.a


evil_libs  = kernel32.lib user32.lib gdi32.lib winspool.lib\
 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\
 odbc32.lib odbccp32.lib

$(arch)/simple_routes : $(simple_routes_depends)
	$(linker) $(link_syntax)  $(simple_routes_depends) $(linker_options)

$(arch)/ad_hoc_routes : $(ad_hoc_routes_depends)
	$(linker) $(link_syntax)  $(ad_hoc_routes_depends) $(linker_options)

$(arch)/dijkstra_routes : $(dijkstra_routes_depends)
	$(linker) $(link_syntax)  $(dijkstra_routes_depends) $(linker_options)

$(arch)/force_routes : $(force_routes_depends)
	$(linker) $(link_syntax)  $(force_routes_depends) $(linker_options)

$(arch)/simple_simulator : $(simple_simulator_depends)
	$(linker) $(link_syntax)  $(simple_simulator_depends) $(linker_options)

$(arch)/griddle_simulator : $(griddle_simulator_depends)
	$(linker) $(link_syntax)  $(griddle_simulator_depends) $(linker_options)

$(arch)/ad_hoc_simulator : $(ad_hoc_simulator_depends)
	$(linker) $(link_syntax)  $(ad_hoc_simulator_depends) $(linker_options)

$(arch)/barrel_simulator : $(barrel_simulator_depends)
	$(linker) $(link_syntax)  $(barrel_simulator_depends) $(linker_options)

$(arch)/test_mapper : $(test_mapper_depends)
	$(linker) $(link_syntax)  $(test_mapper_depends) $(linker_options)

$(arch)/mapper : $(mapper_depends)
	$(linker) $(link_syntax)  $(mapper_depends) $(gm_libs) $(linker_options)

$(arch)/test_static_mapper : $(test_static_mapper_depends)
	$(linker) $(link_syntax)  $(test_static_mapper_depends) $(linker_options)

$(arch)/static_mapper : $(static_mapper_depends)
	$(linker) $(link_syntax)  $(static_mapper_depends) $(gm_libs) $(linker_options)

$(arch)/test_file_mapper : $(test_file_mapper_depends)
	$(linker) $(link_syntax) $^ $(linker_options)

$(arch)/file_mapper : $(file_mapper_depends)
	$(linker) $(link_syntax) $^ $(gm_libs) $(linker_options)

$(arch)/ping : $(ping_depends)
	$(linker) $(link_syntax)  $(ping_depends) $(gm_libs) $(linker_options)

$(arch)/test_ping : $(test_ping_depends)
	$(linker) $(link_syntax)  $(test_ping_depends)  $(linker_options)

$(arch)/routes4danny : $(routes4danny_depends)
	$(linker) $(link_syntax)  $(routes4danny_depends)  $(linker_options)

$(arch)/routes4david : $(routes4david_depends)
	$(linker) $(link_syntax)  $(routes4david_depends)  $(linker_options)

$(arch)/test_graph_match : $(test_graph_match_depends)
	$(linker) $(link_syntax)  $(test_graph_match_depends)  $(linker_options)

$(arch)/routes_diff : $(routes_diff_depends)
	$(linker) $(link_syntax)  $(routes_diff_depends)  $(linker_options)

$(arch)/sift : $(sift_depends)
	$(linker) $(link_syntax)  $(sift_depends)  $(linker_options)

$(arch)/nway2error : $(nway2error_depends)
	$(linker) $(link_syntax)  $(nway2error_depends)  $(linker_options)

$(arch)/deadlock : $(deadlock_depends)
	$(linker) $(link_syntax)  $(deadlock_depends)  $(linker_options)

$(arch)/map2wiring : $(map2wiring_depends)
	$(linker) $(link_syntax)  $(map2wiring_depends)  $(linker_options)

$(arch)/longest : $(longest_depends)
	$(linker) $(link_syntax)  $(longest_depends)  $(linker_options)

$(arch)/best : $(best_depends)
	$(linker) $(link_syntax)  $(best_depends)  $(linker_options)

$(arch)/examine : $(examine_depends)
	$(linker) $(link_syntax)  $(examine_depends)  $(linker_options)

$(arch)/conflicts : $(conflicts_depends)
	$(linker) $(link_syntax)  $(conflicts_depends)  $(linker_options)

$(arch)/reduce : $(reduce_depends)
	$(linker) $(link_syntax)  $(reduce_depends)  $(linker_options)

$(arch)/trouble : $(trouble_depends)
	$(linker) $(link_syntax)  $(trouble_depends) $(gm_libs) $(linker_options)

$(arch)/bobwidth : $(bobwidth_depends)
	$(linker) $(link_syntax)  $(bobwidth_depends) $(gm_libs) $(linker_options)

$(arch)/timeout : $(timeout_depends)
	$(linker) $(link_syntax)  $(timeout_depends) $(gm_libs) $(linker_options)

$(arch)/bandwidth : $(bandwidth_depends)
	$(linker) $(link_syntax)  $(bandwidth_depends) $(gm_libs) $(linker_options)

$(arch)/gm_mapper_service.exe : $(gm_mapper_service_depends)
	$(linker) $(link_syntax)  $(gm_mapper_service_depends) $(gm_libs) $(evil_libs) $(linker_options)

intel_ms/gm_mapper_service.o : gm_mapper_service.c $(includes) ../config/make.$(arch) makefile
	$(evil_compiler) $(defines) $(idirs) -I../libmt $(build_syntax)

intel_ms/bobwidth.o : bobwidth.c $(includes) ../config/make.$(arch) makefile
	$(evil_compiler) $(defines) $(idirs) -I../libmt $(build_syntax)

intel_ms/timeout.o : timeout.c $(includes) ../config/make.$(arch) makefile
	$(evil_compiler) $(defines) $(idirs) -I../libmt $(build_syntax)

$(arch)/%.o : %.c $(includes) ../config/make.$(arch) makefile
	$(compiler) $(defines)  $(idirs)  -I.  -I../libmt -I../ping -I../deadlock  -I../file_calculator $(build_syntax)

$(arch)/%.test.o : %.c $(includes) ../config/make.$(arch) makefile
	$(compiler) $(defines)  $(idirs) -DTEST -I. -I../libmt -I../ping $(build_syntax)

$(arch) :
	mkdir $(arch)

dist :
	rm -f $(arch)/*.o	
	rm -f $(arch).tar
	rm -f $(arch).tar.gz
	tar cf $(arch).tar $(arch)
	gzip  $(arch).tar

strip:
	strip $(arch)/*

clean:
	rm -rf $(arch)

