# Makefile version 15.2
# Crafty v15.x makefile for Windows 95/98/NT Intel & NT Alpha
# Written by Jason Deines (jdeines@mindspring.com) April 1998
#
# This makefile is designed to be used from the command line with 
# Microsoft's nmake.  Either rename this # file to "makefile" or name it 
# explicitly when invoking nmake:
#     nmake -f Makefile.nt
#
# The makefile is set up for Microsoft Visual C++ 5.0 Intel.  If you are 
# building for NT on the Alpha, see below for the appropriate settings.
#
# The default target produces a file called "wcrafty.exe".  This compiles
# all the .c files separately, producing individual .obj files, which are
# then linked to create the executable.  You can also specify a target 
# called "wcraftyx".  This creates a file called "wcraftyx.exe" by combining 
# all of the .c files into two large .c files before the compile step.  
# The large files generally provides more optimization possibilities for
# the compiler, and usually results in slightly faster code.  To try it, 
# type "nmake wcraftyx" instead of just "nmake".  The .c files x1.c and x2.c
# will be created if needed and built automatically.


# Build target is defined here. For Alpha compiler flags, see below.
TARGET   = NT_i386
#TARGET   = NT_AXP

# Command-line compiler and linker invocation commands:
CC       = cl
LD       = link

# Base compiler flags needed for build:
BFLAGS = /D_CONSOLE /DWIN32

# Compiler flags:
# /O2    optimize for speed
# /Oa    assume no aliasing
# /Gr    fastcall calling convention
# /G5    target Pentium (but will run on all x86 architectures)
# /G6    target Pentium Pro (but will run on all x86 architectures)
#
# For debugging use these flags instead:
# CFLAGS  = /Od /Zi
# LDFLAGS  = /DEBUG /DEBUGTYPE:CV
#
# For an Alpha build, use the following flags:
# CFLAGS   = /Ox /Gs /QAgq

CFLAGS   = /O2 /G5 /Oa /Gr
#CFLAGS   = /O2 /G6 /Oa /Gr
#CFLAGS   = /Od /Zi

# Linker flags, normally not needed except for debug builds:
LDFLAGS  =
#LDFLAGS  = /DEBUG /DEBUGTYPE:CV
 
# See the default crafty makefile for a description of the options below.
# With VC++, defines like COMPACT_ATTACKS, etc, makes the code slower, so 
# those # options are disabled by default.  FAST is normally not defined 
# so that hash statistics are reported -- for the fastest possible 
# executable, define FAST below.

COPTS    =
#COPTS    = /DFAST
#COPTS    = /DCOMPACT_ATTACKS /DUSE_SPLIT_SHIFTS /DUSE_ATTACK_FUNCTIONS \
#           /DUSE_ASSEMBLY_A /DUSE_ASSEMBLY_B /DTABLEBASES

# For an SMP build use/add the following build options.
# NT_INTEREX is defined if you want to use the built-in InterlockedExchange()
# function for thread resource locking, instead of the inline asm routine.
# /MT is a compiler flag needed for multithreaded builds.

#COPTS    = /MT /DSMP /DCPUS=4 /DNT_INTEREX
#COPTS    = /MT /DSMP /DCPUS=4

# If you are using any external assembler routines, put the name of the 
# object code file(s) here.  Any such files will need to be generated 
# separately -- there is no assembler step defined in the makefile.

asmobjs  =
#asmobjs  = x86.obj


ALLOPTS  = $(COPTS) /D$(TARGET)

cobjs    = analyze.obj annotate.obj attacks.obj bench.obj book.obj boolean.obj \
	   data.obj draw.obj drawn.obj edit.obj enprise.obj epd.obj epdglue.obj \
	   evaluate.obj evtest.obj history.obj init.obj input.obj interupt.obj \
	   iterate.obj learn.obj lookup.obj make.obj main.obj movgen.obj next.obj \
	   nexte.obj nextr.obj option.obj output.obj phase.obj ponder.obj \
	   preeval.obj quiesce.obj repeat.obj resign.obj root.obj search.obj \
	   searchmp.obj searchr.obj setboard.obj store.obj swap.obj test.obj \
	   thread.obj time.obj unmake.obj utility.obj valid.obj validate.obj

xcobjs   = x1.obj x2.obj

allobjs  = $(cobjs) $(asmobjs)

xallobjs = $(xcobjs) $(asmobjs)

includes = chess.h data.h epd.h epddefs.h epdglue.h

wcrafty  : $(allobjs)
		   $(LD) $(LDFLAGS) $(allobjs) /out:wcrafty.exe

wcraftyx : $(xallobjs)
	   $(LD) $(LDFLAGS) $(xallobjs) /out:wcraftyx.exe

$(cobjs) : $(includes)

.c.obj   :
	   $(CC) $(BFLAGS) $(CFLAGS) $(ALLOPTS) /c $*.c

$(xcobjs): $(includes)

x1.c:      searchr.c search.c repeat.c next.c nextr.c history.c nexte.c quiesce.c \
	   evaluate.c movgen.c make.c unmake.c lookup.c store.c attacks.c swap.c \
	   boolean.c draw.c utility.c valid.c searchmp.c thread.c 
	   copy /b searchr.c+search.c+repeat.c+next.c+nextr.c+history.c+nexte.c+ \
	   quiesce.c+evaluate.c+movgen.c+make.c+unmake.c+lookup.c+store.c+ \
	   attacks.c+swap.c+boolean.c+draw.c+utility.c+valid.c+searchmp.c+thread.c x1.c
x2.c:      book.c data.c drawn.c edit.c enprise.c epd.c epdglue.c init.c \
	   input.c interupt.c iterate.c main.c option.c output.c phase.c ponder.c \
	   preeval.c resign.c root.c learn.c setboard.c test.c time.c \
	   validate.c annotate.c analyze.c evtest.c bench.c
	   copy /b book.c+data.c+drawn.c+edit.c+enprise.c+epd.c+epdglue.c+init.c+ \
	   input.c+interupt.c+iterate.c+main.c+option.c+output.c+phase.c+ponder.c+ \
	   preeval.c+resign.c+root.c+learn.c+setboard.c+test.c+time.c+ \
	   validate.c+annotate.c+analyze.c+evtest.c+bench.c x2.c

clean:
	   del -q $(cobjs)
	   del -q $(xcobjs)
	   del -q log.*
	   del -q game.**
	   del -q *.bak
