# MinaseShogiSystemためのMakefile (for GNU make) ifeq ($(OS),Windows_NT) CC = mingw DEL = del endif ifeq ($(CC),cc) CC = gcc DEL = rm -f endif ifeq ($(CC),icc) # for ICC for Linux CFLAGS = -Wall -O3 -ipo -no-prec-div -unroll -fno-alias -DNDEBUG LFLAGS = -ipo -lpthread # for core i3/5/7 TARGET_ARCH = -axCORE-AVX-I -march=corei7-avx # for Pentium4 #TARGET_ARCH = -xSSE2 -I/usr/include/i386-linux-gnu # for Phenom2 #TARGET_ARCH = -axSSE4.1 # amd64 #TARGET_ARCH = -axSSSE3 endif ifeq ($(CC),mingw) ifeq ($(BIT),32) # for MingWin32 (sjis) PATH = c:\MinGW\bin CC = mingw32-gcc # CC = c:\TDM-GCC-64\bin\gcc else # for MingWin64 (sjis) # PATH = c:\TDM-GCC-64\bin PATH = C:\Program Files\mingw-w64\x86_64-6.2.0-win32-seh-rt_v5-rev1\mingw64\bin CC = x86_64-w64-mingw32-gcc endif CFLAGS = --input-charset=cp932 --exec-charset=cp932 -ffast-math -Wall -Wno-unused-result LFLAGS = # for release CFLAGS += -DNDEBUG -O3 -fno-exceptions -fomit-frame-pointer -fstrict-aliasing LFLAGS += -O3 # for board_test #CFLAGS += -DNDEBUG -DBOARD_TEST -O3 -fno-exceptions -fomit-frame-pointer -fstrict-aliasing # for code analyze #CFLAGS += -DNDEBUG -O1 -fno-exceptions -fstrict-aliasing -g # for profile #CFLAGS += -DNDEBUG -O3 -fno-exceptions -fstrict-aliasing #PROFILE = -pg # for debug #CFLAGS += -DDEBUG -O1 -Og -fno-exceptions -fomit-frame-pointer -fstrict-aliasing -g # for core avx2 #TARGET_ARCH = -march=core-avx2 # for core i3/5/7 TARGET_ARCH = -march=corei7-avx # for core i3/5/7 (for XP 32bit) #TARGET_ARCH = -march=corei7 # for core2 #TARGET_ARCH = -march=core2 # for Pentium4 (prescott) #TARGET_ARCH = -march=prescott # for Pentium4 #TARGET_ARCH = -march=pentium4 # for Phenom2 #TARGET_ARCH = -march=amdfam10 ifeq ($(BIT),32) TARGET_ARCH += -m32 else TARGET_ARCH += -m64 endif endif ifeq ($(CC),gcc) # for GCC x32/x64 (Linux) CFLAGS = -Wall -Wno-unused-result # with debug #CFLAGS += -O0 -g # with no debug CFLAGS += -DNDEBUG -O3 -fno-exceptions -fomit-frame-pointer -fstrict-aliasing LFLAGS += -O3 -Wl,--no-as-needed -lpthread -lm # for native #TARGET_ARCH = -march=native # for core i3/5/7 #TARGET_ARCH = -march=corei7-avx #TARGET_ARCH = -march=corei7 # for core2 #TARGET_ARCH = -march=core2 # for Pentium4 (64bit) #TARGET_ARCH = -march=nocona # for Pentium4 (32bit) #TARGET_ARCH = -march=pentium4 # for Phenom2 TARGET_ARCH = -march=amdfam10 endif ifeq ($(CC),opencc) # for Open64 CFLAGS = -Ofast -ipa -Wall -DNDEBUG LFLAGS += -ipa -lpthread # for auto #TARGET_ARCH = -mtune=auto # for Phenom2 TARGET_ARCH = -mtune=barcelona -I/usr/include/x86_64-linux-gnu endif ifeq ($(CC),clang) # for CLANG (x32/x64 (Linux) CFLAGS = -Wall -Ic:\mingw\include # with debug #CFLAGS += -O0 -g # with no debug CFLAGS += -DNDEBUG -O3 LFLAGS += -lpthread -lm # for core i3/5/7 TARGET_ARCH = -m64 -mavx # for Pentium4 #TARGET_ARCH = -m32 -msse2 # for Phenom2 #TARGET_ARCH = -m64 -msse2 endif ifeq ($(OS),Windows_NT) OBJDIR = objs else OBJDIR = ./objs endif COMMON_OBJS =\ $(OBJDIR)/mss.o\ $(OBJDIR)/attack.o\ $(OBJDIR)/bit_function.o\ $(OBJDIR)/check.o\ $(OBJDIR)/helper.o\ $(OBJDIR)/hash.o\ $(OBJDIR)/make_drop.o\ $(OBJDIR)/make_move.o\ $(OBJDIR)/make_evasion.o\ $(OBJDIR)/make_capture.o\ $(OBJDIR)/mate_1ply.o\ $(OBJDIR)/ordering.o\ $(OBJDIR)/quiescence.o\ $(OBJDIR)/see.o LEARN1_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/evalute_nohash.o\ $(OBJDIR)/bod.o\ $(OBJDIR)/csa2move.o\ $(OBJDIR)/feature.o\ $(OBJDIR)/weight_p.o\ $(OBJDIR)/learn1.o LEARN4_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/evalute_nohash.o\ $(OBJDIR)/bod.o\ $(OBJDIR)/csa2move.o\ $(OBJDIR)/feature.o\ $(OBJDIR)/weight_p.o\ $(OBJDIR)/learn4.o MATERIAL_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/csa2move.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/material.o NEXT_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/bod.o\ $(OBJDIR)/clock.o\ $(OBJDIR)/root_search.o\ $(OBJDIR)/search.o\ $(OBJDIR)/next.o NEXT_USI_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/clock.o\ $(OBJDIR)/root_search.o\ $(OBJDIR)/search.o\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/usi_sub.o\ $(OBJDIR)/next_usi.o TEST_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/bod.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/test.o SEE_TEST_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/bod.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/see_test.o MOVE_TEST_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/bod.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/move_test.o N_MOVES_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/bod.o\ $(OBJDIR)/csa2move.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/n_moves.o MSS_USI_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/clock.o\ $(OBJDIR)/root_search.o\ $(OBJDIR)/search.o\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/usi.o\ $(OBJDIR)/usi_sub.o MSS_XSHOGI_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/evalute.o\ $(OBJDIR)/xshogi.o BOOK_ADD_OBJS =\ $(COMMON_OBJS)\ $(OBJDIR)/book_probe.o\ $(OBJDIR)/book_add.o\ $(OBJDIR)/csa2move.o\ $(OBJDIR)/evalute.o $(OBJDIR)/learn1.o: learn.h $(OBJDIR)/learn4.o: learn.h $(OBJDIR)/feature.o: feature.h $(OBJDIR)/weight.o: feature.h $(OBJDIR)/evalute_nohash.o: evalute.c $(CC) $(TARGET_ARCH) $(CFLAGS) $(PROFILE) -DNO_EVAL_HASH -c -o $@ evalute.c $(OBJDIR)/weight_p.o: weight.c feature.h mutex.h $(CC) $(TARGET_ARCH) $(CFLAGS) $(PROFILE) -DPARALLEL -c -o $@ weight.c $(OBJDIR)/%.o:%.c mss.h defines.h bit_function.h ifeq ($(OS),Windows_NT) @if not exist $(OBJDIR)/$(NULL) mkdir $(OBJDIR) else @if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi endif $(CC) $(TARGET_ARCH) $(CFLAGS) $(PROFILE) -c -o $@ $< mss_usi: $(MSS_USI_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ mss_xshogi: $(MSS_XSHOGI_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ learn4: $(LEARN4_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ learn1: $(LEARN1_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ material: $(MATERIAL_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ next: $(NEXT_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ next_usi: $(NEXT_USI_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ test: $(TEST_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ see_test: $(SEE_TEST_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ move_test: $(MOVE_TEST_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ n_moves: $(N_MOVES_OBJS) $(CC) $(TARGET_ARCH) $(PROFILE) $(LFLAGS) -o $@ $^ wdump: wdump.c feature.h $(CC) $(TARGET_ARCH) $(CFLAGS) -o $@ wdump.c winit: winit.c feature.h $(CC) $(TARGET_ARCH) $(CFLAGS) -o $@ $@ key_gen: key_gen.c mt19937-64.c $(CC) $(TARGET_ARCH) $(CFLAGS) -o $@ $^ book_add: $(BOOK_ADD_OBJS) $(CC) $(TARGET_ARCH) $(CFLAGS) -o $@ $^ .PHONY : clean clean: ifeq ($(OS),Windows_NT) $(DEL) objs\*.o else nkf --overwrite -w -Lu *.c *.h $(DEL) objs/*.o endif # アセンブラソース作成 %.s: %.c $(CC) $(CFLAGS) $(TARGET_ARCH) -masm=intel -S $^ # $(CC) $(CFLAGS) $(TARGET_ARCH) -g $(LFLAGS) -c $^ # objdump -S -M intel $*.o > $*.s # $(DEL) $*.o