#CC=   gcc
CC=   colorgcc
OPTS= -std=gnu99

# Debug options
GCFLAGS= -g -Wall
GLIBS=   -lm -lpthread -lGL -lGLU -lX11

# Release options
CFLAGS= -O3 -Wall -DNDEBUG 
LIBS=   -lm -lpthread -lGL -lGLU -lX11

all: casim1d casim2d casimnn

debug: CFLAGS = $(GCFLAGS)
debug: LIBS   = $(GLIBS)
debug: clean all

########################################
########################################

# Don't care 1D or 2D

util.o: util.c util.h Makefile
	${CC} ${OPTS} ${CFLAGS} -c util.c

random.o: random.c random.h Makefile
	${CC} ${OPTS} ${CFLAGS} -c random.c

ps.o: ps.c ps.h Makefile
	${CC} ${OPTS} ${CFLAGS} -c ps.c

gui_button.o: gui_button.c gui_button.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c gui_button.c


# 1D
gui_buttons1d.o: gui_buttons1d.c gui_buttons1d.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c gui_buttons1d.c

gui_util.o: gui_util.c gui_util.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c gui_util.c

gui_stats1d.o: gui_stats1d.c gui_stats1d.h gui.h gui_util.h types.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c gui_stats1d.c

gui_frame1d.o: gui_frame1d.c gui_frame1d.h gui.h gui_util.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c gui_frame1d.c

layout1d.o: layout1d.c layout1d.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c layout1d.c

gui1d.o: gui.c gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c gui.c -o gui1d.o

casim1d.o: casim1d.c casim1d.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c casim1d.c

io_eps1d.o: io_eps1d.c io_eps1d.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c io_eps1d.c

history1d.o: history1d.c history1d.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=1 -c history1d.c

casim1d: util.o random.o gui_button.o gui_stats1d.o gui_buttons1d.o gui_frame1d.o gui1d.o casim1d.o layout1d.o history1d.o ps.o io_eps1d.o gui_util.o Makefile
	${CC} ${OPTS} -o casim1d util.o random.o gui_button.o gui_buttons1d.o gui_stats1d.o gui_util.o gui_frame1d.o gui1d.o casim1d.o layout1d.o history1d.o ps.o io_eps1d.c ${LIBS}

# 2D

gui_buttons2d.o: gui_buttons2d.c gui_buttons2d.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c gui_buttons2d.c

gui_frame2d.o: gui_frame2d.c gui_frame2d.h gui.h gui_util.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c gui_frame2d.c

layout2d.o: layout2d.c layout2d.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c layout2d.c

gui2d.o: gui.c gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c gui.c -o gui2d.o

gui_stats2d.o: gui_stats2d.c gui_stats2d.h gui.h gui_util.h types.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c gui_stats2d.c

casim2d.o: casim2d.c casim2d.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c casim2d.c

io_eps2d.o: io_eps2d.c io_eps2d.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c io_eps2d.c

stats2d.o: stats2d.c stats2d.h casim2d.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DDIM=2 -c stats2d.c

casim2d: util.o random.o gui_button.o gui_stats2d.o gui_frame2d.o gui_buttons2d.o layout2d.o gui2d.o stats2d.o casim2d.o ps.o io_eps2d.o gui_util.o Makefile
	${CC} ${OPTS} -o casim2d util.o random.o gui_button.o gui_stats2d.o gui_buttons2d.o layout2d.o gui_util.o gui_frame2d.o gui2d.o stats2d.o casim2d.o ps.o io_eps2d.c ${LIBS}


# NN
gui_buttonsnn.o: gui_buttonsnn.c gui_buttonsnn.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c gui_buttonsnn.c

gui_framenn.o: gui_framenn.c gui_framenn.h gui.h gui_util.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c gui_framenn.c

layoutnn.o: layoutnn.c layoutnn.h gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c layoutnn.c

guinn.o: gui.c gui.h types.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c gui.c -o guinn.o

gui_statsnn.o: gui_statsnn.c gui_statsnn.h gui.h gui_util.h types.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c gui_statsnn.c

casimnn.o: casimnn.c casimnn.h params.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c casimnn.c

io_epsnn.o: io_epsnn.c io_epsnn.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c io_epsnn.c

io_bitmap.o: io_bitmap.c io_bitmap.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c io_bitmap.c

statsnn.o: statsnn.c statsnn.h casimnn.h Makefile
	${CC} ${OPTS} ${CFLAGS} -DNN=1 -c statsnn.c

casimnn: util.o random.o gui_button.o gui_statsnn.o gui_framenn.o gui_buttonsnn.o layoutnn.o guinn.o statsnn.o casimnn.o ps.o io_epsnn.o io_bitmap.o gui_util.o Makefile
	${CC} ${OPTS} -o casimnn util.o random.o gui_button.o gui_statsnn.o gui_buttonsnn.o layoutnn.o gui_util.o gui_framenn.o guinn.o statsnn.o io_bitmap.o casimnn.o ps.o io_epsnn.c ${LIBS}




########################################
########################################

# Maintenance

clean:
	rm -f casim1d casim2d casimnn *.o

strip: clean
	rm -f *~ \#*
