-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Export and clean up net downloading script
Fixes #5564 This patch extracts the net downloading script in Makefile into an external script file. Also the script is moderately rewritten for improved readability and speed. * Use wget preferentially over curl, as curl is known to have slight overhead. * Use command instead of hash to check if command exists. Reportedly, hash always returns zero in some POSIX shells even when the command fails. * Command existence checks (wget/curl, sha256sum) are performed only once at the beginning. * Each of common patterns is encapsulated in a function (get_nnue_filename, validate_network). * Print out error/warning messages to stderr. closes #5563 No functional change Co-authored-by: Disservin <[email protected]>
- Loading branch information
Showing
3 changed files
with
82 additions
and
57 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
#!/bin/sh | ||
|
||
wget_or_curl=$( (command -v wget > /dev/null 2>&1 && echo "wget -q") || \ | ||
(command -v curl > /dev/null 2>&1 && echo "curl -L -s -k")) | ||
|
||
if [ -z "$wget_or_curl" ]; then | ||
>&2 printf "%s\n" "Neither wget or curl is installed." \ | ||
"Install one of these tools to download NNUE files automatically." | ||
exit 1 | ||
fi | ||
|
||
sha256sum=$( (command -v shasum > /dev/null 2>&1 && echo "shasum -a 256") || \ | ||
(command -v sha256sum > /dev/null 2>&1 && echo "sha256sum")) | ||
|
||
if [ -z "$sha256sum" ]; then | ||
>&2 echo "sha256sum not found, NNUE files will be assumed valid." | ||
fi | ||
|
||
get_nnue_filename() { | ||
grep "$1" evaluate.h | grep "#define" | sed "s/.*\(nn-[a-z0-9]\{12\}.nnue\).*/\1/" | ||
} | ||
|
||
validate_network() { | ||
# If no sha256sum command is available, assume the file is always valid. | ||
if [ -n "$sha256sum" ] && [ -f "$1" ]; then | ||
if [ "$1" != "nn-$($sha256sum "$1" | cut -c 1-12).nnue" ]; then | ||
rm -f "$1" | ||
return 1 | ||
fi | ||
fi | ||
} | ||
|
||
fetch_network() { | ||
_filename="$(get_nnue_filename "$1")" | ||
|
||
if [ -z "$_filename" ]; then | ||
>&2 echo "NNUE file name not found for: $1" | ||
return 1 | ||
fi | ||
|
||
if [ -f "$_filename" ]; then | ||
if validate_network "$_filename"; then | ||
echo "Existing $_filename validated, skipping download" | ||
return | ||
else | ||
echo "Removing invalid NNUE file: $_filename" | ||
fi | ||
fi | ||
|
||
for url in \ | ||
"https://tests.stockfishchess.org/api/nn/$_filename" \ | ||
"https://github.com/official-stockfish/networks/raw/master/$_filename"; do | ||
echo "Downloading from $url ..." | ||
if $wget_or_curl "$url"; then | ||
if validate_network "$_filename"; then | ||
echo "Successfully validated $_filename" | ||
else | ||
echo "Downloaded $_filename is invalid" | ||
continue | ||
fi | ||
else | ||
echo "Failed to download from $url" | ||
fi | ||
if [ -f "$_filename" ]; then | ||
return | ||
fi | ||
done | ||
|
||
# Download was not successful in the loop, return false. | ||
>&2 echo "Failed to download $_filename" | ||
return 1 | ||
} | ||
|
||
fetch_network EvalFileDefaultNameBig && \ | ||
fetch_network EvalFileDefaultNameSmall |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters