1 # Makefile for GNU Shogi
2 # Copyright (c) 1993, 1994 Matthias Mutz
4 # GNU Shogi is based on GNU Chess
5 # Copyright (c) 1992 Free Software Foundation
7 # This file is part of GNU SHOGI.
9 # GNU Shogi is free software; you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation; either version 1, or (at your option)
14 # GNU Shogi is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with GNU Shogi; see the file COPYING. If not, write to
21 # the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
25 # gnushogi is a curses-based shogi.
26 # gnushogix is the xshogi based shogi.
27 # gnushogir is a plain dumb-terminal shogi (but with full variation output).
28 # pat2inc converts pattern textfile to include file
29 # sizetest shows memory usage of main data structures
32 # change this if you need shorter filenames
37 # The version number of this GNU Shogi and XShogi release
40 # Relevant file areas.
41 DIST
= ..
/README-
$(VERS
) ..
/doc ..
/misc ..
/src
43 # Installation directory
45 #prefix=/public/projects/shogi
47 # Change these to something less transitory, like /usr/games, and then
48 # compile. Ask your system admin / unix guru to put gnushogi.{hsh,lng,tbk}
50 # Where the binaries live.
51 BINDIR
= $(prefix)/games
52 #BINDIR=/public/projects/shogi/bin
54 # Where language description, our book, and the persistent hash live.
55 LIBDIR
= $(prefix)/games
/lib
/gnushogi
56 #LIBDIR=/public/projects/shogi/lib
58 # Distribution directory
59 DISTDIR
=/public
/projects
/shogi
61 # Programs being distributed
62 PROGS
=gnushogi-
$(VERS
)
66 # For _pow and _conio_kbhit external
70 LCURSES
=-lcurses
-ltermcap
72 # The compiler used for compiling this software.
73 # Use this for a plain C compiler
74 #CC= cc $(OPT) $(GENOPT)
75 # Use this for DEC's ANSI C compiler on Ultrix
76 #CC= c89 $(OPT) $(GENOPT)
77 # Use this if you are lucky enough to have GNU CC.
78 #CC= /usr/pub/bin/gcc -fsigned-char $(OPT) $(GENOPT)
79 CC
= gcc
-W
-fsigned-char
$(OPT
) $(GENOPT
)
80 #CC= cc $(OPT) $(GENOPT)
82 # Miscellaneous CFLAGS. Uncomment the one you need and comment the other
83 #CFLAGS= -p -Dinline="" -traditional-cpp
84 #CFLAGS= -O4 -Qpath . # SunOS cc using unprotoize
85 #CFLAGS= -O4 # Sun acc
86 #CFLAGS= -g -traditional-cpp # debug
87 #CFLAGS= -O2 # DEC ANSI C (c89) on Ultrix.
88 #CFLAGS= +O3 -Aa -D_HPUX_SOURCE -DSYSV # HPUX cc
89 #CFLAGS= -O -finline-functions -fstrength-reduce -D__mips -D__LANGUAGE_C # gnu cc 1.40 on DS5000
90 #CFLAGS= -O -finline-functions -fstrength-reduce # gnu cc 1.40 on others
91 #CFLAGS= -g -w -finline-functions -fstrength-reduce # gnu cc 1.40 on others
92 #CFLAGS= -O2 -funroll-loops -D__mips -D__LANGUAGE_C # gnu cc 2.00 on DS5000
93 #CFLAGS= -O2 -D__alpha -D__LANGUAGE_C # gnu cc 2.00 on Flamingo
94 #CFLAGS= -g -finline-functions -fstrength-reduce -DOLDTIME -DNOFIONREAD # gnu cc 1.40 on sun4
95 #CFLAGS= -O2 -funroll-loops -traditional-cpp -I/usr/local/include/ansi # gnu cc 2.00 on apollo (capella)
96 #CFLAGS= -O2 -funroll-loops -traditional-cpp -DNO_STRING_INCLUDE -DNOFIONREAD # gnu cc 2.00 (hawk)
97 #CFLAGS= -O2 -funroll-loops -DSEVENBIT # djgpp
98 #CFLAGS= -g -funroll-loops # gnu cc 2.00 on SunOS with debug
99 CFLAGS
= -O2
-funroll-loops
# gnu cc 2.00 on SunOS
101 # flags for DJGPP package
102 #COFF2EXE= coff2exe $(GNUSHOGI)
103 #COFF2EXER= coff2exe $(GNUSHOGIR)
105 # Compression program for building distribution files
111 # lines per uuencoded file
114 # compile options for gnushogi
115 # -DQUIETBACKGROUND don't print post information in background ( easy OFF)
116 # -DNOLIST don't list game after exit
117 # -DNOBYTEOPS if your machine does not support bzero and bcopy
118 # -DNOMEMOPS if your machine does not support memset and memcpy
119 # -DNODYNALPHA don't dynamically adjust alpha
120 # -DHISTORY use history killer hueristic
121 # -DHASGETTIMEOFDAY use gettimeofday for more accurate timing
122 # -DLONG64 if you have 64bit longs
123 # -DSYSV if you are using SYSV
124 # -DCACHE Cache static evaluations
125 # -DQUIETBOOKGEN Don't print errors while loading a book or generating a binbook
126 # -DSEMIQUIETBOOKGEN Print less verbose errors while reading book or generating binbook
127 # -DNULLMOVE include null move heuristic
128 # -DXSHOGI create xshogi version
129 # -DBAREBONES do not print statistics (for gnushogix version)
130 # -DHARDTIMELIMIT reaching the time control means loosing the game
132 # -DDEBUG8 dump board,movelist,input move to /tmp/DEBUG if illegal move
133 # -DDEBUG9 dump move list from test command
134 # -DDEBUG10 dump board and move after search before !easy begins
135 # -DDEBUG11 dump board when the move is output
136 # -DDEBUG12 dump boards between moves
137 # -DDEBUG13 dump search control information for each move to /tmp/DEBUG
138 # -DDEBUG40 include extra values of variables for debugging in game list
139 # -DDEBUG41 dump post output to /tmp/DEBUG
140 # -DDEBUG_EVAL dump evaluation of position to /tmp/EVAL on input command "eval"
141 # the rest of the debug options are tied to the debuglevel command
142 # -DDEBUG -DDEBUG4 set up code for debuglevel command
144 # 1 always force evaluation in evaluate
145 # 4 print move list after search
146 # 8 print move list after book before search
147 # 16 print move list after each ply of search
148 # 32 print adds to transposition table
149 # 64 print returns from transposition table lookups
150 # 256 print search tree as it is generated
152 # 1024 interactive tree print
153 # debug? p# where # is no. of plys to print from top of tree (default all plys)
154 # XXXX moves specifying branch of tree to print (default all branches)
155 # return terminates input
156 # 2048 non-interactive trace print
159 OPT
= -DVERYBUGGY
-DQUIETBACKGROUND
-DHARDTIMELIMIT
-DHASGETTIMEOFDAY
-DCACHE
-DNULLMOVE
-DHISTORY
-DEXACTHISTORY
# -DSEMIQUIETBOOKGEN
161 #OPT= -DEASY_OPENINGS -DSMALL_MEMORY -DSLOW_CPU -DSAVE_PTYPE_DISTDATA -DSAVE_NEXTPOS -DVERYBUGGY -DQUIETBACKGROUND -DHARDTIMELIMIT -DHASGETTIMEOFDAY -DNULLMOVE -DCACHE -DHISTORY # -DSAVE_SSCORE -DEXACTHISTORY -DSEMIQUIETBOOKGEN
162 #OPT= -DSMALL_MEMORY -DVERY_SLOW_CPU -DSAVE_PTYPE_DISTDATA -DSAVE_NEXTPOS -DVERYBUGGY -DQUIETBACKGROUND -DHARDTIMELIMIT -DHASGETTIMEOFDAY -DNULLMOVE -DCACHE -DHISTORY # -DSAVE_SSCORE -DEXACTHISTORY -DSEMIQUIETBOOKGEN
164 # options for genmove.c in order to support move ordering at cost of speed
165 # -DTESUJIBONUS add bonus to a move that semms to be a tesuji
166 # -DFIELDBONUS add bonus to regular moves
167 # -DDROPBONUS add bonus to drops
168 # -DDEEPSEARCHCUT check for moves not to consider at deep plys
170 #GENOPT= -DCHECKBONUS -DDEEPSEARCHCUT -DTESUJIBONUS
172 GENOPT
= -DCHECKBONUS
-DDEEPSEARCHCUT
-DTESUJIBONUS
-DDROPBONUS
-DFIELDBONUS
174 # Special options for gnushogix
175 XSHOGI
= -DXSHOGI
-DBAREBONES
-DHARDTIMELIMIT
177 # Debug options for Dgnushogir
178 DEBUG
= -DNONDSP
-DDEBUG_EVAL
-DDEBUG
-DDEBUG4
-DHASHKEYTEST
-DHASHTEST
-DCACHETEST
-DDEBUG41
-DDEBUG9
-DDEBUG10
# -DBOOKTEST
180 # The hashfile is a record of positions seen. It is used by
181 # GNU Shogi to avoid making the same mistakes, a form of learning.
182 HASH
= -DHASHFILE
=\"$(LIBDIR
)/gnushogi.hsh
\"
184 # The "book" is a record of the first few moves, for playing good
185 # moves easily and quickly, saving time, and irritating the human
187 TEXTBOOK
= -DBOOK
=\"$(LIBDIR
)/gnushogi.tbk
\"
188 BINBOOK
= -DBINBOOK
=\"$(LIBDIR
)/gnushogi.bbk
\"
190 # The language file describes capabilities of the program. Perhaps
191 # it is useful for non-English speaking countries and customizing
192 # for their convenience and shogi happiness.
193 LANG
= -DLANGFILE
=\"..
/misc
/gnushogi.lng
\"
195 # The pattern file contains various opening patterns. The program tries to
196 # obtain such a pattern in the opening stage. Sequences of opening
197 # patterns may be described in order to support the correct order of moves.
198 PATTERN
= -DPATTERNFILE
=\"..
/misc
/gnushogi.pat
\"
200 all : $(GNUSHOGI
) $(GNUSHOGIX
) gnushogi.bbk
# sizetest pat2inc
202 $(GNUSHOGI
): mainN.o globals.o bookN.o genmoveN.o patternN.o ataksN.o utilN.o evalN.o initN.o searchN.o tcontrlN.o dspcomN.o uxdsp.o
203 $(CC
) $(CFLAGS
) -o
$(GNUSHOGI
) mainN.o globals.o bookN.o genmoveN.o patternN.o ataksN.o utilN.o evalN.o initN.o searchN.o tcontrlN.o dspcomN.o uxdsp.o
$(LCURSES
) $(LIBS
)
206 $(GNUSHOGIX
): mainX.o globals.o bookX.o genmoveX.o patternX.o ataksN.o utilX.o evalX.o initX.o searchX.o tcontrlX.o dspcomX.o nondspX.o
207 $(CC
) $(CFLAGS
) -o
$(GNUSHOGIX
) mainX.o globals.o bookX.o genmoveX.o patternX.o ataksN.o utilX.o evalX.o initX.o searchX.o tcontrlX.o dspcomX.o nondspX.o
$(LIBS
)
209 $(GNUSHOGIR
): mainN.o globals.o bookN.o genmoveR.o patternR.o ataksR.o utilR.o evalR.o initR.o searchR.o tcontrlN.o dspcomR.o nondspR.o
210 $(CC
) $(CFLAGS
) -o
$(GNUSHOGIR
) mainN.o globals.o bookN.o genmoveR.o patternR.o ataksR.o utilR.o evalR.o initR.o searchR.o tcontrlN.o dspcomR.o nondspR.o
$(LIBS
)
213 D
$(GNUSHOGIR
): mainDR.o globals.o bookDR.o genmoveDR.o patternDR.o ataksDR.o utilDR.o evalDR.o initDR.o searchDR.o tcontrlDR.o dspcomDR.o nondspDR.o
214 $(CC
) $(DEBUG
) $(CFLAGS
) -o D
$(GNUSHOGIR
) mainDR.o globals.o bookDR.o genmoveDR.o patternDR.o ataksDR.o utilDR.o evalDR.o initDR.o searchDR.o tcontrlDR.o dspcomDR.o nondspDR.o
$(LIBS
) $(LIBS
)
216 pat2inc
: nondspDR.o dspcomDR.o globals.o bookDR.o genmoveDR.o patternP.o ataksDR.o utilDR.o evalDR.o initDR.o searchDR.o tcontrlDR.o pat2inc.o
217 $(CC
) $(CFLAGS
) -o pat2inc patternP.o globals.o bookDR.o genmoveDR.o ataksDR.o utilDR.o evalDR.o searchDR.o tcontrlDR.o initDR.o nondspDR.o dspcomDR.o pat2inc.o
$(LIBS
)
220 $(CC
) $(CFLAGS
) -o sizetest sizetest.o
$(LIBS
)
222 pat2inc.o
: pat2inc.c pattern.h gnushogi.h
223 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) $(LANG
) $(BINBOOK
) $(PATTERN
) -c pat2inc.c
225 sizetest.o
: sizetest.c gnushogi.h eval.h
226 $(CC
) $(CFLAGS
) $(HASH
) -c sizetest.c
228 globals.o
: globals.c gnushogi.h version.h
229 $(CC
) $(CFLAGS
) $(HASH
) -c globals.c
231 mainN.o
: main.c gnushogi.h version.h
232 $(CC
) $(CFLAGS
) $(HASH
) $(BINBOOK
) -c main.c
235 mainX.o
: main.c gnushogi.h version.h
236 $(CC
) $(CFLAGS
) $(HASH
) $(BINBOOK
) $(XSHOGI
) -c main.c
239 mainDR.o
: main.c gnushogi.h version.h
240 $(CC
) $(DEBUG
) $(CFLAGS
) $(BINBOOK
) $(HASH
) -c main.c
243 genmoveN.o
: genmove.c gnushogi.h version.h
244 $(CC
) $(CFLAGS
) $(HASH
) -c genmove.c
245 mv genmove.o genmoveN.o
247 genmoveR.o
: genmove.c gnushogi.h version.h
248 $(CC
) -DNONDSP
-DDEBUG_EVAL
$(CFLAGS
) $(HASH
) -c genmove.c
249 mv genmove.o genmoveR.o
251 genmoveDR.o
: genmove.c gnushogi.h version.h
252 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -c genmove.c
253 mv genmove.o genmoveDR.o
255 genmoveX.o
: genmove.c gnushogi.h version.h
256 $(CC
) $(CFLAGS
) $(HASH
) $(XSHOGI
) \
258 mv genmove.o genmoveX.o
260 bookN.o
: book.c gnushogi.h version.h
261 $(CC
) -DNONDSP
$(CFLAGS
) $(HASH
) $(TEXTBOOK
) $(BINBOOK
) -c book.c
264 bookX.o
: book.c gnushogi.h version.h
265 $(CC
) $(CFLAGS
) $(HASH
) $(TEXTBOOK
) $(BINBOOK
) $(XSHOGI
) \
269 bookDR.o
: book.c gnushogi.h version.h
270 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) $(TEXTBOOK
) $(BINBOOK
) \
274 patternN.o
: pattern.c gnushogi.h pattern.h pattern.inc
275 $(CC
) $(CFLAGS
) -c pattern.c
276 mv pattern.o patternN.o
278 patternX.o
: pattern.c gnushogi.h pattern.h pattern.inc
279 $(CC
) $(CFLAGS
) $(XSHOGI
) -c pattern.c
280 mv pattern.o patternX.o
282 patternR.o
: pattern.c gnushogi.h pattern.h pattern.inc
283 $(CC
) $(CFLAGS
) -DNONDSP
-c pattern.c
284 mv pattern.o patternR.o
286 patternDR.o
: pattern.c gnushogi.h pattern.h pattern.inc
287 $(CC
) $(CFLAGS
) $(DEBUG
) -c pattern.c
288 mv pattern.o patternDR.o
290 # to create "pattern.inc" with "pat2inc", the external
291 # pattern textfile must be used.
293 patternP.o
: pattern.c gnushogi.h pattern.h
294 $(CC
) $(DEBUG
) $(CFLAGS
) -DEXTPATTERNFILE
$(PATTERN
) -c pattern.c
295 mv pattern.o patternP.o
297 ataksN.o
: ataks.c gnushogi.h version.h
298 $(CC
) $(CFLAGS
) $(HASH
) -c ataks.c
301 ataksR.o
: ataks.c gnushogi.h version.h
302 $(CC
) $(CFLAGS
) $(HASH
) -DDEBUG_EVAL
-DNONDSP
-c ataks.c
305 ataksDR.o
: ataks.c gnushogi.h version.h
306 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -c ataks.c
309 utilN.o
: util.c gnushogi.h version.h
310 $(CC
) $(CFLAGS
) $(HASH
) -c util.c
313 utilX.o
: util.c gnushogi.h version.h
314 $(CC
) $(CFLAGS
) $(HASH
) $(XSHOGI
) -c util.c
317 utilR.o
: util.c gnushogi.h version.h
318 $(CC
) -DNONDSP
-DDEBUG_EVAL
$(CFLAGS
) $(HASH
) $(XSHOGI
) -c util.c
321 utilDR.o
: util.c gnushogi.h version.h
322 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -c util.c
325 evalN.o
: eval.c eval.h gnushogi.h version.h pattern.h
326 $(CC
) $(CFLAGS
) $(HASH
) -c eval.c
329 evalX.o
: eval.c eval.h gnushogi.h version.h pattern.h
330 $(CC
) $(XSHOGI
) $(CFLAGS
) $(HASH
) -c eval.c
333 evalR.o
: eval.c eval.h gnushogi.h version.h pattern.h
334 $(CC
) -DDEBUG_EVAL
$(CFLAGS
) $(HASH
) -c eval.c
337 evalDR.o
: eval.c eval.h gnushogi.h version.h pattern.h
338 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -c eval.c
341 initN.o
: init.c gnushogi.h version.h pattern.h
342 $(CC
) $(CFLAGS
) $(HASH
) $(LANG
) -c init.c
345 initX.o
: init.c gnushogi.h version.h pattern.h
346 $(CC
) $(CFLAGS
) $(HASH
) $(LANG
) $(XSHOGI
) -c init.c
349 initR.o
: init.c gnushogi.h version.h pattern.h
350 $(CC
) $(CFLAGS
) $(HASH
) $(LANG
) -DNONDSP
-c init.c
353 initDR.o
: init.c gnushogi.h version.h pattern.h
354 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) $(LANG
) -c init.c
357 searchN.o
: search.c gnushogi.h version.h
358 $(CC
) $(CFLAGS
) $(HASH
) -c search.c
359 mv search.o searchN.o
361 searchX.o
: search.c gnushogi.h version.h
362 $(CC
) $(XSHOGI
) $(CFLAGS
) $(HASH
) \
364 mv search.o searchX.o
366 searchR.o
: search.c gnushogi.h version.h
367 $(CC
) -DNONDSP
-DDEBUG_EVAL
$(CFLAGS
) $(HASH
) -c search.c
368 mv search.o searchR.o
370 searchDR.o
: search.c gnushogi.h version.h
371 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -c search.c
372 mv search.o searchDR.o
374 tcontrlN.o
: tcontrl.c gnushogi.h version.h
375 $(CC
) $(CFLAGS
) -c tcontrl.c
376 mv tcontrl.o tcontrlN.o
378 tcontrlX.o
: tcontrl.c gnushogi.h version.h
379 $(CC
) $(XSHOGI
) $(CFLAGS
) -c tcontrl.c
380 mv tcontrl.o tcontrlX.o
382 tcontrlDR.o
: tcontrl.c gnushogi.h version.h
383 $(CC
) $(DEBUG
) $(CFLAGS
) -c tcontrl.c
384 mv tcontrl.o tcontrlDR.o
386 uxdsp.o
: uxdsp.c gnushogi.h version.h
387 $(CC
) $(CFLAGS
) $(HASH
) -c uxdsp.c
389 nondspX.o
: nondsp.c gnushogi.h version.h
390 $(CC
) $(CFLAGS
) $(HASH
) -DNONDSP
$(XSHOGI
) \
392 mv nondsp.o nondspX.o
394 nondspR.o
: nondsp.c gnushogi.h version.h
395 $(CC
) $(CFLAGS
) $(HASH
) -DNONDSP \
397 mv nondsp.o nondspR.o
399 nondspDR.o
: nondsp.c gnushogi.h version.h
400 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -DNONDSP \
402 mv nondsp.o nondspDR.o
404 dspcomN.o
: dspcom.c gnushogi.h version.h
405 $(CC
) $(CFLAGS
) $(HASH
) -c dspcom.c
406 mv dspcom.o dspcomN.o
408 dspcomX.o
: dspcom.c gnushogi.h version.h
409 $(CC
) $(CFLAGS
) $(HASH
) -DNONDSP
$(XSHOGI
) \
411 mv dspcom.o dspcomX.o
413 dspcomR.o
: dspcom.c gnushogi.h version.h
414 $(CC
) $(CFLAGS
) $(HASH
) -DDEBUG_EVAL
-DNONDSP
-DNOFIONREAD \
416 mv dspcom.o dspcomR.o
418 dspcomDR.o
: dspcom.c gnushogi.h version.h
419 $(CC
) $(DEBUG
) $(CFLAGS
) $(HASH
) -DNONDSP
-DNOFIONREAD \
421 mv dspcom.o dspcomDR.o
423 gnushogi.bbk
: $(GNUSHOGIR
)
426 cat ..
/misc
/gnushogi.tbk
> _tmp_t
427 cat
test| .
/$(GNUSHOGIR
) -b _tmp_t
-B .
/gnushogi.bbk
-S
8000 -P
40 3 0
432 -patchlevel
=`cat $(DISTDIR)/gnushogi-$(VERS)/src/version.h|grep patchlevel|sed -e 's/[^0-9]//g'` ;\
433 echo
"GNU patchlevel is $$patchlevel" ;\
435 rm -f gnushogi.
tar.
$(VERS
).
$(Z
)* ;\
436 tar cf
- $(PROGS
) |
$(COMPRESS
) > $(DISTDIR
)/gnushogi-
$(VERS
).
tar.
$(Z
) ;\
437 # rm -f gnushogi.tar.$(VERS).$(Z).uu* ;\
438 # uuencode gnushogi-$(VERS).tar.$(Z) gnushogi-$(VERS).tar.$(Z) > gnushogi-$(VERS).tar.$(Z).uu ;\
440 # split -$(UULINES) gnushogi-$(VERS).tar.$(Z).uu ;\
442 # mv $$i $(DISTDIR)/GNU_Shogi_$$i; \
446 -cp gnushogi
$(BINDIR
)/gnushogi
447 -cp gnushogix
$(BINDIR
)/gnushogix
448 -cp gnushogir
$(BINDIR
)/gnushogir
449 -cp .
/gnushogi.bbk
$(LIBDIR
)/gnushogi.bbk
452 -rm -f gnushogix gnushogi gnushogir Dgnushogir sizetest pat2inc
453 -echo
$(DISTDIR
)/gnushogi-
$(VERS
)
454 -rm -f
$(DISTDIR
)/gnushogi-
$(VERS
)/src
/gnushogi.bbk
455 -find
$(DISTDIR
)/gnushogi-
$(VERS
) \
( -name
'*.o' -o
-name
'*~' -o
-name
'CL*' -o
-name
'PATCH*' -o
-name
'#*#' -o
-name
'%*%' -o
-name
'*orig' -o
-name
'CL*' -o
-name
'*prt' -o
-name
'*bak' -o
-name
'*BAK' \
) -exec
rm -f
{} \
;