Files
stockfish/scripts/check_universal.sh
anematodeandJoost VandeVondele 31e89adf70 [RfC] Make CI faster
We can straightforwardly parallelize the `check_universal.sh` script, which takes quite a bit of time for the x86 builds.

closes https://github.com/official-stockfish/Stockfish/pull/6919

No functional change
2026-06-25 13:03:07 +02:00

92 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
# Verify that the universal binary selects the correct per-arch build under
# Intel SDE emulation for a range of target CPUs
#
# Usage: check_universal.sh STOCKFISH_EXE SDE_EXE EXPECTED_BENCH
set -eu
if [ $# -ne 3 ]; then
echo "Usage: $0 STOCKFISH_EXE SDE_EXE EXPECTED_BENCH" >&2
exit 2
fi
STOCKFISH_EXE=$1
SDE_EXE=$2
EXPECTED_BENCH=$3
if [ "$(uname)" = 'Linux' ]; then
# Windows 11 doesn't support these old arches
PAIRS="
p4p:x86-64
nhm:x86-64-sse41-popcnt
"
else
PAIRS=''
fi
PAIRS="$PAIRS
snb:x86-64-sse41-popcnt
ivb:x86-64-sse41-popcnt
hsw:x86-64-bmi2
skl:x86-64-bmi2
skx:x86-64-avx512
clx:x86-64-vnni512
icl:x86-64-avx512icl
adl:x86-64-avxvnni
"
BINARY_SIZE=$(wc -c < "$STOCKFISH_EXE")
MAX_SIZE=$((150 * 1024 * 1024))
if [ "$BINARY_SIZE" -gt "$MAX_SIZE" ]; then
printf 'check_universal.sh: binary size %d bytes exceeds 150 MB limit\n' "$BINARY_SIZE" >&2
exit 1
fi
WORK=$(mktemp -d)
trap 'rm -rf "$WORK"' EXIT
i=0
for pair in $PAIRS; do
i=$((i + 1))
cpu=${pair%%:*}
expected_compiler=${pair##*:}
(
compiler_out=$("$SDE_EXE" "-$cpu" -- "$STOCKFISH_EXE" compiler 2>&1 || true)
bench_out=$("$SDE_EXE" "-$cpu" -- "$STOCKFISH_EXE" bench 2>&1 >/dev/null || true)
actual_compiler=$(printf '%s\n' "$compiler_out" | awk -F: '/Compilation architecture/ {
sub(/^[[:space:]]+/, "", $2); sub(/[[:space:]]+$/, "", $2); print $2; exit
}')
actual_bench=$(printf '%s\n' "$bench_out" | awk -F: '/Nodes searched/ {
sub(/^[[:space:]]+/, "", $2); sub(/[[:space:]]+$/, "", $2); print $2; exit
}')
if [ "$actual_compiler" != "$expected_compiler" ] || [ "$actual_bench" != "$EXPECTED_BENCH" ]; then
printf '===== CPU %s output (expected %s/%s, got %s/%s) =====\n' \
"$cpu" "$expected_compiler" "$EXPECTED_BENCH" "${actual_compiler:--}" "$actual_bench" > "$WORK/$i.fail"
else
printf 'CPU %s ok\n' "$cpu" > "$WORK/$i.log"
fi
) &
done
wait
FAIL=0
i=0
for pair in $PAIRS; do
i=$((i + 1))
if [ -f "$WORK/$i.fail" ]; then
cat "$WORK/$i.fail" >&2
FAIL=1
else
cat "$WORK/$i.log" >&2
fi
done
if [ "$FAIL" != 0 ]; then
echo "check_universal.sh: failed"
exit 1
fi
echo "check_universal.sh: Good! Universal binary has correct hardware detection."