X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2FMakefile;h=b969ba0466599ec7f10f8682b43c3096e8dfb2e4;hp=a3feb68e3e349957c97155a4543ac9c31e97c5b6;hb=cbcb05ca092160137c166f84e7e9da3d6bb4e2d3;hpb=384d6844841e9f2da8f5a913c7620440f9e05ab5 diff --git a/src/Makefile b/src/Makefile index a3feb68e..b969ba04 100644 --- a/src/Makefile +++ b/src/Makefile @@ -67,11 +67,13 @@ endif # bits = 64/32 --- -DIS_64BIT --- 64-/32-bit operating system # prefetch = yes/no --- -DUSE_PREFETCH --- Use prefetch asm-instruction # popcnt = yes/no --- -DUSE_POPCNT --- Use popcnt asm-instruction +# pext = yes/no --- -DUSE_PEXT --- Use pext x86_64 asm-instruction # sse = yes/no --- -msse --- Use Intel Streaming SIMD Extensions +# mmx = yes/no --- -mmmx --- Use Intel MMX instructions +# sse2 = yes/no --- -msse2 --- Use Intel Streaming SIMD Extensions 2 # ssse3 = yes/no --- -mssse3 --- Use Intel Supplemental Streaming SIMD Extensions 3 # sse41 = yes/no --- -msse4.1 --- Use Intel Streaming SIMD Extensions 4.1 # avx2 = yes/no --- -mavx2 --- Use Intel Advanced Vector Extensions 2 -# pext = yes/no --- -DUSE_PEXT --- Use pext x86_64 asm-instruction # avx512 = yes/no --- -mavx512bw --- Use Intel Advanced Vector Extensions 512 # vnni = yes/no --- -mavx512vnni --- Use Intel Vector Neural Network Instructions 512 # neon = yes/no --- -DUSE_NEON --- Use ARM SIMD architecture @@ -92,12 +94,13 @@ sanitize = no bits = 64 prefetch = no popcnt = no -mmx = no +pext = no sse = no +mmx = no +sse2 = no ssse3 = no sse41 = no avx2 = no -pext = no avx512 = no vnni = no neon = no @@ -106,83 +109,82 @@ STRIP = strip ### 2.2 Architecture specific -ifeq ($(ARCH),general-32) - arch = any - bits = 32 -endif +ifeq ($(findstring x86,$(ARCH)),x86) -ifeq ($(ARCH),x86-32-old) - arch = i386 - bits = 32 -endif +# x86-32/64 -ifeq ($(ARCH),x86-32) +ifeq ($(findstring x86-32,$(ARCH)),x86-32) arch = i386 bits = 32 - prefetch = yes + sse = yes mmx = yes +else + arch = x86_64 sse = yes + sse2 = yes endif -ifeq ($(ARCH),general-64) - arch = any +ifeq ($(findstring -sse,$(ARCH)),-sse) + sse = yes endif -ifeq ($(ARCH),x86-64) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -popcnt,$(ARCH)),-popcnt) + popcnt = yes +endif + +ifeq ($(findstring -mmx,$(ARCH)),-mmx) + mmx = yes +endif + +ifeq ($(findstring -sse2,$(ARCH)),-sse2) sse = yes + sse2 = yes endif -ifeq ($(ARCH),x86-64-sse3-popcnt) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -ssse3,$(ARCH)),-ssse3) sse = yes - popcnt = yes + sse2 = yes + ssse3 = yes endif -ifeq ($(ARCH),x86-64-ssse3) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -sse41,$(ARCH)),-sse41) sse = yes + sse2 = yes ssse3 = yes + sse41 = yes endif -ifeq ($(ARCH),$(filter $(ARCH),x86-64-sse41-popcnt x86-64-modern)) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -modern,$(ARCH)),-modern) popcnt = yes sse = yes + sse2 = yes ssse3 = yes sse41 = yes endif -ifeq ($(ARCH),x86-64-avx2) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -avx2,$(ARCH)),-avx2) popcnt = yes sse = yes + sse2 = yes ssse3 = yes sse41 = yes avx2 = yes endif -ifeq ($(ARCH),x86-64-bmi2) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -bmi2,$(ARCH)),-bmi2) popcnt = yes sse = yes + sse2 = yes ssse3 = yes sse41 = yes avx2 = yes pext = yes endif -ifeq ($(ARCH),x86-64-avx512) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -avx512,$(ARCH)),-avx512) popcnt = yes sse = yes + sse2 = yes ssse3 = yes sse41 = yes avx2 = yes @@ -190,11 +192,10 @@ ifeq ($(ARCH),x86-64-avx512) avx512 = yes endif -ifeq ($(ARCH),x86-64-vnni) - arch = x86_64 - prefetch = yes +ifeq ($(findstring -vnni,$(ARCH)),-vnni) popcnt = yes sse = yes + sse2 = yes ssse3 = yes sse41 = yes avx2 = yes @@ -203,6 +204,28 @@ ifeq ($(ARCH),x86-64-vnni) vnni = yes endif +ifeq ($(sse),yes) + prefetch = yes +endif + +# 64-bit pext is not available on x86-32 +ifeq ($(bits),32) + pext = no +endif + +else + +# all other architectures + +ifeq ($(ARCH),general-32) + arch = any + bits = 32 +endif + +ifeq ($(ARCH),general-64) + arch = any +endif + ifeq ($(ARCH),armv7) arch = armv7 prefetch = yes @@ -242,6 +265,8 @@ ifeq ($(ARCH),ppc-64) prefetch = yes endif +endif + ### ========================================================================== ### Section 3. Low-level Configuration ### ========================================================================== @@ -277,9 +302,6 @@ ifeq ($(COMP),gcc) ifneq ($(KERNEL),Darwin) LDFLAGS += -Wl,--no-as-needed endif - - gccversion = $(shell $(CXX) --version) - gccisclang = $(findstring clang,$(gccversion)) endif ifeq ($(COMP),mingw) @@ -351,6 +373,7 @@ endif ifeq ($(KERNEL),Darwin) CXXFLAGS += -arch $(arch) -mmacosx-version-min=10.14 LDFLAGS += -arch $(arch) -mmacosx-version-min=10.14 + XCRUN = xcrun endif # To cross-compile for Android, NDK version r21 or later is recommended. @@ -382,6 +405,16 @@ ifdef COMPCXX CXX=$(COMPCXX) endif +### Sometimes gcc is really clang +ifeq ($(COMP),gcc) + gccversion = $(shell $(CXX) --version) + gccisclang = $(findstring clang,$(gccversion)) + ifneq ($(gccisclang),) + profile_make = clang-profile-make + profile_use = clang-profile-use + endif +endif + ### On mingw use Windows threads, otherwise POSIX ifneq ($(comp),mingw) # On Android Bionic's C library comes with its own pthread implementation bundled in @@ -487,6 +520,13 @@ ifeq ($(ssse3),yes) endif endif +ifeq ($(sse2),yes) + CXXFLAGS += -DUSE_SSE2 + ifeq ($(comp),$(filter $(comp),gcc clang mingw)) + CXXFLAGS += -msse2 + endif +endif + ifeq ($(mmx),yes) CXXFLAGS += -DUSE_MMX ifeq ($(comp),$(filter $(comp),gcc clang mingw)) @@ -503,10 +543,6 @@ ifeq ($(neon),yes) endif endif -ifeq ($(arch),x86_64) - CXXFLAGS += -msse2 -DUSE_SSE2 -endif - ### 3.7 pext ifeq ($(pext),yes) CXXFLAGS += -DUSE_PEXT @@ -592,9 +628,10 @@ help: @echo "x86-64-modern > common modern CPU, currently x86-64-sse41-popcnt" @echo "x86-64-ssse3 > x86 64-bit with ssse3 support" @echo "x86-64-sse3-popcnt > x86 64-bit with sse3 and popcnt support" - @echo "x86-64 > x86 64-bit generic" - @echo "x86-32 > x86 32-bit (also enables MMX and SSE)" - @echo "x86-32-old > x86 32-bit fall back for old hardware" + @echo "x86-64 > x86 64-bit generic (with sse2 support)" + @echo "x86-32-sse41-popcnt > x86 32-bit with sse41 and popcnt support" + @echo "x86-32-sse2 > x86 32-bit with sse2 support" + @echo "x86-32 > x86 32-bit generic (with mmx and sse support)" @echo "ppc-64 > PPC 64-bit" @echo "ppc-32 > PPC 32-bit" @echo "armv7 > ARMv7 32-bit" @@ -624,7 +661,7 @@ help: @echo "make -j build ARCH=x86-64-ssse3 COMP=clang" @echo "" ifneq ($(empty_arch), yes) - @echo "-------------------------------\n" + @echo "-------------------------------" @echo "The selected architecture $(ARCH) will enable the following configuration: " @$(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity endif @@ -719,11 +756,13 @@ config-sanity: @echo "os: '$(OS)'" @echo "prefetch: '$(prefetch)'" @echo "popcnt: '$(popcnt)'" + @echo "pext: '$(pext)'" @echo "sse: '$(sse)'" + @echo "mmx: '$(mmx)'" + @echo "sse2: '$(sse2)'" @echo "ssse3: '$(ssse3)'" @echo "sse41: '$(sse41)'" @echo "avx2: '$(avx2)'" - @echo "pext: '$(pext)'" @echo "avx512: '$(avx512)'" @echo "vnni: '$(vnni)'" @echo "neon: '$(neon)'" @@ -744,11 +783,13 @@ config-sanity: @test "$(bits)" = "32" || test "$(bits)" = "64" @test "$(prefetch)" = "yes" || test "$(prefetch)" = "no" @test "$(popcnt)" = "yes" || test "$(popcnt)" = "no" + @test "$(pext)" = "yes" || test "$(pext)" = "no" @test "$(sse)" = "yes" || test "$(sse)" = "no" + @test "$(mmx)" = "yes" || test "$(mmx)" = "no" + @test "$(sse2)" = "yes" || test "$(sse2)" = "no" @test "$(ssse3)" = "yes" || test "$(ssse3)" = "no" @test "$(sse41)" = "yes" || test "$(sse41)" = "no" @test "$(avx2)" = "yes" || test "$(avx2)" = "no" - @test "$(pext)" = "yes" || test "$(pext)" = "no" @test "$(avx512)" = "yes" || test "$(avx512)" = "no" @test "$(vnni)" = "yes" || test "$(vnni)" = "no" @test "$(neon)" = "yes" || test "$(neon)" = "no" @@ -765,7 +806,7 @@ clang-profile-make: all clang-profile-use: - llvm-profdata merge -output=stockfish.profdata *.profraw + $(XCRUN) llvm-profdata merge -output=stockfish.profdata *.profraw $(MAKE) ARCH=$(ARCH) COMP=$(COMP) \ EXTRACXXFLAGS='-fprofile-instr-use=stockfish.profdata' \ EXTRALDFLAGS='-fprofile-use ' \