Subversion Repositories Games.Chess Giants

Rev

Rev 154 | Rev 182 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 154 Rev 169
Line 2... Line 2...
2
# Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
2
# Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
3
# Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
3
# Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
4
# Copyright (C) 2015-2016 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
4
# Copyright (C) 2015-2018 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
5
#
5
#
6
# Stockfish is free software: you can redistribute it and/or modify
6
# Stockfish is free software: you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation, either version 3 of the License, or
8
# the Free Software Foundation, either version 3 of the License, or
9
# (at your option) any later version.
9
# (at your option) any later version.
Line 48... Line 48...
48
#
48
#
49
# flag                --- Comp switch --- Description
49
# flag                --- Comp switch --- Description
50
# ----------------------------------------------------------------------------
50
# ----------------------------------------------------------------------------
51
#
51
#
52
# debug = yes/no      --- -DNDEBUG         --- Enable/Disable debug mode
52
# debug = yes/no      --- -DNDEBUG         --- Enable/Disable debug mode
-
 
53
# sanitize = undefined/thread/no (-fsanitize )
53
# sanitize = yes/no   --- (-fsanitize )    --- enable undefined behavior checks
54
#                     --- ( undefined )    --- enable undefined behavior checks
-
 
55
#                     --- ( thread    )    --- enable threading error  checks
54
# optimize = yes/no   --- (-O3/-fast etc.) --- Enable/Disable optimizations
56
# optimize = yes/no   --- (-O3/-fast etc.) --- Enable/Disable optimizations
55
# arch = (name)       --- (-arch)          --- Target architecture
57
# arch = (name)       --- (-arch)          --- Target architecture
56
# bits = 64/32        --- -DIS_64BIT       --- 64-/32-bit operating system
58
# bits = 64/32        --- -DIS_64BIT       --- 64-/32-bit operating system
57
# prefetch = yes/no   --- -DUSE_PREFETCH   --- Use prefetch asm-instruction
59
# prefetch = yes/no   --- -DUSE_PREFETCH   --- Use prefetch asm-instruction
58
# popcnt = yes/no     --- -DUSE_POPCNT     --- Use popcnt asm-instruction
60
# popcnt = yes/no     --- -DUSE_POPCNT     --- Use popcnt asm-instruction
Line 137... Line 139...
137
### Section 3. Low-level configuration
139
### Section 3. Low-level configuration
138
### ==========================================================================
140
### ==========================================================================
139
 
141
 
140
### 3.1 Selecting compiler (default = gcc)
142
### 3.1 Selecting compiler (default = gcc)
141
 
143
 
142
CXXFLAGS += -Wall -Wcast-qual -fno-exceptions -fno-rtti -std=c++11 $(EXTRACXXFLAGS)
144
CXXFLAGS += -Wall -Wcast-qual -fno-exceptions -std=c++11 $(EXTRACXXFLAGS)
143
DEPENDFLAGS += -std=c++11
145
DEPENDFLAGS += -std=c++11
144
LDFLAGS += $(EXTRALDFLAGS)
146
LDFLAGS += $(EXTRALDFLAGS)
145
 
147
 
146
ifeq ($(COMP),)
148
ifeq ($(COMP),)
147
	COMP=gcc
149
	COMP=gcc
Line 153... Line 155...
153
	CXXFLAGS += -pedantic -Wextra -Wshadow
155
	CXXFLAGS += -pedantic -Wextra -Wshadow
154
 
156
 
155
	ifeq ($(ARCH),armv7)
157
	ifeq ($(ARCH),armv7)
156
		ifeq ($(OS),Android)
158
		ifeq ($(OS),Android)
157
			CXXFLAGS += -m$(bits)
159
			CXXFLAGS += -m$(bits)
-
 
160
			LDFLAGS += -m$(bits)
158
		endif
161
		endif
159
	else
162
	else
160
		CXXFLAGS += -m$(bits)
163
		CXXFLAGS += -m$(bits)
-
 
164
		LDFLAGS += -m$(bits)
161
	endif
165
	endif
162
 
166
 
163
	ifneq ($(KERNEL),Darwin)
167
	ifneq ($(KERNEL),Darwin)
164
	   LDFLAGS += -Wl,--no-as-needed
168
	   LDFLAGS += -Wl,--no-as-needed
165
	endif
169
	endif
Line 198... Line 202...
198
 
202
 
199
ifeq ($(COMP),clang)
203
ifeq ($(COMP),clang)
200
	comp=clang
204
	comp=clang
201
	CXX=clang++
205
	CXX=clang++
202
	CXXFLAGS += -pedantic -Wextra -Wshadow
206
	CXXFLAGS += -pedantic -Wextra -Wshadow
-
 
