Skip to content

Commit 736a897

Browse files
committed
Add tools/check-abi.sh
1 parent 77af1da commit 736a897

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

tools/check-abi.sh

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/bin/sh
2+
3+
set -eu
4+
5+
default_base_version="$(git describe --match "v*.*.*" --abbrev=0)"
6+
default_new_version="master"
7+
8+
display_help_and_exit() {
9+
echo "Usage: $0 <base_ver> <new_ver>"
10+
echo ""
11+
echo "Description: This script uses the ABI Compliance Checker tool to determine if the ABI"
12+
echo " of a new version of libsecp256k1 has changed in a backward-incompatible way."
13+
echo ""
14+
echo "Options:"
15+
echo " base_ver Specify the base version (default: $default_base_version)"
16+
echo " new_ver Specify the new version (default: $default_new_version)"
17+
echo " -h, --help Display this help message"
18+
exit 0
19+
}
20+
21+
if [ "$#" -eq 0 ]; then
22+
base_version="$default_base_version"
23+
new_version="$default_new_version"
24+
elif [ "$#" -eq 1 ] && { [ "$1" = "-h" ] || [ "$1" = "--help" ]; }; then
25+
display_help_and_exit
26+
elif [ "$#" -eq 2 ]; then
27+
base_version="$1"
28+
new_version="$2"
29+
else
30+
echo "Invalid usage. See help:"
31+
echo ""
32+
display_help_and_exit
33+
fi
34+
35+
configure_and_build() {
36+
cmake -S "$1" --preset dev-mode \
37+
-DCMAKE_C_COMPILER=gcc -DCMAKE_BUILD_TYPE=None -DCMAKE_C_FLAGS="-g -Og -gdwarf-4" \
38+
-DSECP256K1_BUILD_BENCHMARK=OFF \
39+
-DSECP256K1_BUILD_TESTS=OFF \
40+
-DSECP256K1_BUILD_EXHAUSTIVE_TESTS=OFF \
41+
-DSECP256K1_BUILD_CTIME_TESTS=OFF \
42+
-DSECP256K1_BUILD_EXAMPLES=OFF
43+
cmake --build . -j "$(nproc)"
44+
}
45+
46+
source_dir=$(pwd)
47+
48+
git -c advice.detachedHead=false checkout "$base_version"
49+
base_build_dir=$(mktemp -d)
50+
cd "$base_build_dir"
51+
configure_and_build "$source_dir"
52+
abi-dumper src/libsecp256k1.so -o ABI.dump -lver "$base_version"
53+
cd "$source_dir"
54+
55+
git -c advice.detachedHead=false checkout "$new_version"
56+
current_build_dir=$(mktemp -d)
57+
cd "$current_build_dir"
58+
configure_and_build "$source_dir"
59+
abi-dumper src/libsecp256k1.so -o ABI.dump -lver "$new_version"
60+
cd "$source_dir"
61+
62+
abi-compliance-checker -lib libsecp256k1 -old "${base_build_dir}/ABI.dump" -new "${current_build_dir}/ABI.dump"

0 commit comments

Comments
 (0)