diff --git a/scripts/build/build_manylinux2014.sh b/scripts/build/build_manylinux2014.sh index 0e87bd54..ba32e473 100755 --- a/scripts/build/build_manylinux2014.sh +++ b/scripts/build/build_manylinux2014.sh @@ -41,6 +41,7 @@ done # Bundle external shared libraries into the wheels for whl in "${prjdir}"/dist/*.whl; do + "${dir}/strip_wheel.sh" "$whl" auditwheel repair "$whl" -w "$distdir" done diff --git a/scripts/build/build_manylinux_2_24.sh b/scripts/build/build_manylinux_2_24.sh index 6a9e992b..742014ad 100755 --- a/scripts/build/build_manylinux_2_24.sh +++ b/scripts/build/build_manylinux_2_24.sh @@ -41,6 +41,7 @@ done # Bundle external shared libraries into the wheels for whl in "${prjdir}"/dist/*.whl; do + "${dir}/strip_wheel.sh" "$whl" auditwheel repair "$whl" -w "$distdir" done diff --git a/scripts/build/strip_wheel.sh b/scripts/build/strip_wheel.sh new file mode 100755 index 00000000..0747f8c6 --- /dev/null +++ b/scripts/build/strip_wheel.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Strip symbols inplace from the libraries in a zip archive. +# +# Stripping symbols is beneficial (reduction of 30% of the final package, > +# %90% of the installed libraries. However just running `auditwheel repair +# --strip` breaks some of the libraries included from the system, which fail at +# import with errors such as "ELF load command address/offset not properly +# aligned". +# +# System libraries are already pretty stripped. _psycopg2.so goes around +# 1.6M -> 300K (python 3.8, x86_64) +# +# This script is designed to run on a wheel archive before auditwheel. + +set -euo pipefail +set -x + +wheel=$(realpath "$1") +shift + +# python or python3? +if which python > /dev/null; then + py=python +else + py=python3 +fi + +tmpdir=$(mktemp -d) +trap "rm -r ${tmpdir}" EXIT + +cd "${tmpdir}" +$py -m zipfile -e "${wheel}" . + +find . -name *.so -ls -exec strip "$@" {} \; +# Display the size after strip +find . -name *.so -ls + +$py -m zipfile -c "${wheel}" * + +cd -