207
ifneq ($(KERNEL),Darwin)
-
 
208
ifneq ($(KERNEL),OpenBSD)
-
 
209
	LDFLAGS += -latomic
-
 
210
endif
-
 
211
endif
203
 
212
 
204
	ifeq ($(ARCH),armv7)
213
	ifeq ($(ARCH),armv7)
205
		ifeq ($(OS),Android)
214
		ifeq ($(OS),Android)
206
			CXXFLAGS += -m$(bits)
215
			CXXFLAGS += -m$(bits)
207
			LDFLAGS += -m$(bits)
216
			LDFLAGS += -m$(bits)
208
		endif
217
		endif
209
	else
218
	else
210
		CXXFLAGS += -m$(bits)
219
		CXXFLAGS += -m$(bits)
211
		LDFLAGS += -m$(bits)
220
		LDFLAGS += -m$(bits)
212
	endif
-
 
213
 
-
 
214
	ifeq ($(KERNEL),Darwin)
-
 
215
		CXXFLAGS += -stdlib=libc++
-
 
216
		DEPENDFLAGS += -stdlib=libc++
-
 
217
	endif
221
	endif
218
endif
222
endif
219
 
223
 
220
ifeq ($(comp),icc)
224
ifeq ($(comp),icc)
221
	profile_prepare = icc-profile-prepare
-
 
222
	profile_make = icc-profile-make
225
	profile_make = icc-profile-make
223
	profile_use = icc-profile-use
226
	profile_use = icc-profile-use
224
	profile_clean = icc-profile-clean
-
 
225
else
227
else
-
 
228
ifeq ($(comp),clang)
226
	profile_prepare = gcc-profile-prepare
229
	profile_make = clang-profile-make
-
 
230
	profile_use = clang-profile-use
-
 
231
else
227
	profile_make = gcc-profile-make
232
	profile_make = gcc-profile-make
228
	profile_use = gcc-profile-use
233
	profile_use = gcc-profile-use
229
	profile_clean = gcc-profile-clean
234
endif
230
endif
235
endif
231
 
236
 
232
ifeq ($(KERNEL),Darwin)
237
ifeq ($(KERNEL),Darwin)
233
	CXXFLAGS += -arch $(arch) -mmacosx-version-min=10.9
238
	CXXFLAGS += -arch $(arch) -mmacosx-version-min=10.9
234
	LDFLAGS += -arch $(arch) -mmacosx-version-min=10.9
239
	LDFLAGS += -arch $(arch) -mmacosx-version-min=10.9
Line 261... Line 266...
261
else
266
else
262
	CXXFLAGS += -g
267
	CXXFLAGS += -g
263
endif
268
endif
264
 
269
 
265
### 3.2.2 Debugging with undefined behavior sanitizers
270
### 3.2.2 Debugging with undefined behavior sanitizers
266
ifeq ($(sanitize),yes)
271
ifneq ($(sanitize),no)
267
	CXXFLAGS += -g3 -fsanitize=undefined
272
        CXXFLAGS += -g3 -fsanitize=$(sanitize) -fuse-ld=gold
-
 
273
        LDFLAGS += -fsanitize=$(sanitize) -fuse-ld=gold
268
endif
274
endif
269
 
275
 
270
### 3.3 Optimization
276
### 3.3 Optimization
271
ifeq ($(optimize),yes)
277
ifeq ($(optimize),yes)
272
 
278
 
Line 294... Line 300...
294
		endif
300
		endif
295
	endif
301
	endif
296
 
302
 
297
	ifeq ($(comp),clang)
303
	ifeq ($(comp),clang)
298
		ifeq ($(KERNEL),Darwin)
304
		ifeq ($(KERNEL),Darwin)
299
			ifeq ($(pext),no)
-
 
300
				CXXFLAGS += -flto
305
				CXXFLAGS += -flto
301
				LDFLAGS += $(CXXFLAGS)
306
				LDFLAGS += $(CXXFLAGS)
302
			endif
-
 
303
			ifeq ($(arch),i386)
307
			ifeq ($(arch),i386)
304
				CXXFLAGS += -mdynamic-no-pic
308
				CXXFLAGS += -mdynamic-no-pic
305
			endif
309
			endif
306
			ifeq ($(arch),x86_64)
310
			ifeq ($(arch),x86_64)
307
				CXXFLAGS += -mdynamic-no-pic
311
				CXXFLAGS += -mdynamic-no-pic
Line 421... Line 425...
421
	@echo "make build ARCH=x86-64 COMP=clang"
425
	@echo "make build ARCH=x86-64 COMP=clang"
422
	@echo "make profile-build ARCH=x86-64-modern COMP=gcc COMPCXX=g++-4.8"
