Files
secp256k1-zkp/tools/check-abi.sh
T

67 lines
2.2 KiB
Bash
Raw Normal View History

2023-12-20 17:37:39 +00:00
#!/bin/sh
set -eu
default_base_version="$(git describe --match "v*.*.*" --abbrev=0)"
2023-12-21 17:31:36 +01:00
default_new_version="HEAD"
2023-12-20 17:37:39 +00:00
display_help_and_exit() {
2024-01-09 00:47:23 +01:00
echo "Usage: $0 [<base_ver> [<new_ver>]]"
2023-12-20 17:37:39 +00:00
echo ""
echo "Description: This script uses the ABI Compliance Checker tool to determine if the ABI"
echo " of a new version of libsecp256k1 has changed in a backward-incompatible way."
echo ""
echo "Options:"
2024-01-09 00:47:23 +01:00
echo " base_ver Specify the base version as a git commit-ish"
echo " (default: most recent reachable tag matching \"v.*.*\", currently \"$default_base_version\")"
echo " new_ver Specify the new version as a git commit-ish"
echo " (default: $default_new_version)"
2023-12-20 17:37:39 +00:00
echo " -h, --help Display this help message"
exit 0
}
if [ "$#" -eq 0 ]; then
base_version="$default_base_version"
new_version="$default_new_version"
elif [ "$#" -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" = "--help" ]; }; then
display_help_and_exit
2024-01-09 00:47:23 +01:00
elif [ "$#" -eq 1 ] || [ "$#" -eq 2 ]; then
2023-12-20 17:37:39 +00:00
base_version="$1"
2024-01-09 00:47:23 +01:00
if [ "$#" -eq 2 ]; then
new_version="$2"
fi
2023-12-20 17:37:39 +00:00
else
echo "Invalid usage. See help:"
echo ""
display_help_and_exit
fi
checkout_and_build() {
2023-12-21 17:31:36 +01:00
_orig_dir="$(pwd)"
git worktree add --detach "$1" "$2"
2023-12-20 17:37:39 +00:00
cd "$1"
mkdir build && cd build
cmake -S .. --preset dev-mode \
-DCMAKE_C_COMPILER=gcc -DCMAKE_BUILD_TYPE=None -DCMAKE_C_FLAGS="-g -Og -gdwarf-4" \
-DSECP256K1_BUILD_BENCHMARK=OFF \
-DSECP256K1_BUILD_TESTS=OFF \
-DSECP256K1_BUILD_EXHAUSTIVE_TESTS=OFF \
-DSECP256K1_BUILD_CTIME_TESTS=OFF \
-DSECP256K1_BUILD_EXAMPLES=OFF
cmake --build . -j "$(nproc)"
abi-dumper lib/libsecp256k1.so -o ABI.dump -lver "$2" -public-headers ../include/
2023-12-21 17:31:36 +01:00
cd "$_orig_dir"
2023-12-20 17:37:39 +00:00
}
echo "Comparing $base_version (base version) to $new_version (new version)"
echo
2024-01-09 00:47:23 +01:00
base_source_dir="$(mktemp -d)"
2023-12-20 17:37:39 +00:00
checkout_and_build "$base_source_dir" "$base_version"
2024-01-09 00:47:23 +01:00
new_source_dir="$(mktemp -d)"
2023-12-20 17:37:39 +00:00
checkout_and_build "$new_source_dir" "$new_version"
abi-compliance-checker -lib libsecp256k1 -old "${base_source_dir}/build/ABI.dump" -new "${new_source_dir}/build/ABI.dump"
git worktree remove "$base_source_dir"
git worktree remove "$new_source_dir"