Rev 110 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 110 | Rev 154 | ||
|---|---|---|---|
| Line 28... | Line 28... | ||
| 28 | # -DDEBUG This is used for testing changes. Enabling this option |
28 | # -DDEBUG This is used for testing changes. Enabling this option |
| 29 | # greatly slows Crafty down, but every time a move is made, |
29 | # greatly slows Crafty down, but every time a move is made, |
| 30 | # the corresponding position is checked to make sure all of |
30 | # the corresponding position is checked to make sure all of |
| 31 | # the bitboards are set correctly. |
31 | # the bitboards are set correctly. |
| 32 | # -DEPD If you want full EPD support built in. |
32 | # -DEPD If you want full EPD support built in. |
| 33 | # -DINLINEASM Compiles with the Intel assembly code for FirstOne(), |
- | |
| 34 | # LastOne() and PopCnt(). This is for gcc-style inlining |
- | |
| 35 | # and now works with the Intel C/C++ compiler as well. It |
- | |
| 36 | # also has a MSVC compatible version included. |
- | |
| 37 | # -DLOGDIR Path to the directory where Crafty puts the log.nnn and |
33 | # -DLOGDIR Path to the directory where Crafty puts the log.nnn and |
| 38 | # game.nnn files. |
34 | # game.nnn files. |
| 39 | # -DNODES This enables the sn=x command. Crafty will search until |
35 | # -DNODES This enables the sn=x command. Crafty will search until |
| 40 | # exactly X nodes have been searched, then the search |
36 | # exactly X nodes have been searched, then the search |
| 41 | # terminates as if time ran out. |
37 | # terminates as if time ran out. |
| 42 | # -DNOEGTB Eliminates the egtb code for compilers that can't deal |
- | |
| 43 | # with the large egtb.cpp code/templates. |
- | |
| 44 | # -DPOPCNT Says this system is a newer Intel/AMD processor with the |
- | |
| 45 | # built-in hardware popcnt instruction. |
- | |
| 46 | # -DPOSITIONS Causes Crafty to emit FEN strings, one per book line, as |
38 | # -DPOSITIONS Causes Crafty to emit FEN strings, one per book line, as |
| 47 | # it creates a book. I use this to create positions to use |
39 | # it creates a book. I use this to create positions to use |
| 48 | # for cluster testing. |
40 | # for cluster testing. |
| 49 | # -DRCDIR Path to the directory where we look for the .craftyrc or |
41 | # -DRCDIR Path to the directory where we look for the .craftyrc or |
| 50 | # crafty.rc (windows) file. |
42 | # crafty.rc (windows) file. |
| 51 | # -DSKILL Enables the "skill" command which allows you to arbitrarily |
43 | # -DSKILL Enables the "skill" command which allows you to arbitrarily |
| 52 | # lower Crafty's playing skill so it does not seem so |
44 | # lower Crafty's playing skill so it does not seem so |
| 53 | # invincible to non-GM-level players. |
45 | # invincible to non-GM-level players. |
| - | 46 | # -DSYZYGY This enables syzygy endgame tables (both WDL and DTC) |
|
| 54 | # -DTBDIR Path to the directory where the endgame tablebase files |
47 | # -DTBDIR Path to the directory where the endgame tablebase files |
| 55 | # are found. default = "./TB" |
48 | # are found. default = "./TB" |
| 56 | # -DTEST Displays evaluation table after each move (in the logfile) |
49 | # -DTEST Displays evaluation table after each move (in the logfile) |
| 57 | # -DTRACE This enables the "trace" command so that the search tree |
50 | # -DTRACE This enables the "trace" command so that the search tree |
| 58 | # can be dumped while running. |
51 | # can be dumped while running. |
| 59 | # -DUNIX This identifies the target O/S as being Unix-based, if this |
52 | # -DUNIX This identifies the target O/S as being Unix-based, if this |
| 60 | # option is omitted, windows is assumed. |
53 | # option is omitted, windows is assumed. |
| 61 | 54 | # |
|
| 62 | # |
55 | # Note: If you compile on a machine with the hardware popcnt |
| - | 56 | # instruction, you should use the -mpopcnt compiler option |
|
| - | 57 | # to make the built-in intrinsic use the hardware rather than |
|
| - | 58 | # the "folding" approach. That is the default in this |
|
| - | 59 | # Makefile so if you do NOT have hardware popcnt, remove all |
|
| - | 60 | # of the -mpopcnt strings in the Makefile lines below. |
|
| - | 61 | # |
|
| 63 | default: |
62 | default: |
| 64 | $(MAKE) -j unix-clang |
63 | $(MAKE) -j unix-clang |
| 65 | help: |
64 | help: |
| 66 | @echo "You must specify the system which you want to compile for:" |
65 | @echo "You must specify the system which you want to compile for:" |
| 67 | @echo "" |
66 | @echo "" |
| - | 67 | @echo "make unix-clang Unix w/clang compiler (MacOS usually)" |
|
| 68 | @echo "make unix-gcc Unix w/gcc compiler" |
68 | @echo "make unix-gcc Unix w/gcc compiler" |
| 69 | @echo "make unix-icc Unix w/icc compiler" |
69 | @echo "make unix-icc Unix w/icc compiler" |
| 70 | @echo "make profile profile-guided-optimizations" |
70 | @echo "make profile profile-guided-optimizations" |
| 71 | @echo " (edit Makefile to make the profile" |
71 | @echo " (edit Makefile to make the profile" |
| 72 | @echo " option use the right compiler)" |
72 | @echo " option use the right compiler)" |
| 73 | @echo "" |
73 | @echo "" |
| - | 74 | ||
| 74 | 75 | ||
| 75 | quick: |
76 | quick: |
| 76 | $(MAKE) target=UNIX \ |
77 | $(MAKE) target=UNIX \ |
| 77 |
|
78 | CC=clang \ |
| 78 |
|
79 | opt='-DSYZYGY -DTEST -DTRACE -DCPUS=4' \ |
| 79 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 |
80 | CFLAGS='-mpopcnt -Wall -Wno-array-bounds -pipe -O3' \ |
| 80 | CXFLAGS='-Wall -Wno-array-bounds -pipe -O3 -pthread' \ |
- | |
| 81 | LDFLAGS='$(LDFLAGS) -lstdc++' \ |
81 | LDFLAGS='$(LDFLAGS) -lstdc++' \ |
| 82 | crafty-make |
82 | crafty-make |
| 83 | 83 | ||
| 84 | unix-gcc: |
84 | unix-gcc: |
| 85 | $(MAKE) -j target=UNIX \ |
85 | $(MAKE) -j target=UNIX \ |
| 86 | CC=gcc |
86 | CC=gcc \ |
| 87 | opt='- |
87 | opt='-DSYZYGY -DTEST -DCPUS=4' \ |
| 88 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-use \ |
88 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-use \ |
| 89 | -fprofile-correction -pthread' \ |
- | |
| 90 | CXFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-use \ |
- | |
| 91 | -fprofile-correction -pthread' \ |
89 | -mpopcnt -fprofile-correction -pthread' \ |
| 92 | LDFLAGS='$(LDFLAGS) -fprofile-use -pthread -lstdc++' \ |
90 | LDFLAGS='$(LDFLAGS) -fprofile-use -pthread -lstdc++' \ |
| 93 | crafty-make |
91 | crafty-make |
| 94 | 92 | ||
| 95 | unix-gcc-profile: |
93 | unix-gcc-profile: |
| 96 | $(MAKE) -j target=UNIX \ |
94 | $(MAKE) -j target=UNIX \ |
| 97 | CC=gcc |
95 | CC=gcc \ |
| 98 | opt='- |
96 | opt='-DSYZYGY -DTEST -DCPUS=4' \ |
| 99 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-arcs \ |
97 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-arcs \ |
| 100 | -pthread' \ |
- | |
| 101 | CXFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-arcs \ |
- | |
| 102 | -pthread' \ |
98 | -mpopcnt -pthread' \ |
| 103 | LDFLAGS='$(LDFLAGS) -fprofile-arcs -pthread -lstdc++ ' \ |
99 | LDFLAGS='$(LDFLAGS) -fprofile-arcs -pthread -lstdc++ ' \ |
| 104 | crafty-make |
100 | crafty-make |
| 105 | 101 | ||
| 106 | unix-clang: |
102 | unix-clang: |
| 107 | @/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-profdata merge -output=crafty.profdata *.profraw |
103 | @/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-profdata merge -output=crafty.profdata *.profraw |
| 108 | $(MAKE) -j target=UNIX \ |
104 | $(MAKE) -j target=UNIX \ |
| 109 | CC=clang |
105 | CC=clang \ |
| 110 | opt='- |
106 | opt='-DSYZYGY -DTEST -DCPUS=4' \ |
| 111 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ |
107 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ |
| 112 | -fprofile-instr-use=crafty.profdata' \ |
- | |
| 113 | CXFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ |
- | |
| 114 | -fprofile-instr-use=crafty.profdata' \ |
108 | -mpopcnt -fprofile-instr-use=crafty.profdata' \ |
| 115 | LDFLAGS='$(LDFLAGS) -fprofile-use -lstdc++' \ |
109 | LDFLAGS='$(LDFLAGS) -fprofile-use -lstdc++' \ |
| 116 | crafty-make |
110 | crafty-make |
| 117 | 111 | ||
| 118 | unix-clang-profile: |
112 | unix-clang-profile: |
| 119 | $(MAKE) -j target=UNIX \ |
113 | $(MAKE) -j target=UNIX \ |
| 120 | CC=clang |
114 | CC=clang \ |
| 121 | opt='- |
115 | opt='-DSYZYGY -DTEST -DCPUS=4' \ |
| 122 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ |
116 | CFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ |
| 123 | -fprofile-instr-generate' \ |
- | |
| 124 | CXFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ |
- | |
| 125 | -fprofile-instr-generate' \ |
117 | -mpopcnt -fprofile-instr-generate' \ |
| 126 | LDFLAGS='$(LDFLAGS) -fprofile-instr-generate -lstdc++ ' \ |
118 | LDFLAGS='$(LDFLAGS) -fprofile-instr-generate -lstdc++ ' \ |
| 127 | crafty-make |
119 | crafty-make |
| 128 | 120 | ||
| 129 | unix-icc: |
121 | unix-icc: |
| 130 | $(MAKE) -j target=UNIX \ |
122 | $(MAKE) -j target=UNIX \ |
| 131 | CC=icc |
123 | CC=icc \ |
| 132 | opt='- |
124 | opt='-DSYZYGY -DTEST -DCPUS=4' \ |
| 133 | CFLAGS='-Wall -w -O2 -prof_use -prof_dir ./prof -fno-alias \ |
125 | CFLAGS='-Wall -w -O2 -prof_use -prof_dir ./prof -fno-alias \ |
| 134 | -pthread' \ |
126 | -mpopcnt -pthread' \ |
| 135 | CXFLAGS='-Wall -w -O2 -prof_use -prof_dir ./prof -pthread' \ |
- | |
| 136 | LDFLAGS='$(LDFLAGS) -pthread -lstdc++' \ |
127 | LDFLAGS='$(LDFLAGS) -pthread -lstdc++' \ |
| 137 | crafty-make |
128 | crafty-make |
| 138 | 129 | ||
| 139 | unix-icc-profile: |
130 | unix-icc-profile: |
| 140 | $(MAKE) -j target=UNIX \ |
131 | $(MAKE) -j target=UNIX \ |
| 141 | CC=icc |
132 | CC=icc \ |
| 142 | opt='- |
133 | opt='-DSYZYGY -DTEST -DCPUS=4' \ |
| 143 | CFLAGS='-Wall -w -O2 -prof_gen -prof_dir ./prof -fno-alias \ |
134 | CFLAGS='-Wall -w -O2 -prof_gen -prof_dir ./prof -fno-alias \ |
| 144 | -pthread' \ |
135 | -mpopcnt -pthread' \ |
| 145 | CXFLAGS='-Wall -w -O2 -prof_gen -prof_dir ./prof -pthread' \ |
- | |
| 146 | LDFLAGS='$(LDFLAGS) -pthread -lstdc++ ' \ |
136 | LDFLAGS='$(LDFLAGS) -pthread -lstdc++ ' \ |
| 147 | crafty-make |
137 | crafty-make |
| 148 | 138 | ||
| 149 | profile: |
139 | profile: |
| 150 | @rm -rf *.o |
140 | @rm -rf *.o |
| 151 | @rm -rf log.* |
141 | @rm -rf log.* |
| 152 | @rm -rf game.* |
142 | @rm -rf game.* |
| 153 | @rm -rf prof |
143 | @rm -rf prof |
| 154 | @rm -rf *.gcda |
144 | @rm -rf *.gcda |
| 155 | @mkdir prof |
145 | @mkdir prof |
| 156 | @touch *.c |
146 | @touch *.c *.h |
| 157 | $(MAKE) -j unix-clang-profile |
147 | $(MAKE) -j unix-clang-profile |
| 158 | @echo "#!/bin/csh" > runprof |
148 | @echo "#!/bin/csh" > runprof |
| 159 | @echo "./crafty <<EOF" >>runprof |
149 | @echo "./crafty <<EOF" >>runprof |
| 160 | @echo " |
150 | @echo "bench" >>runprof |
| 161 | @echo "mt=0" >>runprof |
151 | @echo "mt=0" >>runprof |
| 162 | @echo "quit" >>runprof |
152 | @echo "quit" >>runprof |
| 163 | @echo "EOF" >>runprof |
153 | @echo "EOF" >>runprof |
| 164 | @chmod +x runprof |
154 | @chmod +x runprof |
| 165 | @./runprof |
155 | @./runprof |
| 166 | @rm runprof |
156 | @rm runprof |
| 167 | @touch *.c |
157 | @touch *.c *.h |
| 168 | $(MAKE) -j unix-clang |
158 | $(MAKE) -j unix-clang |
| 169 | 159 | ||
| 170 | 160 | ||
| 171 | # |
161 | # |
| 172 | # one of the two following definitions for "objects" should be used. The |
162 | # one of the two following definitions for "objects" should be used. The |
| Line 176... | Line 166... | ||
| 176 | # compiler max opportunity to inline functions as appropriate. You should try |
166 | # compiler max opportunity to inline functions as appropriate. You should try |
| 177 | # compiling both ways to see which way produces the fastest code. |
167 | # compiling both ways to see which way produces the fastest code. |
| 178 | # |
168 | # |
| 179 | 169 | ||
| 180 | #objects = main.o iterate.o time.o search.o quiesce.o evaluate.o thread.o \ |
170 | #objects = main.o iterate.o time.o search.o quiesce.o evaluate.o thread.o \ |
| 181 | repeat.o hash.o next.o history.o movgen.o make.o unmake.o attacks.o \ |
171 | repeat.o hash.o next.o history.o movgen.o make.o unmake.o attacks.o \ |
| 182 | see.o |
172 | see.o tbprobe.o boolean.o utility.o book.o drawn.o epd.o \ |
| 183 | init.o input.o autotune.o interrupt.o option.o output |
173 | epdglue.o init.o input.o autotune.o interrupt.o option.o output.o \ |
| 184 | resign.o root.o learn.o setboard.o test.o validate |
174 | ponder.o resign.o root.o learn.o setboard.o test.o validate.o \ |
| 185 | analyze.o evtest.o bench.o edit.o data.o |
175 | annotate.o analyze.o evtest.o bench.o edit.o data.o |
| 186 | 176 | ||
| 187 | objects = crafty.o |
177 | objects = crafty.o |
| 188 | 178 | ||
| 189 | # Do not change anything below this line! |
179 | # Do not change anything below this line! |
| 190 | 180 | ||
| 191 | opts = $(opt) -D$(target) |
181 | opts = $(opt) -D$(target) |
| 192 | 182 | ||
| 193 | # @$(MAKE) -j opt='$(opt)' CXFLAGS='$(CXFLAGS)' CFLAGS='$(CFLAGS)' crafty |
- | |
| 194 | crafty-make: |
183 | crafty-make: |
| 195 | @$(MAKE) opt='$(opt |
184 | @$(MAKE) opt='$(opt)' CFLAGS='$(CFLAGS)' crafty |
| 196 | 185 | ||
| 197 | crafty.o: *.c *.h |
186 | crafty.o: *.c *.h |
| 198 | 187 | ||
| 199 | crafty: $(objects) |
188 | crafty: $(objects) |
| 200 | $(CC) $(LDFLAGS) -o |
189 | $(CC) $(LDFLAGS) -g -o crafty $(objects) -lm $(LIBS) |
| 201 | 190 | ||
| 202 | evaluate.o: evaluate.h |
191 | evaluate.o: evaluate.h |
| 203 | 192 | ||
| 204 | egtb.o: egtb.cpp |
- | |
| 205 | $(CXX) -c $(CXFLAGS) $(opts) egtb.cpp |
- | |
| 206 | clean: |
193 | clean: |
| 207 | -rm -f *.o crafty |
194 | -rm -f *.o crafty |
| 208 | 195 | ||
| 209 | $(objects): chess.h data.h |
196 | $(objects): chess.h data.h |
| 210 | 197 | ||