]> git.sesse.net Git - stockfish/commitdiff
Merge remote-tracking branch 'upstream/master'
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 26 Dec 2022 08:41:43 +0000 (09:41 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 26 Dec 2022 08:41:43 +0000 (09:41 +0100)
1  2 
src/Makefile
src/misc.cpp
src/position.cpp

diff --combined src/Makefile
index 23c19bfb43c7253faafa30621fcf72892d06fe56,500c100675d0e8436355606f53e0b6cea38d1800..171f966cc2473b53a7c7ac531b3ba42778edb618
@@@ -59,12 -59,9 +59,12 @@@ endi
  SRCS = benchmark.cpp bitbase.cpp bitboard.cpp endgame.cpp evaluate.cpp main.cpp \
        material.cpp misc.cpp movegen.cpp movepick.cpp pawns.cpp position.cpp psqt.cpp \
        search.cpp thread.cpp timeman.cpp tt.cpp uci.cpp ucioption.cpp tune.cpp syzygy/tbprobe.cpp \
 -      nnue/evaluate_nnue.cpp nnue/features/half_ka_v2_hm.cpp
 +      nnue/evaluate_nnue.cpp nnue/features/half_ka_v2_hm.cpp \
 +      hashprobe.grpc.pb.cc hashprobe.pb.cc
 +CLISRCS = client.cpp hashprobe.grpc.pb.cc hashprobe.pb.cc uci.cpp
  
  OBJS = $(notdir $(SRCS:.cpp=.o))
 +CLIOBJS = $(notdir $(CLISRCS:.cpp=.o))
  
  VPATH = syzygy:nnue:nnue/features
  
@@@ -119,7 -116,7 +119,7 @@@ ifeq ($(ARCH), $(filter $(ARCH), 
                   x86-64-vnni512 x86-64-vnni256 x86-64-avx512 x86-64-avxvnni x86-64-bmi2 \
                   x86-64-avx2 x86-64-sse41-popcnt x86-64-modern x86-64-ssse3 x86-64-sse3-popcnt \
                   x86-64 x86-32-sse41-popcnt x86-32-sse2 x86-32 ppc-64 ppc-32 e2k \
-                  armv7 armv7-neon armv8 apple-silicon general-64 general-32))
+                  armv7 armv7-neon armv8 apple-silicon general-64 general-32 riscv64))
     SUPPORTED_ARCH=true
  else
     SUPPORTED_ARCH=false
