]> git.sesse.net Git - stockfish/blobdiff - src/Makefile
fixup
[stockfish] / src / Makefile
index f77db2b61a0b3570c18d6ea5952a23e8aa6388d6..c7137696140ab571992bddec5c2f01b43cc38485 100644 (file)
@@ -1,7 +1,7 @@
 # Stockfish, a UCI chess playing engine derived from Glaurung 2.1
 # Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
 # Copyright (C) 2008-2015 Marco Costalba, Joona Kiiski, Tord Romstad
-# Copyright (C) 2015-2017 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
+# Copyright (C) 2015-2019 Marco Costalba, Joona Kiiski, Gary Linscott, Tord Romstad
 #
 # Stockfish is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 ### Section 1. General Configuration
 ### ==========================================================================
 
-### Establish the operating system name
-KERNEL = $(shell uname -s)
-ifeq ($(KERNEL),Linux)
-       OS = $(shell uname -o)
-endif
-
 ### Executable name
+ifeq ($(COMP),mingw)
+EXE = stockfish.exe
+else
 EXE = stockfish
+endif
 
 ### Installation dir definitions
 PREFIX = /usr/local
@@ -38,10 +36,16 @@ BINDIR = $(PREFIX)/bin
 PGOBENCH = ./$(EXE) bench
 
 ### Object files
-OBJS = benchmark.o bitbase.o bitboard.o endgame.o evaluate.o main.o \
+OBJS = benchmark.o bitbase.o bitboard.o cluster.o endgame.o evaluate.o main.o \
        material.o misc.o movegen.o movepick.o pawns.o position.o psqt.o \
        search.o thread.o timeman.o tt.o uci.o ucioption.o syzygy/tbprobe.o
 
+### Establish the operating system name
+KERNEL = $(shell uname -s)
+ifeq ($(KERNEL),Linux)
+       OS = $(shell uname -o)
+endif
+
 ### ==========================================================================
 ### Section 2. High-level Configuration
 ### ==========================================================================
@@ -60,6 +64,7 @@ OBJS = benchmark.o bitbase.o bitboard.o endgame.o evaluate.o main.o \
 # popcnt = yes/no     --- -DUSE_POPCNT     --- Use popcnt asm-instruction
 # sse = yes/no        --- -msse            --- Use Intel Streaming SIMD Extensions
 # pext = yes/no       --- -DUSE_PEXT       --- Use pext x86_64 asm-instruction
+# mpi = yes/no        --- -DUSE_MPI        --- Use Message Passing Interface
 #
 # Note that Makefile is space sensitive, so when adding new architectures
 # or modifying existing flags, you have to make sure there are no extra spaces
@@ -74,6 +79,7 @@ prefetch = no
 popcnt = no
 sse = no
 pext = no
+mpi = no
 
 ### 2.2 Architecture specific
 
@@ -204,11 +210,12 @@ ifeq ($(COMP),clang)
        comp=clang
        CXX=clang++
        CXXFLAGS += -pedantic -Wextra -Wshadow
-ifneq ($(KERNEL),Darwin)
-ifneq ($(KERNEL),OpenBSD)
-       LDFLAGS += -latomic
-endif
-endif
+
+       ifneq ($(KERNEL),Darwin)
+       ifneq ($(KERNEL),OpenBSD)
+               LDFLAGS += -latomic
+       endif
+       endif
 
        ifeq ($(ARCH),armv7)
                ifeq ($(OS),Android)
@@ -279,39 +286,16 @@ ifeq ($(optimize),yes)
        CXXFLAGS += -O3
 
        ifeq ($(comp),gcc)
-
-               ifeq ($(KERNEL),Darwin)
-                       ifeq ($(arch),i386)
-                               CXXFLAGS += -mdynamic-no-pic
-                       endif
-                       ifeq ($(arch),x86_64)
-                               CXXFLAGS += -mdynamic-no-pic
-                       endif
-               endif
-
                ifeq ($(OS), Android)
                        CXXFLAGS += -fno-gcse -mthumb -march=armv7-a -mfloat-abi=softfp
                endif
        endif
-
-       ifeq ($(comp),icc)
+       
+       ifeq ($(comp),$(filter $(comp),gcc clang icc))
                ifeq ($(KERNEL),Darwin)
                        CXXFLAGS += -mdynamic-no-pic
                endif
        endif
-
-       ifeq ($(comp),clang)
-               ifeq ($(KERNEL),Darwin)
-                               CXXFLAGS += -flto
-                               LDFLAGS += $(CXXFLAGS)
-                       ifeq ($(arch),i386)
-                               CXXFLAGS += -mdynamic-no-pic
-                       endif
-                       ifeq ($(arch),x86_64)
-                               CXXFLAGS += -mdynamic-no-pic
-                       endif
-               endif
-       endif
 endif
 
 ### 3.4 Bits
@@ -349,24 +333,20 @@ endif
 ### 3.8 Link Time Optimization, it works since gcc 4.5 but not on mingw under Windows.
 ### This is a mix of compile and link time options because the lto link phase
 ### needs access to the optimization flags.
-ifeq ($(comp),gcc)
-       ifeq ($(optimize),yes)
-       ifeq ($(debug),no)
+ifeq ($(optimize),yes)
+ifeq ($(debug), no)
+       ifeq ($(comp),$(filter $(comp),gcc clang))
                CXXFLAGS += -flto
                LDFLAGS += $(CXXFLAGS)
        endif
-       endif
-endif
 
-ifeq ($(comp),mingw)
+       ifeq ($(comp),mingw)
        ifeq ($(KERNEL),Linux)
-       ifeq ($(optimize),yes)
-       ifeq ($(debug),no)
                CXXFLAGS += -flto
                LDFLAGS += $(CXXFLAGS)
        endif
        endif
-       endif
+endif
 endif
 
 ### 3.9 Android 5 can only run position independent executables. Note that this
@@ -376,6 +356,12 @@ ifeq ($(OS), Android)
        LDFLAGS += -fPIE -pie
 endif
 
+### 3.10 MPI
+ifneq (,$(findstring mpi, $(CXX)))
+       mpi = yes
+       CXXFLAGS += -DUSE_MPI -Wno-cast-qual
+        DEPENDFLAGS += -DUSE_MPI
+endif
 
 ### ==========================================================================
 ### Section 4. Public targets
@@ -463,7 +449,7 @@ clean: objclean profileclean
 
 # clean binaries and objects
 objclean:
-       @rm -f $(EXE) $(EXE).exe *.o ./syzygy/*.o
+       @rm -f $(EXE) *.o ./syzygy/*.o
 
 # clean auxiliary profiling files
 profileclean:
@@ -494,6 +480,7 @@ config-sanity:
        @echo "popcnt: '$(popcnt)'"
        @echo "sse: '$(sse)'"
        @echo "pext: '$(pext)'"
+       @echo "mpi: '$(mpi)'"
        @echo ""
        @echo "Flags:"
        @echo "CXX: $(CXX)"