Skip to content

Commit af68e0e

Browse files
committed
test ABI compatibility with zlib-ng on CI
1 parent b9ba7a6 commit af68e0e

File tree

1 file changed

+65
-7
lines changed

1 file changed

+65
-7
lines changed

.github/workflows/checks.yaml

Lines changed: 65 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -397,13 +397,6 @@ jobs:
397397
run: |
398398
cargo build --release --target ${{matrix.target}} --features=semver-prefix
399399
objdump -tT target/${{matrix.target}}/release/deps/libz_rs.so | grep -q -E "LIBZ_RS_SYS_v0.[0-9]+.x_uncompress" || (echo "symbol not found!" && exit 1)
400-
- name: "cdylib: versioned symbols"
401-
working-directory: libz-rs-sys-cdylib
402-
run: |
403-
cargo build --release --target ${{matrix.target}} --features=gz
404-
cc -shared -Wl,--gc-sections -Wl,--whole-archive target/${{matrix.target}}/release/libz_rs.a -Wl,--no-whole-archive -Wl,--version-script=include/zlib.map -Wl,--undefined-version -Wl,-soname,libz_rs.so.1 -lc -o target/${{matrix.target}}/release/libz_rs.versioned.so
405-
objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep "ZLIB"
406-
objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep -q -E "ZLIB_1.2.2.3 deflateTune" || (echo "symbol not found!" && exit 1)
407400
- run: sudo apt-get update && sudo apt-get install -y --no-install-recommends valgrind
408401
- name: "cdylib: example.c"
409402
env:
@@ -424,6 +417,71 @@ jobs:
424417
./example
425418
valgrind --track-origins=yes --error-exitcode=1 ./example
426419
420+
421+
symbol-versioning:
422+
name: Symbol versioning
423+
strategy:
424+
matrix:
425+
include:
426+
- target: x86_64-unknown-linux-gnu
427+
features:
428+
- ''
429+
runs-on: ubuntu-latest
430+
steps:
431+
- name: Checkout sources
432+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
433+
with:
434+
persist-credentials: false
435+
- name: Install rust toolchain
436+
uses: dtolnay/rust-toolchain@be73d7920c329f220ce78e0234b8f96b7ae60248
437+
with:
438+
toolchain: nightly # for c-variadic functions
439+
targets: ${{matrix.target}}
440+
441+
- name: Install apt packages
442+
uses: awalsh128/cache-apt-pkgs-action@v1
443+
with:
444+
packages: build-essential cmake pkg-config abigail-tools binutils
445+
version: 2
446+
447+
- name: Build zlib-ng (in zlib compat mode)
448+
working-directory: /tmp
449+
run: |
450+
git clone --depth 1 https://github.com/zlib-ng/zlib-ng.git
451+
cmake -B zlib-ng-build -S zlib-ng \
452+
-DCMAKE_BUILD_TYPE=Release \
453+
-DZLIB_COMPAT=ON
454+
cmake --build zlib-ng-build --config Release
455+
ls /tmp/zlib-ng-build
456+
457+
- name: Build libz_rs.versioned.so
458+
working-directory: libz-rs-sys-cdylib
459+
run: |
460+
cargo +nightly build --release --target ${{matrix.target}} --features=gz,gzprintf
461+
462+
cc -shared \
463+
-Wl,--gc-sections \
464+
-Wl,--whole-archive target/${{matrix.target}}/release/libz_rs.a \
465+
-Wl,--no-whole-archive \
466+
-Wl,--version-script=include/zlib.map \
467+
-Wl,--undefined-version \
468+
-Wl,-soname,libz_rs.so.1 \
469+
-lc \
470+
-o target/${{matrix.target}}/release/libz_rs.versioned.so
471+
472+
ls target/${{matrix.target}}/release
473+
474+
- name: Check versioned symbols
475+
working-directory: libz-rs-sys-cdylib
476+
run: |
477+
objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep "ZLIB"
478+
objdump -T target/${{matrix.target}}/release/libz_rs.versioned.so | grep -q -E "ZLIB_1\.2\.2\.3.*deflateTune" || (echo "symbol not found!" && exit 1)
479+
480+
- name: ABI comparison vs zlib-ng
481+
working-directory: libz-rs-sys-cdylib
482+
run: |
483+
abidiff --no-unreferenced-symbols --ignore-soname /tmp/zlib-ng-build/libz.so.1 target/${{matrix.target}}/release/libz_rs.versioned.so
484+
427485
cargo-c-dynamic-library:
428486
name: cargo-c dynamic library
429487
strategy:

0 commit comments

Comments
 (0)