Update codebase to remove clang warnings (and a couple of legit errors
[typhoon.git] / src / GNUmakefile
1 # Makefile (for typhoon/GNU-style make).  Recognized gmake variables:
2 #
3 #  DEBUG=1: make debug version (includes asserts and sanity checks)
4 #  TEST=1: include self-test code in the binary produced
5 #  ASM=1: create assembly code, does not link final binary
6 #  EVAL_DUMP=1: make a version that can dump eval breakdowns
7 #  EVAL_HASH=1: hash eval scores
8 #  EVAL_TIME=1: make a version that counts cycles spent in eval
9 #  PERF_COUNTERS=1: make version with perf counters enabled
10 #  BOUNDS_CHECKING=1: make version with bounds checking enabled
11 #  MP=1: make version for multi-processor machine
12 #  DUMP_TREE=1: internal tree dumping version
13 #  SEE_HEAPS=1: use minheaps in the SEE code
14 #  OSX=1: build for an Intel-based Apple Mac (omit this for FreeBSD/Linux)
15 #  USE_READLINE=1: link against the GNU readline library
16 #  SIXTYFOUR=1: make an X64 binary
17 #  CROUTINES=1: use the C versions of the asm routines [slower]
18 #  EVERYTHING=1: everything everything everything everything
19 #
20 # $Id$
21 #
22 CC              =       clang
23 CXX             =       clang++
24 NASM            =       yasm
25 ifdef OSX
26  LIBRARIES      =       -pthread -lc
27  ifdef SIXTYFOUR
28   $(warning you will need to use yasm for now to get x64 on OSX)
29   NASMFLAGS     =       -f macho64 -dOSX -d_X64_
30  else
31   NASMFLAGS     =       -f macho -dOSX
32  endif
33 else
34  LIBRARIES      =       -pthread -lc -lstdc++ 
35  ifdef SIXTYFOUR
36   NASMFLAGS     =       -f elf64 -d__GNUC__
37  else
38   NASMFLAGS     =       -f elf -d__GNUC__
39  endif
40 endif
41 RM              =       /bin/rm
42
43 #
44 # Setup commandline based on make defines
45 #
46 ifdef ASM
47  ifdef SIXTYFOUR
48   PROFILE       =       -S -fverbose-asm -D_X64_
49  else
50   PROFILE       =       -S -fverbose-asm -D_X86_
51  endif
52 else
53  ifdef SIXTYFOUR
54   PROFILE       =       -D_X64_
55  else
56   PROFILE       =       -D_X86_
57  endif
58 endif
59
60 ifdef OSX
61  PROFILE        +=      -DOSX
62 endif
63
64 ifdef GENETIC
65  PROFILE        +=      -DGENETIC
66 endif
67
68 ifdef DEBUG
69  PROFILE        +=      -g -O2 -DDEBUG
70  BINARY         =       _typhoon
71 else
72  PROFILE        +=      -g -O3 -fexpensive-optimizations -ffast-math -finline-functions
73  BINARY         =       typhoon
74 endif
75
76 ifdef USE_READLINE
77  LIBRARIES      +=      -lreadline
78  PROFILE        +=      -DUSE_READLINE
79 endif
80
81 ifdef SIXTYFOUR
82  PROFILE        +=      -m64
83  NASMFLAGS      +=      -d_X64_
84 else
85  PROFILE        +=      -m32
86  NASMFLAGS      +=      -d_X86_
87 endif
88
89 ifdef CROUTINES
90  PROFILE        +=      -DCROUTINES
91 endif
92
93 ifdef EVERYTHING
94 PROFILE         +=      -DEVAL_DUMP -DEVAL_HASH -DEVAL_TIME -DPERF_COUNTERS -DMP -DSMP -DTEST_NULL -DDUMP_TREE -fbounds-checking 
95 else
96 ifdef EVAL_DUMP
97 PROFILE         +=      -DEVAL_DUMP
98 endif
99 ifdef EVAL_HASH
100 PROFILE         +=      -DEVAL_HASH
101 endif
102 ifdef EVAL_TIME
103 PROFILE         +=      -DEVAL_TIME
104 endif
105 ifdef PERF_COUNTERS
106 PROFILE         +=      -DPERF_COUNTERS
107 endif
108 ifdef BOUNDS_CHECKING
109 PROFILE         +=      -fbounds-checking
110 endif
111 ifdef MP
112 PROFILE         +=      -DMP -DSMP
113 endif
114 ifdef TEST_NULL
115 PROFILE         +=      -DTEST_NULL
116 endif
117 ifdef DUMP_TREE
118 PROFILE         +=  -DDUMP_TREE
119 endif
120 endif # EVERYTHING
121
122 CFLAGS          =       -DPROFILE="\"$(PROFILE)\"" $(PROFILE) -Wall
123 HEADERS         =       chess.h compiler.h
124
125 #
126 # ---> .o, not .c! <---
127
128 OBJS    =       main.o root.o search.o searchsup.o draw.o dynamic.o \
129                 hash.o eval.o evalhash.o x86.o pawnhash.o bitboard.o \
130                 generate.o see.o move.o movesup.o command.o script.o \
131                 input.o vars.o util.o unix.o gamelist.o mersenne.o \
132                 sig.o piece.o ics.o san.o fen.o book.o bench.o board.o \
133                 data.o probe.o egtb.o recogn.o poshash.o list.o x64.o
134
135 ifdef TEST
136 # ---> .o, not .c! <---
137
138 OBJS    +=      testdraw.o testmove.o testfen.o testgenerate.o \
139                 testsan.o testics.o testeval.o testbitboard.o \
140                 testhash.o testsee.o testsearch.o testsup.o
141 PROFILE +=      -DTEST
142 else
143 ifdef EVAL_DUMP
144 OBJS    +=      testeval.o testsup.o
145 endif
146 endif
147 ifdef DUMP_TREE
148 OBJS    +=      dumptree.o
149 endif
150 ifdef MP
151 OBJS    +=      split.o
152 endif
153
154 .SUFFIXES:      .c .o
155 .SUFFIXES:      .cpp .o
156 .SUFFIXES:      .asm .o
157
158 .PHONY:         all
159 all:            $(BINARY)
160
161 $(BINARY):      $(OBJS)
162                 $(CXX) $(PROFILE) -o $(BINARY) -Wall $(LIBRARIES) \
163                 $(OBJS)
164
165 %.o:        %.c $(HEADERS)
166                 $(CC) $(CFLAGS) -c $< -o $@
167
168 %.o:        %.cpp $(HEADERS)
169                 $(CXX) $(CFLAGS) -c -w $< -o $@
170
171 %.o:        %.asm $(HEADERS)
172                 $(NASM) $(NASMFLAGS) -o $@ $<
173
174 .PHONY:         clean
175 clean:          
176                 $(RM) -f *.o *.core *~ *.gmon \#*\# typhoon _typhoon