@@@ -341,7 -338,11 +341,11 @@@ ifeq ($(findstring e2k,$(ARCH)),e2k
        popcnt = yes
  endif
  
+ ifeq ($(ARCH),riscv64)
+       arch = riscv64
  endif
+ endif
  
  ### ==========================================================================
  ### Section 3. Low-level Configuration
@@@ -365,13 -366,16 +369,16 @@@ endi
  ifeq ($(COMP),gcc)
        comp=gcc
        CXX=g++
 -      CXXFLAGS += -pedantic -Wextra -Wshadow
 +      CXXFLAGS += -pedantic -Wextra
  
-       ifeq ($(arch),$(filter $(arch),armv7 armv8))
+       ifeq ($(arch),$(filter $(arch),armv7 armv8 riscv64))
                ifeq ($(OS),Android)
                        CXXFLAGS += -m$(bits)
                        LDFLAGS += -m$(bits)
                endif
+               ifeq ($(ARCH),riscv64)
+                       CXXFLAGS += -latomic
+               endif
        else
                CXXFLAGS += -m$(bits)
                LDFLAGS += -m$(bits)
@@@ -432,11 -436,14 +439,14 @@@ ifeq ($(COMP),clang
        endif
        endif
  
-       ifeq ($(arch),$(filter $(arch),armv7 armv8))
+       ifeq ($(arch),$(filter $(arch),armv7 armv8 riscv64))
                ifeq ($(OS),Android)
                        CXXFLAGS += -m$(bits)
                        LDFLAGS += -m$(bits)
                endif
+               ifeq ($(ARCH),riscv64)
+                       CXXFLAGS += -latomic
+               endif
        else
                CXXFLAGS += -m$(bits)
                LDFLAGS += -m$(bits)
@@@ -505,7 -512,7 +515,7 @@@ endi
  
  ### Sometimes gcc is really clang
  ifeq ($(COMP),gcc)
-       gccversion = $(shell $(CXX) --version)
+       gccversion = $(shell $(CXX) --version 2>/dev/null)
        gccisclang = $(findstring clang,$(gccversion))
        ifneq ($(gccisclang),)
                profile_make = clang-profile-make
@@@ -543,7 -550,7 +553,7 @@@ endi
  ### 3.3 Optimization
  ifeq ($(optimize),yes)
  
 -      CXXFLAGS += -O3
 +      CXXFLAGS += -O3 -g
  
        ifeq ($(comp),gcc)
                ifeq ($(OS), Android)
@@@ -596,7 -603,7 +606,7 @@@ endi
  ifeq ($(avx2),yes)
        CXXFLAGS += -DUSE_AVX2
        ifeq ($(comp),$(filter $(comp),gcc clang mingw))
-               CXXFLAGS += -mavx2
+               CXXFLAGS += -mavx2 -mbmi
        endif
  endif
  
@@@ -675,13 -682,25 +685,25 @@@ ifeq ($(pext),yes
        endif
  endif
  
+ ### 3.7.1 Try to include git commit sha for versioning
+ GIT_SHA = $(shell git rev-parse --short HEAD 2>/dev/null)
+ ifneq ($(GIT_SHA), )
+       CXXFLAGS += -DGIT_SHA=\"$(GIT_SHA)\"
+ endif
+ ### 3.7.2 Try to include git commit date for versioning
+ GIT_DATE = $(shell git show -s --date=format:'%Y%m%d' --format=%cd HEAD 2>/dev/null)
+ ifneq ($(GIT_DATE), )
+       CXXFLAGS += -DGIT_DATE=\"$(GIT_DATE)\"
+ endif
  ### 3.8 Link Time Optimization
  ### This is a mix of compile and link time options because the lto link phase
  ### needs access to the optimization flags.
  ifeq ($(optimize),yes)
  ifeq ($(debug), no)
        ifeq ($(comp),clang)
-               CXXFLAGS += -flto
+               CXXFLAGS += -flto=full
                ifeq ($(target_windows),yes)
                        CXXFLAGS += -fuse-ld=lld
                endif
  # GCC on some systems.
        else ifeq ($(comp),gcc)
        ifeq ($(gccisclang),)
-               CXXFLAGS += -flto
+               CXXFLAGS += -flto -flto-partition=one
                LDFLAGS += $(CXXFLAGS) -flto=jobserver
        else
-               CXXFLAGS += -flto
+               CXXFLAGS += -flto=full
                LDFLAGS += $(CXXFLAGS)
        endif
  
  # To use LTO and static linking on Windows,
  # the tool chain requires gcc version 10.1 or later.
        else ifeq ($(comp),mingw)
-       ifneq ($(arch),i386)
-               CXXFLAGS += -flto
+               CXXFLAGS += -flto -flto-partition=one
                LDFLAGS += $(CXXFLAGS) -save-temps
        endif
-       endif
  endif
  endif
  
@@@ -730,9 -747,9 +750,9 @@@ help
        @echo "Supported targets:"
        @echo ""
        @echo "help                    > Display architecture details"
-       @echo "build                   > Standard build"
+       @echo "profile-build           > standard build with profile-guided optimization"
+       @echo "build                   > skip profile-guided optimization"
        @echo "net                     > Download the default nnue net"
-       @echo "profile-build           > Faster build (with profile-guided optimization)"
        @echo "strip                   > Strip executable"
        @echo "install                 > Install executable"
        @echo "clean                   > Clean up"
        @echo "apple-silicon           > Apple silicon ARM64"
        @echo "general-64              > unspecified 64-bit"
        @echo "general-32              > unspecified 32-bit"
+       @echo "riscv64                 > RISC-V 64-bit"
        @echo ""
        @echo "Supported compilers:"
        @echo ""
        @echo "icc                     > Intel compiler"
        @echo "ndk                     > Google NDK to cross-compile for Android"
        @echo ""
-       @echo "Simple examples. If you don't know what to do, you likely want to run: "
+       @echo "Simple examples. If you don't know what to do, you likely want to run one of: "
        @echo ""
-       @echo "make -j build ARCH=x86-64  (A portable, slow compile for 64-bit systems)"
-       @echo "make -j build ARCH=x86-32  (A portable, slow compile for 32-bit systems)"
+       @echo "make -j profile-build ARCH=x86-64-avx2    # typically a fast compile for common systems "
+       @echo "make -j profile-build ARCH=x86-64-modern  # A more portable compile for 64-bit systems "
+       @echo "make -j profile-build ARCH=x86-64         # A portable compile for 64-bit systems "
        @echo ""
-       @echo "Advanced examples, for experienced users looking for performance: "
+       @echo "Advanced examples, for experienced users: "
        @echo ""
-       @echo "make    help  ARCH=x86-64-bmi2"
+       @echo "make -j profile-build ARCH=x86-64-bmi2"
        @echo "make -j profile-build ARCH=x86-64-bmi2 COMP=gcc COMPCXX=g++-9.0"
        @echo "make -j build ARCH=x86-64-ssse3 COMP=clang"
        @echo ""
@@@ -794,7 -813,7 +816,7 @@@ endi
  
  .PHONY: help build profile-build strip install clean net objclean profileclean \
          config-sanity icc-profile-use icc-profile-make gcc-profile-use gcc-profile-make \
-         clang-profile-use clang-profile-make
+         clang-profile-use clang-profile-make FORCE
  
  build: net config-sanity
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all
@@@ -834,7 -853,7 +856,7 @@@ net
        $(eval nnuedownloadurl2 := https://github.com/official-stockfish/networks/raw/master/$(nnuenet))
        $(eval curl_or_wget := $(shell if hash curl 2>/dev/null; then echo "curl -skL"; elif hash wget 2>/dev/null; then echo "wget -qO-"; fi))
        @if [ "x$(curl_or_wget)" = "x" ]; then \
-           echo "Automatic download failed: neither curl nor wget is installed. Install one of these tools or download the net manually"; exit 1; \
+           echo "Neither curl nor wget is installed. Install one of these tools unless the net has been downloaded manually"; \
          fi
        $(eval shasum_command := $(shell if hash shasum 2>/dev/null; then echo "shasum -a 256 "; elif hash sha256sum 2>/dev/null; then echo "sha256sum "; fi))
        @if [ "x$(shasum_command)" = "x" ]; then \
              echo "$(nnuenet) available."; \
           else \
              if [ "x$(curl_or_wget)" != "x" ]; then \
-                echo "Downloading $${nnuedownloadurl}"; $(curl_or_wget) $${nnuedownloadurl} > $(nnuenet);\
+                  echo "Downloading $${nnuedownloadurl}"; $(curl_or_wget) $${nnuedownloadurl} > $(nnuenet);\
+               else \
+                  echo "No net found and download not possible"; exit 1;\
              fi; \
           fi; \
           if [ "x$(shasum_command)" != "x" ]; then \
@@@ -881,7 -902,7 +905,7 @@@ default
  ### Section 5. Private Targets
  ### ==========================================================================
  
 -all: $(EXE) .depend
 +all: $(EXE) client .depend
  
  config-sanity: net
        @echo ""
        @test "$(SUPPORTED_ARCH)" = "true"
        @test "$(arch)" = "any" || test "$(arch)" = "x86_64" || test "$(arch)" = "i386" || \
         test "$(arch)" = "ppc64" || test "$(arch)" = "ppc" || test "$(arch)" = "e2k" || \
-        test "$(arch)" = "armv7" || test "$(arch)" = "armv8" || test "$(arch)" = "arm64"
+        test "$(arch)" = "armv7" || test "$(arch)" = "armv8" || test "$(arch)" = "arm64" || test "$(arch)" = "riscv64"
        @test "$(bits)" = "32" || test "$(bits)" = "64"
        @test "$(prefetch)" = "yes" || test "$(prefetch)" = "no"
        @test "$(popcnt)" = "yes" || test "$(popcnt)" = "no"
  $(EXE): $(OBJS)
        +$(CXX) -o $@ $(OBJS) $(LDFLAGS)
  
+ # Force recompilation to ensure version info is up-to-date
+ misc.o: FORCE
+ FORCE:
  clang-profile-make:
        $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \
        EXTRACXXFLAGS='-fprofile-instr-generate ' \
@@@ -981,33 -1006,9 +1009,35 @@@ icc-profile-use
        EXTRACXXFLAGS='-prof_use -prof_dir ./profdir' \
        all
  
 +### GRPC
 +
 +PROTOS_PATH = .
 +PROTOC = protoc
 +GRPC_CPP_PLUGIN = grpc_cpp_plugin
 +GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
 +
 +%.grpc.pb.h %.grpc.pb.cc: %.proto
 +      $(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
 +
 +# oh my
 +%.cpp: %.cc
 +      cp $< $@
 +
 +%.pb.h %.pb.cc: %.proto
 +      $(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<
 +
 +#LDFLAGS += -Wl,-Bstatic -Wl,-\( -lprotobuf -lgrpc++_unsecure -lgrpc_unsecure -lgrpc -lz -Wl,-\) -Wl,-Bdynamic -ldl
 +LDFLAGS += /usr/lib/x86_64-linux-gnu/libprotobuf.a /usr/lib/x86_64-linux-gnu/libgrpc++_unsecure.a /usr/lib/x86_64-linux-gnu/libgrpc_unsecure.a /usr/lib/x86_64-linux-gnu/libgrpc.a /usr/lib/x86_64-linux-gnu/libcares.a /usr/lib/x86_64-linux-gnu/libgpr.a /usr/lib/x86_64-linux-gnu/libabsl_str_format_internal.a /usr/lib/x86_64-linux-gnu/libabsl_strings.a /usr/lib/x86_64-linux-gnu/libabsl_flags_marshalling.a /usr/lib/x86_64-linux-gnu/libabsl_throw_delegate.a /usr/lib/x86_64-linux-gnu/libabsl_raw_logging_internal.a /usr/lib/x86_64-linux-gnu/libabsl_base.a /usr/lib/x86_64-linux-gnu/libabsl_int128.a /usr/lib/x86_64-linux-gnu/libabsl_bad_optional_access.a -ldl -lz
 +#LDFLAGS += /usr/lib/x86_64-linux-gnu/libprotobuf.a /usr/lib/libgrpc++_unsecure.a /usr/lib/libgrpc_unsecure.a /usr/lib/libgrpc.a /usr/lib/x86_64-linux-gnu/libcares.a -ldl -lz
 +
 +client: $(CLIOBJS)
 +      $(CXX) -o $@ $(CLIOBJS) $(LDFLAGS)
 +
 +# Other stuff
 +
  .depend: $(SRCS)
        -@$(CXX) $(DEPENDFLAGS) -MM $(SRCS) > $@ 2> /dev/null
  
+ ifeq (, $(filter $(MAKECMDGOALS), help strip install clean net objclean profileclean config-sanity))
  -include .depend
+ endif
diff --combined src/misc.cpp
index 9cfd63047606555db23fb81f35ba781337e5701b,c7fa0e9ae104927867675cf4dbc2698df6cb2bd3..3c336c3014c7b5a4524df40c7b03c04dd560f866
@@@ -67,9 -67,8 +67,8 @@@ namespace Stockfish 
  
  namespace {
  
- /// Version number. If Version is left empty, then compile date in the format
- /// DD-MM-YY and show in engine_info.
- const string Version = "";
+ /// Version number or dev.
+ const string version = "dev";
  
  /// Our fancy logging facility. The trick here is to replace cin.rdbuf() and
  /// cout.rdbuf() with two Tie objects that tie cin and cout to a file stream. We
@@@ -138,24 -137,41 +137,35 @@@ public
  } // namespace
  
  
- /// engine_info() returns the full name of the current Stockfish version. This
- /// will be either "Stockfish <Tag> DD-MM-YY" (where DD-MM-YY is the date when
- /// the program was compiled) or "Stockfish <Version>", depending on whether
- /// Version is empty.
+ /// engine_info() returns the full name of the current Stockfish version.
+ /// For local dev compiles we try to append the commit sha and commit date
+ /// from git if that fails only the local compilation date is set and "nogit" is specified:
+ /// Stockfish dev-YYYYMMDD-SHA
+ /// or
+ /// Stockfish dev-YYYYMMDD-nogit
+ ///
+ /// For releases (non dev builds) we only include the version number:
+ /// Stockfish version
  
  string engine_info(bool to_uci) {
+   stringstream ss;
+   ss << "Stockfish " << version << setfill('0');
  
-   const string months("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec");
-   string month, day, year;
-   stringstream ss, date(__DATE__); // From compiler, format is "Sep 21 2008"
-   ss << "Stockfish " << Version << setfill('0');
-   if (Version.empty())
+   if (version == "dev")
    {
+       ss << "-";
+       #ifdef GIT_DATE
+       ss << GIT_DATE;
+       #else
+       const string months("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec");
+       string month, day, year;
+       stringstream date(__DATE__); // From compiler, format is "Sep 21 2008"
        date >> month >> day >> year;
-       ss << setw(2) << day << setw(2) << (1 + months.find(month) / 4) << year.substr(2);
+       ss << year << setw(2) << setfill('0') << (1 + months.find(month) / 4) << setw(2) << setfill('0') << day;
+       #endif
 -      ss << "-";
 -
 -      #ifdef GIT_SHA
 -      ss << GIT_SHA;
 -      #else
 -      ss << "nogit";
 -      #endif
 +      ss << "-asn";
    }
  
    ss << (to_uci  ? "\nid author ": " by ")
diff --combined src/position.cpp
index 5dc6050f081fbfc412111dc1334df1bf259cfeb3,5befcaf2cfcbd311034db63fee2a9ce934879d50..e0d432e8a7fe5d8aa2b484258c67eceb341c6214
@@@ -129,7 -129,7 +129,7 @@@ void Position::init() 
    // Prepare the cuckoo tables
    std::memset(cuckoo, 0, sizeof(cuckoo));
    std::memset(cuckooMove, 0, sizeof(cuckooMove));
-   int count = 0;
+   [[maybe_unused]] int count = 0;
    for (Piece pc : Pieces)
        for (Square s1 = SQ_A1; s1 <= SQ_H8; ++s1)
            for (Square s2 = Square(s1 + 1); s2 <= SQ_H8; ++s2)
@@@ -283,6 -283,8 +283,6 @@@ Position& Position::set(const string& f
    thisThread = th;
    set_state(st);
  
 -  assert(pos_is_ok());
 -
    return *this;
  }