CC=gcc 
CFLAGS=-O3
#CFLAGS=-g
XLIBS = -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/lib/X11R6 -L/usr/lib/X11 -lX11 -lGL -lGLU

SRA = dynamics.o sdfast/sra_d.o sdfast/sra_s.o sdfast/sralib.o
SRAI = dynamics-impact.o sdfast/sra_d.o sdfast/sra_s.o sdfast/sralib.o sdfast/srss_d.o sdfast/srss_s.o sdfast/srsslib.o sdfast/srssr_d.o sdfast/srssr_s.o sdfast/srssrlib.o sdfast/srds_d.o sdfast/srds_s.o sdfast/srdslib.o

POWELL = ../useful/powell/nrutil.o ../useful/powell/powell.o ../useful/powell/linmin.o ../useful/powell/mnbrak.o ../useful/powell/f1dim.o ../useful/powell/brent.o

NR2 = ../useful/numerical-recipes-c/librecipes_c.a 

MRDPLOT = ../useful/mrdplot/mrdplot.o

TRAJECTORY = ../useful/trajectory/trajectory.o

USEFUL = ../useful/useful/useful.o

all: animate simulatei opt-powelli opt-amoebai opt-anneali

simulate: simulate.o parameters.o controller.o data.o $(SRA) $(TRAJECTORY) $(MRDPLOT)
	$(CC) $(CFLAGS) -o $@ simulate.o parameters.o controller.o data.o $(SRA) $(TRAJECTORY) $(MRDPLOT) -lm

simulatei: simulate.o parameters.o controller.o data.o $(SRAI) $(TRAJECTORY) $(MRDPLOT)
	$(CC) $(CFLAGS) -o $@ simulate.o parameters.o controller.o data.o $(SRAI) $(TRAJECTORY) $(MRDPLOT) $(NR2) -lm

animate.o: animate.c main.h
	$(CC) -c $(CFLAGS) -Wall -fno-exceptions -fomit-frame-pointer -ffast-math -I../useful/drawstuff -DdNODEBUG -o animate.o animate.c

animate: animate.o parameters.o $(MRDPLOT)
	$(CC) $(CFLAGS) -o $@ animate.o parameters.o $(MRDPLOT) ../useful/drawstuff/libdrawstuff.a $(XLIBS) -lm

dump-statei: dump-state.o parameters.o controller.o data.o $(SRAI) $(TRAJECTORY) $(MRDPLOT)
	$(CC) $(CFLAGS) -o $@ dump-state.o parameters.o controller.o data.o $(SRAI) $(TRAJECTORY) $(MRDPLOT) $(NR2) -lm

test-lqri: test-lqr.o parameters.o controller.o data.o $(SRAI) $(TRAJECTORY) $(MRDPLOT) $(USEFUL) 
	$(CC) $(CFLAGS) -o $@ test-lqr.o parameters.o controller.o data.o $(SRAI) $(TRAJECTORY) $(MRDPLOT) $(USEFUL) $ $(NR2) -lm

opt-powell: opt-powell.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(POWELL) $(TRAJECTORY)
	$(CC) $(CFLAGS) -o $@ opt-powell.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(POWELL) $(TRAJECTORY) -lm

opt-powelli: opt-powell.o opt-criterion.o parameters.o controller.o  $(SRAI) $(POWELL) $(TRAJECTORY)  $(USEFUL) 
	$(CC) $(CFLAGS) -o $@ opt-powell.o opt-criterion.o parameters.o controller.o  $(SRAI) $(POWELL) $(TRAJECTORY)  $(USEFUL) $(NR2) -lm

opt-powell3.o: opt-powell3.cpp
	g++ $(CFLAGS) -c opt-powell3.cpp

opt-powell3: opt-powell3.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY)
	g++ $(CFLAGS) -o $@ opt-powell3.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY) -lm

opt-anneal.o: opt-anneal.c
	$(CC) $(CFLAGS) -I../useful/numerical-recipes-c/include -c opt-anneal.c

opt-anneal: opt-anneal.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY)
	$(CC) $(CFLAGS) -o $@ opt-anneal.o opt-criterion.o parameters.o controller.o  $(BIPED2)  $(NR2) $(TRAJECTORY) -lm

opt-anneali: opt-anneal.o opt-criterion.o parameters.o controller.o  $(SRAI) $(TRAJECTORY)
	$(CC) $(CFLAGS) -o $@ opt-anneal.o opt-criterion.o parameters.o controller.o  $(SRAI)  $(NR2) $(TRAJECTORY) -lm

opt-anneal3.o: opt-anneal3.cpp
	g++ $(CFLAGS) -c opt-anneal3.cpp

opt-anneal3: opt-anneal3.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY)
	g++ $(CFLAGS) -o $@ opt-anneal3.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY) -lm

opt-amoeba.o: opt-amoeba.c
	$(CC) $(CFLAGS) -I../useful/numerical-recipes-c/include -c opt-amoeba.c

opt-amoeba: opt-amoeba.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY)
	$(CC) $(CFLAGS) -o $@ opt-amoeba.o opt-criterion.o parameters.o controller.o  $(BIPED2)  $(NR2) $(TRAJECTORY) -lm

opt-amoebai: opt-amoeba.o opt-criterion.o parameters.o controller.o  $(SRAI) $(TRAJECTORY)
	$(CC) $(CFLAGS) -o $@ opt-amoeba.o opt-criterion.o parameters.o controller.o  $(SRAI)  $(TRAJECTORY) $(USEFUL) $(NR2) -lm

opt-amoeba3.o: opt-amoeba3.cpp
	g++ $(CFLAGS) -c opt-amoeba3.cpp

opt-amoeba3: opt-amoeba3.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY)
	g++ $(CFLAGS) -o $@ opt-amoeba3.o opt-criterion.o parameters.o controller.o  $(BIPED2) $(TRAJECTORY) -lm


animate.o:		main.h main2.h
controller.o:		main.h main2.h
data.o:			main.h main2.h
dynamics.o:		main.h main2.h
dynamics-constraints.o:	main.h main2.h
dynamics-impact.o:	main.h main2.h
parameters.o:		main.h main2.h
simulate.o:		main.h main2.h
gen-v-data.o:	main.h main2.h
dump-state.o:	main.h main2.h
opt-segment.o:	main.h main2.h
test-lqr.o:	main.h main2.h
opt-criterion.o:	main.h main2.h
opt-powell.o:	main.h main2.h
opt-anneal.o:	main.h main2.h
opt-amoeba.o:	main.h main2.h
opt-powell3.o:	main.h main2.h
opt-anneal3.o:	main.h main2.h
opt-amoeba3.o:	main.h main2.h