426
	@echo "make profile-build ARCH=x86-64-modern COMP=gcc COMPCXX=g++-4.8"
423
	@echo ""
427
	@echo ""
424
 
428
 
425
 
429
 
-
 
430
.PHONY: help build profile-build strip install clean objclean profileclean help \
-
 
431
        config-sanity icc-profile-use icc-profile-make gcc-profile-use gcc-profile-make \
426
.PHONY: build profile-build
432
        clang-profile-use clang-profile-make
427
build:
433
 
428
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
434
build: config-sanity
429
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
435
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
430
 
436
 
431
profile-build:
-
 
432
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
-
 
433
	@echo ""
-
 
434
	@echo "Step 0/4. Preparing for profile build."
437
profile-build: config-sanity objclean profileclean
435
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_prepare)
-
 
436
	@echo ""
438
	@echo ""
437
	@echo "Step 1/4. Building executable for benchmark ..."
439
	@echo "Step 1/4. Building instrumented executable ..."
438
	@touch *.cpp *.h syzygy/*.cpp syzygy/*.h
-
 
439
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_make)
440
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_make)
440
	@echo ""
441
	@echo ""
441
	@echo "Step 2/4. Running benchmark for pgo-build ..."
442
	@echo "Step 2/4. Running benchmark for pgo-build ..."
442
	$(PGOBENCH) > /dev/null
443
	$(PGOBENCH) > /dev/null
443
	@echo ""
444
	@echo ""
444
	@echo "Step 3/4. Building final executable ..."
445
	@echo "Step 3/4. Building optimized executable ..."
445
	@touch *.cpp *.h syzygy/*.cpp syzygy/*.h
446
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) objclean
446
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_use)
447
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_use)
447
	@echo ""
448
	@echo ""
448
	@echo "Step 4/4. Deleting profile data ..."
449
	@echo "Step 4/4. Deleting profile data ..."
449
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_clean)
450
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) profileclean
450
 
451
 
451
strip:
452
strip:
452
	strip $(EXE)
453
	strip $(EXE)
453
 
454
 
454
install:
455
install:
455
	-mkdir -p -m 755 $(BINDIR)
456
	-mkdir -p -m 755 $(BINDIR)
456
	-cp $(EXE) $(BINDIR)
457
	-cp $(EXE) $(BINDIR)
457
	-strip $(BINDIR)/$(EXE)
458
	-strip $(BINDIR)/$(EXE)
458
 
459
 
-
 
460
#clean all
-
 
461
clean: objclean profileclean
-
 
462
	@rm -f .depend *~ core
-
 
463
 
-
 
464
# clean binaries and objects
459
clean:
465
objclean:
-
 
466
	@rm -f $(EXE) $(EXE).exe *.o ./syzygy/*.o
-
 
467
 
-
 
468
# clean auxiliary profiling files
-
 
469
profileclean:
-
 
470
	@rm -rf profdir
460
	$(RM) $(EXE) $(EXE).exe *.o .depend *~ core bench.txt *.gcda ./syzygy/*.o ./syzygy/*.gcda
471
	@rm -f bench.txt *.gcda ./syzygy/*.gcda *.gcno ./syzygy/*.gcno
-
 
472
	@rm -f stockfish.profdata *.profraw
461
 
473
 
462
default:
474
default:
463
	help
475
	help
464
 
476
 
465
### ==========================================================================
477
### ==========================================================================
Line 470... Line 482...
470
 
482
 
471
config-sanity:
483
config-sanity:
472
	@echo ""
484
	@echo ""
473
	@echo "Config:"
485
	@echo "Config:"
474
	@echo "debug: '$(debug)'"
486
	@echo "debug: '$(debug)'"
-
 
487
	@echo "sanitize: '$(sanitize)'"
475
	@echo "optimize: '$(optimize)'"
488
	@echo "optimize: '$(optimize)'"
476
	@echo "arch: '$(arch)'"
489
	@echo "arch: '$(arch)'"
477
	@echo "bits: '$(bits)'"
490
	@echo "bits: '$(bits)'"
478
	@echo "kernel: '$(KERNEL)'"
491
	@echo "kernel: '$(KERNEL)'"
479
	@echo "os: '$(OS)'"
492
	@echo "os: '$(OS)'"
Line 488... Line 501...
488
	@echo "LDFLAGS: $(LDFLAGS)"
501
	@echo "LDFLAGS: $(LDFLAGS)"
489
	@echo ""
502
	@echo ""
490
	@echo "Testing config sanity. If this fails, try 'make help' ..."
503
	@echo "Testing config sanity. If this fails, try 'make help' ..."
491
	@echo ""
504
	@echo ""
492
	@test "$(debug)" = "yes" || test "$(debug)" = "no"
505
	@test "$(debug)" = "yes" || test "$(debug)" = "no"
-
 
506
	@test "$(sanitize)" = "undefined" || test "$(sanitize)" = "thread" || test "$(sanitize)" = "no"
493
	@test "$(optimize)" = "yes" || test "$(optimize)" = "no"
507
	@test "$(optimize)" = "yes" || test "$(optimize)" = "no"
494
	@test "$(arch)" = "any" || test "$(arch)" = "x86_64" || test "$(arch)" = "i386" || \
508
	@test "$(arch)" = "any" || test "$(arch)" = "x86_64" || test "$(arch)" = "i386" || \
495
	 test "$(arch)" = "ppc64" || test "$(arch)" = "ppc" || test "$(arch)" = "armv7"
509
	 test "$(arch)" = "ppc64" || test "$(arch)" = "ppc" || test "$(arch)" = "armv7"
496
	@test "$(bits)" = "32" || test "$(bits)" = "64"
510
	@test "$(bits)" = "32" || test "$(bits)" = "64"
497
	@test "$(prefetch)" = "yes" || test "$(prefetch)" = "no"
511
	@test "$(prefetch)" = "yes" || test "$(prefetch)" = "no"
Line 501... Line 515...
501
	@test "$(comp)" = "gcc" || test "$(comp)" = "icc" || test "$(comp)" = "mingw" || test "$(comp)" = "clang"
515
	@test "$(comp)" = "gcc" || test "$(comp)" = "icc" || test "$(comp)" = "mingw" || test "$(comp)" = "clang"
502
 
516
 
503
$(EXE): $(OBJS)
517
$(EXE): $(OBJS)
504
	$(CXX) -o $@ $(OBJS) $(LDFLAGS)
518
	$(CXX) -o $@ $(OBJS) $(LDFLAGS)
505
 
519
 
506
gcc-profile-prepare:
520
clang-profile-make:
-
 
521
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
-
 
522
	EXTRACXXFLAGS='-fprofile-instr-generate ' \
-
 
523
	EXTRALDFLAGS=' -fprofile-instr-generate' \
-
 
524
	all
-
 
525
 
-
 
526
clang-profile-use:
-
 
527
	llvm-profdata merge -output=stockfish.profdata *.profraw
507
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) gcc-profile-clean
528
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
-
 
529
	EXTRACXXFLAGS='-fprofile-instr-use=stockfish.profdata' \
-
 
530
	EXTRALDFLAGS='-fprofile-use ' \
-
 
531
	all
508
 
532
 
509
gcc-profile-make:
533
gcc-profile-make:
510
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
534
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
511
	EXTRACXXFLAGS='-fprofile-generate' \
535
	EXTRACXXFLAGS='-fprofile-generate' \
512
	EXTRALDFLAGS='-lgcov' \
536
	EXTRALDFLAGS='-lgcov' \
Line 515... Line 539...
515
gcc-profile-use:
539
gcc-profile-use:
516
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
540
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
517
	EXTRACXXFLAGS='-fprofile-use -fno-peel-loops -fno-tracer' \
541
	EXTRACXXFLAGS='-fprofile-use -fno-peel-loops -fno-tracer' \
518
	EXTRALDFLAGS='-lgcov' \
542
	EXTRALDFLAGS='-lgcov' \
519
	all
543
	all
520
 
-
 
521
gcc-profile-clean:
-
 
522
	@rm -rf *.gcda *.gcno syzygy/*.gcda syzygy/*.gcno bench.txt
-
 
523
 
-
 
524
icc-profile-prepare:
-
 
525
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) icc-profile-clean
-
 
526
	@mkdir profdir
-
 
527
 
544
 
528
icc-profile-make:
545
icc-profile-make:
-
 
546
	@mkdir -p profdir
529
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
547
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
530
	EXTRACXXFLAGS='-prof-gen=srcpos -prof_dir ./profdir' \
548
	EXTRACXXFLAGS='-prof-gen=srcpos -prof_dir ./profdir' \
531
	all
549
	all
532
 
550
 
533
icc-profile-use:
551
icc-profile-use:
534
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
552
	$(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
535
	EXTRACXXFLAGS='-prof_use -prof_dir ./profdir' \
553
	EXTRACXXFLAGS='-prof_use -prof_dir ./profdir' \
536
	all
554
	all
537
 
-
 
538
icc-profile-clean:
-
 
539
	@rm -rf profdir bench.txt
-
 
540
 
555
 
541
.depend:
556
.depend:
542
	-@$(CXX) $(DEPENDFLAGS) -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null
557
	-@$(CXX) $(DEPENDFLAGS) -MM $(OBJS:.o=.cpp) > $@ 2> /dev/null
543
 
558
 
544
-include .depend
559
-include .depend