# Makefile for KnightCap

# what C compiler? It better be Ansi-C. Use gcc if you have it.
# you may find that KnightCap is very slow if you don't use gcc
CC = gcc

# What compiler switches do you want? These ones work well with gcc
#OPT = -O2 -fshort-enums -Wall
OPT = -g -fshort-enums -Wall

# If you don't have gcc then perhaps try this instead. You only need
# the null definition for inline if your C compiler doesn't know about
# the inline keyword
# OPT = -O -Dinline=""

# if you want profiling (for performance tuning) then uncomment
# the following (some systems may not support this properly)
# LOPT = -pg

# comment out the following 7 lines if you don't want the rendered 
# display (or you don't have OpenGL and Glut libraries)
# If you do have these libs then make sure the first three
# lines point at the right places
MESA = /usr/local/Mesa-2.1
GLUT = /usr/local/Mesa-2.1/glut-3.2
X11 = /usr/X11R6
GLUT_LIBS = -L$(GLUT)/lib/glut -lglut
MESA_LIBS = -L$(MESA)/lib -lMesaGLU -lMesaGL -lm
XLIBS = -L$(X11)/lib -lXmu -lXt -lXext -lX11 -lXi
DISPLAYFLAGS = -I$(MESA)/include -I$(GLUT) -DRENDERED_DISPLAY=1

# comment out the following line if you don't want KnightCap's
# evaluation function learning turned on. 
LEARNFLAGS = -DLEARN_EVAL=1

# you shouldn't need to edit anything below this line. Unless
# something goes wrong.

INCLUDE = $(DISPLAYFLAGS)
CFLAGS = $(OPT) $(INCLUDE) $(LEARNFLAGS)

LIBS = $(GLUT_LIBS) $(MESA_LIBS) $(XLIBS) 

TARGET = KnightCap

OBJS = knightcap.o trackball.o move.o util.o generate.o eval.o movement.o \
	ordering.o hash.o board.o log.o prog.o timer.o ics.o display.o \
	testsuite.o brain.o td.o tactics.o 

$(TARGET):  $(OBJS) 
	-mv $@ $@.old
	$(CC) $(LOPT) -o $@ $(OBJS) $(LIBS)

proto:
	cat *.c | awk -f mkproto.awk > proto.h

clean:
	/bin/rm -f *.o *~ $(TARGET)

