name: Stockfish on: workflow_call: jobs: Stockfish: name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} env: COMPILER: ${{ matrix.config.compiler }} COMP: ${{ matrix.config.comp }} CXXFLAGS: "-Werror" strategy: matrix: config: - name: Ubuntu 20.04 GCC os: ubuntu-20.04 compiler: g++ comp: gcc run_32bit_tests: true run_64bit_tests: true shell: bash {0} - name: Ubuntu 20.04 Clang os: ubuntu-20.04 compiler: clang++ comp: clang run_32bit_tests: true run_64bit_tests: true shell: bash {0} - name: Android NDK aarch64 os: ubuntu-22.04 compiler: aarch64-linux-android21-clang++ comp: ndk run_armv8_tests: true shell: bash {0} - name: Android NDK arm os: ubuntu-22.04 compiler: armv7a-linux-androideabi21-clang++ comp: ndk run_armv7_tests: true shell: bash {0} - name: MacOS 12 Apple Clang os: macos-12 compiler: clang++ comp: clang run_64bit_tests: true shell: bash {0} - name: MacOS 12 GCC 11 os: macos-12 compiler: g++-11 comp: gcc run_64bit_tests: true shell: bash {0} - name: Windows 2022 Mingw-w64 GCC x86_64 os: windows-2022 compiler: g++ comp: mingw run_64bit_tests: true msys_sys: mingw64 msys_env: x86_64-gcc shell: msys2 {0} - name: Windows 2022 Mingw-w64 GCC i686 os: windows-2022 compiler: g++ comp: mingw run_32bit_tests: true msys_sys: mingw32 msys_env: i686-gcc shell: msys2 {0} - name: Windows 2022 Mingw-w64 Clang x86_64 os: windows-2022 compiler: clang++ comp: clang run_64bit_tests: true msys_sys: clang64 msys_env: clang-x86_64-clang shell: msys2 {0} defaults: run: working-directory: src shell: ${{ matrix.config.shell }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Download required linux packages if: runner.os == 'Linux' run: | sudo apt update sudo apt install expect valgrind g++-multilib qemu-user - name: Install NDK if: runner.os == 'Linux' run: | if [ $COMP == ndk ]; then NDKV="21.4.7075529" ANDROID_ROOT=/usr/local/lib/android ANDROID_SDK_ROOT=$ANDROID_ROOT/sdk SDKMANAGER=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager echo "y" | $SDKMANAGER "ndk;$NDKV" ANDROID_NDK_ROOT=$ANDROID_SDK_ROOT/ndk/$NDKV ANDROID_NDK_BIN=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin echo "ANDROID_NDK_BIN=$ANDROID_NDK_BIN" >> $GITHUB_ENV fi - name: Setup msys and install required packages if: runner.os == 'Windows' uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.config.msys_sys }} install: mingw-w64-${{ matrix.config.msys_env }} make git expect - name: Download the used network from the fishtest framework run: make net - name: Extract the bench number from the commit history run: | git log HEAD | grep -o "\b[Bb]ench[ :]\+[1-9][0-9]\{5,9\}\b" | head -n 1 | sed "s/[^0-9]//g" > git_sig [ -s git_sig ] && echo "benchref=$(cat git_sig)" >> $GITHUB_ENV && echo "Reference bench:" $(cat git_sig) || echo "No bench found" - name: Check compiler run: | if [ $COMP == ndk ]; then export PATH=${{ env.ANDROID_NDK_BIN }}:$PATH fi $COMPILER -v - name: Test help target run: make help - name: Check git run: git --version # x86-32 tests - name: Test debug x86-32 build if: ${{ matrix.config.run_32bit_tests }} run: | export CXXFLAGS="-Werror -D_GLIBCXX_DEBUG" make clean make -j2 ARCH=x86-32 optimize=no debug=yes build ../tests/signature.sh $benchref - name: Test x86-32 build if: ${{ matrix.config.run_32bit_tests }} run: | make clean make -j2 ARCH=x86-32 build ../tests/signature.sh $benchref - name: Test x86-32-sse41-popcnt build if: ${{ matrix.config.run_32bit_tests }} run: | make clean make -j2 ARCH=x86-32-sse41-popcnt build ../tests/signature.sh $benchref - name: Test x86-32-sse2 build if: ${{ matrix.config.run_32bit_tests }} run: | make clean make -j2 ARCH=x86-32-sse2 build ../tests/signature.sh $benchref - name: Test general-32 build if: ${{ matrix.config.run_32bit_tests }} run: | make clean make -j2 ARCH=general-32 build ../tests/signature.sh $benchref # x86-64 tests - name: Test debug x86-64-modern build if: ${{ matrix.config.run_64bit_tests }} run: | export CXXFLAGS="-Werror -D_GLIBCXX_DEBUG" make clean make -j2 ARCH=x86-64-modern optimize=no debug=yes build ../tests/signature.sh $benchref - name: Test x86-64-modern build if: ${{ matrix.config.run_64bit_tests }} run: | make clean make -j2 ARCH=x86-64-modern build ../tests/signature.sh $benchref - name: Test x86-64-ssse3 build if: ${{ matrix.config.run_64bit_tests }} run: | make clean make -j2 ARCH=x86-64-ssse3 build ../tests/signature.sh $benchref - name: Test x86-64-sse3-popcnt build if: ${{ matrix.config.run_64bit_tests }} run: | make clean make -j2 ARCH=x86-64-sse3-popcnt build ../tests/signature.sh $benchref - name: Test x86-64 build if: ${{ matrix.config.run_64bit_tests }} run: | make clean make -j2 ARCH=x86-64 build ../tests/signature.sh $benchref - name: Test general-64 build if: matrix.config.run_64bit_tests run: | make clean make -j2 ARCH=general-64 build ../tests/signature.sh $benchref # armv8 tests - name: Test armv8 build if: ${{ matrix.config.run_armv8_tests }} run: | export PATH=${{ env.ANDROID_NDK_BIN }}:$PATH export LDFLAGS="-static -Wno-unused-command-line-argument" make clean make -j2 ARCH=armv8 build ../tests/signature.sh $benchref # armv7 tests - name: Test armv7 build if: ${{ matrix.config.run_armv7_tests }} run: | export PATH=${{ env.ANDROID_NDK_BIN }}:$PATH export LDFLAGS="-static -Wno-unused-command-line-argument" make clean make -j2 ARCH=armv7 build ../tests/signature.sh $benchref - name: Test armv7-neon build if: ${{ matrix.config.run_armv7_tests }} run: | export PATH=${{ env.ANDROID_NDK_BIN }}:$PATH export LDFLAGS="-static -Wno-unused-command-line-argument" make clean make -j2 ARCH=armv7-neon build ../tests/signature.sh $benchref # Other tests - name: Check perft and search reproducibility if: ${{ matrix.config.run_64bit_tests }} run: | make clean make -j2 ARCH=x86-64-modern build ../tests/perft.sh ../tests/reprosearch.sh